如何让我的代码识别具有特定字符串 STRUCTURE 的单元格,同时忽略其他单元格?



所以,这就是我面临的问题。

我有一些 vba 代码,它将在包含特定字符串的单个列中找到每个单元格。它查找的单词位于一个名为 totArray 的数组中。这很好用。

问题是,当单元格中的单词包含"SUBTOTAL"或类似内容时,它仍然会找到它并复制它。此外,有些单词的 TOTAL 或 TOTAAL 后面没有未知长度的数字。

请参阅我随附的代码。我如何获得它,以便它找到单元格包含 TOTAL 或 TOTAAL 但始终后跟仅非通用数字结构的所有情况。

Sub CopyValues()
Dim totArray As Variant
Dim wsSource As Worksheet
Dim wsDest As Worksheet
Dim NoRows As Long
Dim DestNoRows As Long
Dim I As Long
Dim J As Integer
Dim rngCells As Range
Dim rngFind As Range
Dim Found As Boolean
totArray = Array("TOTAAL ", "TOTAL")
Set wsSource = Worksheets("Input")
Set wsDest = Worksheets("Output")
NoRows = wsSource.Range("A65536").End(xlUp).Row
DestNoRows = 2
For I = 1 To NoRows
Set rngCells = wsSource.Range("A" & I)
Found = False
For J = 0 To UBound(totArray)
Found = Found Or Not (rngCells.Find(totArray(J)) Is Nothing)
Next J
If Found Then
rngCells.Copy wsDest.Range("B" & DestNoRows)
DestNoRows = DestNoRows + 1
End If
Next I
End Sub

查找在指定字符串之前/之后包含字符的字符串:

您可以将通配符放入字符串中,请参阅此文档。

"*TOTAL"会发现小、总计等作为星号通配符任意数量的字符。

"*TOTAL?????会找到任何末尾带有总计的单词(如上例(,并且在单词后最多包含 5 个字符(因为有 5 个问号(。例如:小计123或小计54321

*TOTAL ?????会找到小计 123或小总数 54321(请注意,可以在字符/通配符之间的字符串中使用空格(。

使用此信息,您应该能够调整Array字符串以适合您的情况。


查找与指定字符串完全匹配的内容:

应在.find方法中指定LookAt参数。

例如rngCells.Find(totArray(J), , , LookAt:= xlWhole).

使用LookAt功能非常简单。

  1. xlWhole表示搜索值必须与整个单元格内容匹配。
  2. xlPart表示搜索值只需匹配部分单元格

注:在该示例中,省略了AfterLookIn参数。LookAt参数是第 4 个参数,这就是为什么逗号之间有空格的原因。

如果未指定参数,Excel 将使用上次通过 VBAGUI 查找窗口使用.Find方法运行的搜索中的参数。

您可以阅读有关每个参数的详细信息,包括本文中有关 vba find 方法的LookAt参数。

最新更新