- ベストアンサー
VBAの条件検索について
- VBAを使用して、複数のシート間で条件検索を行うプログラムを作成したいです。具体的には、sheet1とsheet2の特定の列の値が一致する行を探し、それに対応するsheet1の別の列の値からsheet2の同じ列の値を引いた結果をsheet3の列に表示するプログラムです。
- プログラムの実行例を示します。sheet1のA列とB列の値が7と1であり、sheet2の同じ列の値が7と1の行を探します。その後、sheet1のC列の値3からsheet2のC列の値4を引き、その結果-1をsheet3のC列に表示します。同様に他の行も処理され、結果が表示されます。
- 現在、自分でプログラムを作成しましたが、空欄の検索ができず、うまく動作しません。どなたかご教示いただけないでしょうか?お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
mekarattaさん こんにちは。 下記のプログラムでできるかと思います。 Sub test() Dim sh1 As Worksheet Dim sh2 As Worksheet Dim sh3 As Worksheet Dim a As Long Dim b As Long Set sh1 = Sheets("Sheet1") Set sh2 = Sheets("Sheet2") Set sh3 = Sheets("Sheet3") a = 1 Do While (sh1.Cells(a, "A") <> "" Or sh1.Cells(a, "B") <> "") b = 1 Do While (sh2.Cells(b, "A") <> "" Or sh2.Cells(b, "B") <> "") If sh1.Cells(a, "A") = sh2.Cells(b, "A") And _ sh1.Cells(a, "B") = sh2.Cells(b, "B") Then sh3.Cells(a, "A") = sh1.Cells(a, "A") sh3.Cells(a, "B") = sh1.Cells(a, "B") sh3.Cells(a, "C") = sh1.Cells(a, "C") - sh2.Cells(b, "C") Exit Do End If b = b + 1 Loop a = a + 1 Loop End Sub 注)d1 = sh1.Cells(a,1) & sh1.Cells(a,2) 連結して比較しない方が良いと思います。 例えばA1=11 B1=2 と A2=1 B2=12 はどちらも 112 となってしまうので危険です。 ご確認ください。
その他の回答 (1)
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 シートマクロにしていますので、Sheet3タブ上で右クリック→コードの表示→以下のコードを貼り付けでお試しください。 Sub sample() Set st1 = Sheets(1) Set st2 = Sheets(2) Columns("A:C").Cells.Clear For i = 1 To st1.UsedRange.Rows.Count For j = 1 To st2.UsedRange.Rows.Count If st1.Cells(i, 1) = st2.Cells(j, 1) And _ st1.Cells(i, 2) = st2.Cells(j, 2) Then Cells(i, 1).Resize(1, 2).Value = st1.Cells(i, 1).Resize(1, 2).Value Cells(i, 3).Value = st1.Cells(i, 3) - st2.Cells(j, 3) Exit For End If Next Next End Sub
お礼
ありがとうございます