2017-12-20 11 views
0

私は常にx行とy列を持つテーブルを持っています。各セルには番号が含まれています。通常は0で、時には1以上です。Excel VBA - 範囲内のセルでセルの値が0より大きい場合、

現在のところ、ゼロ以外の値があるかどうかを確認するコードがあります。次に、これらの値を処理するためのスニペットに移動します。

更新されたコードでは、1つのセルでも0より大きい値がある場合は、コードの特定のスニペットに移動します。それ以外の場合は無視してください。

ループでこれを実行しようとしましたが、複数のセルの値が0より大きい場合、現在のコードが複数回実行されますが、これは最適ではありません。だから、私はループが私が望むものではないと思います。

擬似コード、それは動作しませんでした:

For Each cell in Range("B2:C8") 
    If cell.value > 0 Then 
     "some code" 
    End If 
Next cell 

これは任意の時間に複数の非ゼロ値が発生する問題である「いくつかのコード」非ゼロ値が発見されるたびに、実行されます。

+0

なぜ合計(範囲)> 0? –

+0

@HarassedDad MarcinSzaleniecによって投稿されたGaryの学生の発言を参照してください。 –

+0

負の値がある可能性がある場合は、If(Sum(yourrange)<> 0が必要) –

答えて

2

あなたは、以下のようなコードを少し変更する必要があります

For Each cell in Range("B2:C8") 
    If cell.value > 0 Then 
     "some code" 
     exit for 'Now that we have executed the code once we don't need to run it again! 
    End If 
Next cell 
+0

Exit文をIf文の外に移動しなければならないが、今のところ動作する。 – sbagnato

+2

@sbagnatoはforループを終了する最初のセルで 'IF ... END IF'ループの外に置いておけば –

+0

最初のセルの後に出るとループが大きくなりません – braX

3

私が理解できるように、私はそれより短く

if worksheetfunction.sum(Range("B2:C8")) > 0 then 
+0

私はこれを信じています細胞をループするよりも速くなります –

+1

これは特に –

+0

@ MarcinSzaleniecの範囲に負の値がない場合に有効です。ゼロ以外の値の最初のインスタンスに対してのみ「some code」を実行し、その後のインスタンスに対しては実行しないでください。 – sbagnato

0

になるだろう:非ゼロ値の最初の出現で、あなたのコードは何かをして、別のゼロ以外の値の検索をやめてください。右? この場合、「Exit For」は問題を解決するはずです。

For Each cell in Range("B2:C8") 
    If cell.value > 0 Then 
     "some code" 
     Exit For 
    End If 
Next cell 
関連する問題