2016-06-16 3 views
0

効率的な質問がここにあります。私は本質的に列内のセルをループして特定の文字列が含まれているかどうかを確認していますが、そのセルには14個の異なる文字列が含まれていない必要があります。私の現在の解決策は、文字列を見つけて、セル上のinstrを使って配列をループすることです。しかし、マクロが実行されているときに何百回もかかることがあります。より良い方法があれば私は好奇心が強い。例えばVBA - 配列内のすべての値の文字列を検索します。

NotArr = Array("blah1", "blah2", "blah3", "etc") 

For r = 1 to 10 
    'Let's assume I've already found the first string 
    For i = 1 to 4 
     If Not InStr(Cells(r, 1).value, NotArr(i)) > 0 Then 
      'Do things 
     End If 
    Next i 
Next r 

注:私は、私はおそらくoverthinkingまたはちょうど明白なことを欠けている知っています。私は約6週間@ 10時間VBAに埋葬されており、私の脳が溶けているのを感じることができます。

ありがとうございます!

+1

配列に範囲を入れても、それを速くすることができます。そのため、シートに何度も戻ってくることはありません。あるいは、各セルの値を変数に入れてテストすると、シート上のセルを参照する回数を減らすことができます。 –

+0

ワークシート(マクロで 'Cells()'を使う)に複数回インタラクトすると、マクロが遅くなります。検索する範囲を配列に保存し、配列をマクロで使用して速度を上げることができます。また、手動モードでの計算を続けたり、画面更新をオフにするなどの基本的なこともあります。 –

+0

ありがとう、これは役に立ちます。それはすでに速いです! –

答えて

1

VBAがExcelの範囲と何百回も対話する必要があるセルをループするのではなく、まずデータを配列に格納してみてください。これは物事をかなり速くするはずです。

Dim arr() as Variant 
arr = Range("A1:G10") 
For each rng in arr 
    For i = 1 to 4 
     If Not InStr(rng.value, NotArr(i)) > 0 Then 
      'Do things 
     End If 
    Next i 
Next 
関連する問題