gpt4 book ai didi

vba - 如果单元格包含一组单词中的一个单词,则检查 VBA 子

转载 作者:行者123 更新时间:2023-12-04 20:40:36 25 4
gpt4 key购买 nike

我正在开发一个 cargo 计算器,该计算器根据 cargo 是否可以分类为管道、板或梁使用不同的算法。我试图让它根据元素的描述和尺寸自动检测 cargo 段(如果可以的话;如果没有足够的数据,运算符(operator)将能够手动选择一个段)。

我最初的想法是将关键字列表设置为数组;如果可以放纵一点伪代码,我正在考虑以下几点:

Pipes = {pipe, tube, conduit, duct}
Plates = {plate, sheet, panel}
Beams = {beam, rail, girder}
IF Description CONTAINS Pipes THEN Calc = "Pipes & Tubes"

我知道它可以用很多很多的 IF 子句来完成,但是使用数组或类似的东西可以更容易地在同义词出现时维护列表——当然也可以使代码更整洁。

对这样做的一种很好的有效方法有什么想法吗?

编辑:澄清一下,我并不是要查看是否在数组中找到了整个字符串,而是要检查是否在描述性字符串中找到了数组(或单词集合,无论如何排列)中的任何单词。例如,使用上面的数组,“钢片”应该返回到“板”类别中,因为描述包含“片”。

编辑: @R3uk 找到了一个很好的解决方案。这是我最终使用的代码:

在我的声明模块中:
public aPipe As String ' 管道同义词数组
public aPlate As String ' 板同义词数组
public aBeam As String ' Beam 同义词数组

在我的管理模块中:
aPipe = "管道/ pipe /导管/导管"
aPlate =“板/片/面板”
aBeam =“梁/轨道/大梁/桁架”

在主导入器模块中,在导入子模块中:
ImpCalcDetect ' 导入计算器分段检测(实验性)

而位本身,与 R3uk 的答案基本相同,但稍作调整以使其不区分大小写:
Sub ImpCalcDetect()
' Experimental calculator segment detection
If Contains_Keyword(LCase(wsCalc.Cells(iImportCounter, 2).Value), aPipe) Then wsCalc.Cells(iImportCounter, 3).Value = "Pipes"
If Contains_Keyword(LCase(wsCalc.Cells(iImportCounter, 2).Value), aPlate) Then wsCalc.Cells(iImportCounter, 3).Value = "Plates"
If Contains_Keyword(LCase(wsCalc.Cells(iImportCounter, 2).Value), aBeam) Then wsCalc.Cells(iImportCounter, 3).Value = "Beams"
End Sub
Function Contains_Keyword(Descr As String, KeyWordS As String) As Boolean
Dim A() As String, IsIn As Boolean, i As Integer
A = Split(KeyWordS, "/")
IsIn = False
For i = LBound(A) To UBound(A)
If InStr(1, Descr, A(i)) Then
IsIn = True
Exit For
Else
End If
Next i
Contains_Keyword = IsIn
End Function

非常感谢!

最佳答案

您确实可以使用数组,这是一个字符串版本,您只需要用斜杠分隔关键字 / :

Sub Test_AndrewPerry()
Dim Pipes As String, Plates As String, Beams As String
Pipes = "pipe/tube/conduit/duct"
Plates = "plate/sheet/panel"
Beams = "beam/rail/girder"

If Contains_Keyword(Description, Pipes) Then
Calc = "Pipes & Tubes"
Else
'Nothing to do?
End If

End Sub

以及“解压缩”字符串并测试每个关键字直到找到匹配项的功能:
Function Contains_Keyword(Descr As String, KeyWordS As String) As Boolean
Dim A() As String, IsIn As Boolean, i As Integer
A = Split(KeyWordS, "/")
IsIn = False
For i = LBound(A) To UBound(A)
If InStr(1, Descr, A(i)) Then
IsIn = True
Exit For
Else
End If
Next i
Contains_Keyword = IsIn
End Function

关于vba - 如果单元格包含一组单词中的一个单词,则检查 VBA 子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34292429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com