0

この非ループ コードは問題なく実行されます。

If InStr(1, Sheets(1).Range("A1"), "blah") > 0 Then
    Sheets(2).Range("A1") = Sheets(1).Range("B1")
End If

しかし、いくつかの行を反復処理する必要があります。したがって、ループ:

Dim i As Integer
For i = 1 To 10
    If InStr(1, Sheets(1).Cells(i, 1), "blah") > 0 Then
        Sheets(2).Cells(i, 1) = Sheets(1).Cells(i, 2)
    Else Sheets(2).Cells(i, 1) = ""
    End If
Next

ループはコンパイルされてクラッシュしませんが、出力は返されません。なんで?

4

3 に答える 3

2

instr 式に 1 と 0 を追加します

Instr(1, Sheets(1).Cells(i,1), "blah") > 0

Sheets(2)また、の値が変更されるものであると確信していますか?

于 2013-07-31T21:16:48.123 に答える
1

釣り方を人に教えたら... これは答えではありませんが、自分で問題を解決する方法は次のとおりです。

下の行にカーソルを置き、F9 キーを押して、コードにブレークポイントを追加します。

Sheets(2).Cells(i, 1) = Sheets(1).Cells(i, 2)

正しく実行すると、VBE で次のように表示されます。

ここに画像の説明を入力

F5 キーを押してコードを実行します。

VBE は、ラインにヒットした場合に、このラインを黄色で強調表示します。これにより、本質的にコードの実行が一時停止されるため、何が起こっているかを調べて追跡できます。Debug.Printこれは、ステートメントを入力できる場合(またはMsgBox、上記の私の例と SOrceri の例に従って) 、または [イミディエイト]ウィンドウまたは [ローカル]ウィンドウを使用して変数とその値を調べることができる場合です (これはより高度です)。

「何も起こらない」場合 (つまり、行が黄色で強調表示されない場合)、考えられることは 2 つだけです。

  1. Sheets(1).Cells(i,2)空である、または
  2. ブール式の条件が満たされることはありません。

ブレークポイントを使用すると、それら (または私が考えていなかった他の潜在的な条件) のどれが明らかな「エラー」に寄与している可能性があるかをデバッグして把握することができます。

更新残念ながら、問題は本当にあなたの論理だと思います。できるだけ明確な例を提供しようとします。

Sub Test()
Dim i As Integer
Dim sht1Cell As Range
Dim sht2Cell As Range
For i = 1 To 10
    Set sht1Cell = Sheets(1).Cells(i, 1)
    Set sht2Cell = Sheets(2).Cells(i, 1)

    'Now, test whether "blah" is found in sht1Cell:
    If InStr(1, sht1Cell.Value, "blah") > 0 Then
        'If it contains "blah", then put this value in sheet 2.
        'Note: you were previously putting values from Column B.
        '      but this is taking the exact cell value from 
        '      column A, so I KNOW this value cannot be a blank value.
        sht2Cell.Value = sht1Cell.Value
    Else:
        'Does not contain "blah", so make sheet 2 have a blank
        'This blanks out any value that might have previously been
        'present in sh2Cell.
        sht2Cell.Value = ""
    End If
Next
End Sub

これで目的の結果が得られない場合は、ロジックに問題があると 100% 確信しています。これは、達成したい条件と結果を適切に説明していません。どこが違うのかは、あなたが何をしようとしているのかをより完全に説明できない限り、誰の推測でもあります。

于 2013-07-31T22:17:30.500 に答える