- ベストアンサー
エクセルVBAで検索して内容をコピーする
VBAで検索をして内容コピーをするやり方を考えているのですが、 初心者でどうもうまくいきません。 処理の内容としては、 シート1のA列、B列とシート2のA列と一致したときに シート2のB列にある内容を シート1のC列にコピーするもの。(空白時は、とばして次の処理へ行く)
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! 横からお邪魔します。 こういうことですかね? 各Sheetともデータは2行目からあるとします。 一例です。 Sub test() Dim i, j As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") Set ws2 = Worksheets("sheet2") For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row For j = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row If WorksheetFunction.CountIf(Range(ws1.Cells(i, 1), ws1.Cells(i, 2)), ws2.Cells(j, 1)) Then ws1.Cells(i, 3) = ws2.Cells(j, 2) End If Next j Next i End Sub 外していたらごめんなさいね。m(_ _)m
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
>シート1のAB列は、比較したデータが入っており、 存在するものは、項目が出てきて、ないものは項目が出てこないというデータです。 超えrだって意味がよくわからない・。 ーー あんまり自信ないが(下記コードで(A)(B)の点など) Sub test01() Dim sh1, sh2 Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") d1 = sh1.Range("A65536").End(xlUp).Row d2 = sh1.Range("B65536").End(xlUp).Row d = IIf(d1 > d2, d1, d2) '下の方を取る(A) MsgBox d For i = 1 To d k = sh1.Cells(i, "A") If sh1.Cells(i, "A") = "" Then k = sh1.Cells(i, "B") 'A列空白ならB列を使う(B) MsgBox k On Error GoTo p1 r = sh2.Range("a1:A100").Find(k).Row MsgBox r sh1.Cells(i, "C") = sh2.Cells(r, "B") p2: Next i Exit Sub p1: Cells(i, "C") = "該当なし" Resume p2 End Sub 結果 Sheet1 A列 B列 C列 AAAAA AAAAA 日本 BBBBB BBBBB アメリカ CCCCC 該当なし DDDDD 該当なし EEEEE 該当なし FFFFF FFFFF エジプト ggggg インド Sheet2 検索表 AAAAA 日本 BBBBB アメリカ FFFFF エジプト ggggg インド
お礼
このVBAも参考にさせていただきます。 ありがとうございます
- hallo-2007
- ベストアンサー率41% (888/2115)
No1です。関数案で C列に =VLOOKUP(IF(A2="",B2,A2),Sheet2!A:B,2,FALSE) 下コピーで十分です。 もしVBA でというのであれば マクロの記録で、上記の式を入れて下へコピー C列を選択、コピー、形式を選択して貼り付け 値 にチェック OK までの一連の作業を記録してみてください。
お礼
ありがとうございます マクロでやりたいと思います
- keithin
- ベストアンサー率66% (5278/7941)
作成例: sub macro1() dim h as range dim res as range worksheets("Sheet1").activate ’目的の範囲を取得して巡回し for each h in range("A2:A" & range("A65536").end(xlup).row) ’検索して set res = worksheets("Sheet2").range("A:A").find(what:=h & h.offset(0, 1), lookin:=xlvalues, lookat:=xlwhole) if not res is nothing then ’コピーする res.offset(0, 1).copy destination:=h.offset(0, 2) end if next end sub #既出回答でも指摘がある通り,シート1のAB列を「どうした」のがシート2のA列と一致したらなのか,肝心のヤリタイ事が不明瞭です。
補足
失礼しました。 シート1のAB列は、比較したデータが入っており、 存在するものは、項目が出てきて、ないものは項目が出てこないというデータです。 シート1エクセルの例 シート2エクセル例 A B A B AAAAA AAAAA AAAAA 日本 BBBBB BBBBB BBBBB アメリカ CCCCC ・ DDDDD ・ EEEEE
- hallo-2007
- ベストアンサー率41% (888/2115)
>シート1のA列、B列とシート2のA列と一致したときに A列とB列のふたつをどう一致した時でしょうか。 質問の内容を シート1のA列とB列をつなげた値が シート2のA列と一致した行のB列にある内容を シート1のC列に表示 ということであれば C列にVlookup関数をいれれば簡単にできます。
お礼
このVBAが使いやすいので参考にさせていただきます。 ありがとうございます