2016-05-04 7 views
1

2つのワークシートを持つファイルがあります。空になるまで、シートAの列Aを見下ろすマクロを実行する必要があります。シート1のシート2の列Aのセルから値を探す必要があります。見つかった場合は、列APの値を変更します。見つからなければ、次の値の次の検索にスキップします。Excel VBマクロで別のシートの値を検索し、現在のシートのセル値を変更します

これはこれまで私が行ってきたことです。私はもはやエラーが発生しない場所に修正することができましたが、結果もありません。実行されているように見えますが、シート1のセル(「AP」、「行の値が見つかりました」)に変更はありません。

Sub dataChange() 
    Dim myRow As Integer 
    Dim srch As Integer 
    On Error GoTo Err_Execute 
    myRow = 1 
    srch = 1 
    While Sheet2.Cells(myRow, 1).Value <> "" 
     If Sheet1.Range("A" & CStr(srch)).Value = Sheet2.Cells(myRow, 1).Value Then 
      Sheet1.Range("AP" & CStr(srch)).Value = "HOUSTON" 
     End If 
     srch = srch + 1 
     myRow = myRow + 1 
    Wend 
Err_Execute: 
    MsgBox "An error occurred." 
End Sub 
+0

行は一致しますか?また、 'cells'を使うのが簡単です(とにかく)。 – findwindow

+0

私はコードを試して、それは動作します。 'Err_Execute:'の前に 'Exit Sub'が必要ですが、すべてがうまく実行されてもエラーメッセージは表示されません。そして、変数宣言を確実に 'Integer'から' Long'に変更する必要があります。整数は32767までの数値しか保持できません。1048576行を越えるためにそれらを使用するのは間違っています。だから、すべてが動いている - 問題は何か? – Leviathan

+0

入力のサンプル、予想される出力、および取得していない結果を提供することをお勧めします。私はネストされたループが必要だと推測します - srchは外側、myRowは内側です。 – OldUgly

答えて

0

あなたのコードはSheet2A1Sheet1からA1を比較しています。私はA1Sheet1に、ColumnAをすべてSheet2に比較したいと思います。したがって、外側ループが必要です。

以下は、これを行うためのコードです。また、IntegerLongに変更するLeviathanのコメントを組み込み、Exit Subを適切な場所に挿入しました。

Sheet2のはこのようになります...

enter image description here

私は、シート1に、この結果を得る...

enter image description here

コード...

Sub dataChange() 
    Dim myRow As Long, srch As Integer 
    On Error GoTo Err_Execute 
    myRow = 1 
    srch = 1 
    Do While Sheet1.Cells(srch, 1).VALUE <> "" 
     Do While Sheet2.Cells(myRow, 1).VALUE <> "" 
      If Sheet1.Cells(srch, 1).VALUE = Sheet2.Cells(myRow, 1).VALUE Then 
       Sheet1.Range("AP" & srch).VALUE = "HOUSTON" 
       Exit Do 
      End If 
      myRow = myRow + 1 
     Loop 
     myRow = 1 
     srch = srch + 1 
    Loop 
    Exit Sub 
Err_Execute: 
    MsgBox "An error occurred." 
End Sub 
関連する問題