2017-07-05 114 views
0

我在写一个VBA程序。 我有一列excel vba查找like或regex

For j = 0 To 4 
    For i = 2 To lastrow 
     If Cells(i, 12).Value = groupnames(j) And Cells(i, 8).Value Like "*" & "[BLOCKED]" & "*" Then 
      groupsum(j) = groupsum(j) + 1 
     End If 
    Next i 
Next j 

问题是我有96个细胞这个字符串,但程序中发现了500我怎么能这样对正在进行的工作找到这个字符串[BLOCKED]有问题吗?
感谢您的帮助

+0

不知道我理解,您收到错误消息?没有得到预期的结果?它会有点难以帮助,而不看到你的数据的样本,你在哪里设置和初始化数组''groupnames' –

+0

@ShaiRado我认为他期望96返回最大值,但发现500. –

+0

我有一列数据。这个数据我读到一个数组。我想找到每个单元格这个字符串[BLOCKED]。例如一个单元格有“[BLOCKED] - xyz”。 –

回答

0

您的语法Like操作不正确。用途:

... Like "*[[]BLOCKED]*" 

[...]是一个字符类。所以,你的问题写在你的问题上,它会发现BLOCKED集中的任何单个字符。这显然不是你想要的。

要匹配[]字符,请将其括在字符类中,如我所示。为了匹配]字符,它必须在字符类外。

+0

它并不适合我 –

+0

* does not -'t work * mean?如果这意味着你得到的结果与以前相同(500场比赛),那么你有一个问题,而不是你所说的。如果你的意思是别的,明白我无法读懂你的想法。请阅读[如何创建最小,完整和可验证的示例](http://stackoverflow.com/help/mcve),因为我无法根据您提供的内容重现任何错误。 –

+0

对不起..我的意思是我有0比赛。如果我只是发现封锁,我得到100匹匹配,所以其他部分的代码是好的 –

0

这里是我的代码

Sub blocked() 

Dim SfileUsers As String 
Dim path As String 
Dim pathread As String 
Dim sFileread As String 
Dim lastrow As Long 
Dim keres() As Variant 
Dim groupadd() As String 
Dim groupnames(4) As String 
Dim groupsum(4) As Long 




path = "C:\Users\uids9282\Desktop\" 
SfileUsers = "Users.xlsx" 
Workbooks.Open path & SfileUsers 
Dim hossz As Long 
hossz = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row 
ReDim keres(hossz) 
ReDim groupadd(hossz) 
For i = 2 To hossz 
keres(i) = Sheets(1).Cells(i, 2).Value 
groupadd(i) = Sheets(1).Cells(i, 4).Value 
Next i 


'fájlmegnyitás 
pathread = "C:\Users\uids9282\Desktop\20170703\" 
sFileread = "open.xml" 
     If Dir(pathread & sFileread) = sFileread Then 
      Workbooks.Open pathread & sFileread 
      lastrow = Workbooks(sFileread).Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row 

      Else 
      MsgBox ("Nincs ilyen nevű excel táblázat. Kérem próbálkozzon újra") 
     End If 

'groupok hozzáadása a fájlhoz 
Dim user As String 
For j = 2 To hossz 
    For i = 2 To lastrow 
    user = Trim(Cells(i, 5).Value) 
     If user = keres(j) Then 
      Cells(i, 12).Value = groupadd(j) 
     End If 
    Next i 
Next j 

'group szummázása és átírása 
ThisWorkbook.Activate 
For i = 2 To 6 
groupnames(i - 2) = Cells(i, 1).Value 
Next i 
Workbooks(sFileread).Activate 
For j = 0 To 4 
    For i = 2 To lastrow 
     If Cells(i, 12).Value = groupnames(j) And Cells(i, 8).Value Like "*[[]BLOCKED[]]*" Then 'itt van benne a hiba!!   groupsum(j) = groupsum(j) + 1 
     End If 
    Next i 
Next j 
ThisWorkbook.Activate 
For j = 2 To 6 
    Cells(j, 4).Value = groupsum(j - 2) 
Next j 

Workbooks(SfileUsers).Close SaveChanges:=False 
Workbooks(sFileread).Close SaveChanges:=True 


End Sub 

this is my excel file where i want to searching

+0

这属于您的问题的更新(编辑您的问题以包含此问题),因为它不是您的问题的答案。此外,我没有工具将Excel页面的屏幕截图转换为可用的Excel工作表。你用什么工具来完成转换? –