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

时间:2018-05-24 10:14:38

标签: excel vba excel-vba

所以,这就是我所面对的。

我有一些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

1 个答案:

答案 0 :(得分:0)

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

您可以将通配符放入字符串see this documentation

[System.Web.Http.HttpGet] public IHttpActionResult Payment(string uri) { string[] sess = ... if (someRedirectCondition) return Redirect("http://a.link.to.your.html.page"); else return Ok(sess); // A method type is inferred to Ok<string[]>(string[] content) } 会找到Sub total ,Grand total 等作为星号通配符的任意数量的字符。

"*TOTAL"会在最后找到 total 的任何字词(如上例所示),并且在该字词后面最多包含5个字符(因为有5个问号)。例如:Sub total123 或Sub total54321

"*TOTAL?????会发现Sub 总计123 或Sub 总计54321 (请注意,字符/通配符之间的字符串中可以使用空格。)

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

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

您应该在Array方法中指定LookAt参数。

e.g。 .find

  

使用LookAt函数非常简单。

     
      
  1. rngCells.Find(totArray(J), , , LookAt:= xlWhole)表示搜索值必须与整个单元格内容匹配。
  2.   
  3. xlWhole表示搜索值只需匹配单元格的一部分
  4.   

注意:在该示例中,省略了xlPartAfter参数。 LookIn参数是第4个参数,这就是逗号之间有空格的原因。

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

您可以阅读有关每个参数的详情,包括.Find参数in this article about the vba find method.