奇怪的问题。通过检查单步执行代码可以给我正确的答案。只是运行它不会。
该程序遍历列中的每个单元格,搜索正则表达式匹配。当它找到某些东西时,检查它属于哪个组的相邻列并在字典中保持计数。例如:第 3 组:7、第 5 组:2、第 3 组:8
只是单步执行代码最后会给我不正确的结果,但是为字典中的每个已知项目添加和检查就可以了。对每个 Dictionary(key) 使用 Debug.Print 来检查我在每个循环中得到了多少项目也给了我一个很好的输出。
正确 // 运行代码后真正发生了什么
- Group1:23 // Group1:23
- Group3:21 // Group3:22
- Group6:2 // Group6:2
- Group7:3 // Group7:6
- Group9:8 // Group9:8
- Group11:1 // Group11:12
Group12:2 // Group12:21
Sub Proce() Dim regEx As New VBScript_RegExp_55.RegExp Dim matches Dim Rango, RangoJulio, RangoAgosto As String Dim DictContador As New Scripting.Dictionary Dim j As Integer Dim conteo As Integer Dim Especialidad As String regEx.Pattern = "cop|col" regEx.Global = False 'True matches all occurances, False matches the first occurance regEx.IgnoreCase = True i = 3 conteo = 1 RangoJulio = "L3:L283" RangoAgosto = "L3:L315" Julio = Excel.ActiveWorkbook.Sheets("Julio") Rango = RangoJulio Julio.Activate For Each celda In Julio.Range(Rango) If regEx.Test(celda.Value) Then Set matches = regEx.Execute(celda.Value) For Each Match In matches j = 13 'column M Especialidad = Julio.Cells(i, j).Value If (Not DictContador.Exists(Especialidad)) Then Call DictContador.Add(Especialidad, conteo) GoTo ContinueLoop End If conteo = DictContador(Especialidad) conteo = CInt(conteo) + 1 DictContador(Especialidad) = conteo Next End If ContinueLoop: i = i + 1 'Debug.Print DictContador(key1) 'Debug.Print DictContador(key2) 'etc Next 'Finally, write the results in another sheet. End Sub
这就像 VBA 说“如果我有机会我会欺骗你”
谢谢