奇妙な問題。インスペクションを使用してコードをステップ実行すると、正しい答えが得られます。実行するだけではありません。
このプログラムは、正規表現の一致を検索しながら、列の各セルをループします。何かを見つけると、それが属するグループの隣の列をチェックインし、辞書にカウントを保持します。例:Group3:7、Group5:2、Group3:8
コードをステップ実行するだけで、最後に誤った結果が返されますが、辞書内の既知の各項目を追加して検査すると、うまくいきます。各 Dictionary(key) に対して Debug.Print を使用して、各ループで取得したアイテムの数を確認すると、適切な出力が得られます。
正しい // コードを実行した後に実際に起こること
- グループ 1:23 // グループ 1:23
- グループ 3:21 // グループ 3: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が「機会があればだまします」と言っているようなものです。
ありがとう