• ベストアンサー

エクセルVBAで検索して内容をコピーする

VBAで検索をして内容コピーをするやり方を考えているのですが、 初心者でどうもうまくいきません。 処理の内容としては、 シート1のA列、B列とシート2のA列と一致したときに シート2のB列にある内容を シート1のC列にコピーするもの。(空白時は、とばして次の処理へ行く)

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.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

maru777zz
質問者

お礼

このVBAが使いやすいので参考にさせていただきます。 ありがとうございます

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

>シート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 インド

maru777zz
質問者

お礼

このVBAも参考にさせていただきます。 ありがとうございます

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

No1です。関数案で C列に =VLOOKUP(IF(A2="",B2,A2),Sheet2!A:B,2,FALSE) 下コピーで十分です。 もしVBA でというのであれば マクロの記録で、上記の式を入れて下へコピー C列を選択、コピー、形式を選択して貼り付け 値 にチェック OK までの一連の作業を記録してみてください。

maru777zz
質問者

お礼

ありがとうございます マクロでやりたいと思います

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

作成例: 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列と一致したらなのか,肝心のヤリタイ事が不明瞭です。

maru777zz
質問者

補足

失礼しました。 シート1のAB列は、比較したデータが入っており、 存在するものは、項目が出てきて、ないものは項目が出てこないというデータです。 シート1エクセルの例            シート2エクセル例  A    B                      A   B AAAAA  AAAAA              AAAAA  日本 BBBBB  BBBBB              BBBBB  アメリカ CCCCC                       ・        DDDDD                ・ EEEEE

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

>シート1のA列、B列とシート2のA列と一致したときに A列とB列のふたつをどう一致した時でしょうか。 質問の内容を シート1のA列とB列をつなげた値が シート2のA列と一致した行のB列にある内容を シート1のC列に表示 ということであれば C列にVlookup関数をいれれば簡単にできます。

関連するQ&A

  • Excel VBAによる検索処理?

    Excelで以下の例のように、A列・B列に入力されているとします。A列を検索して、C列にB列の値を返す式を考えてますが、さっぱりわかりません。VBAとかも正直素人ですが、サンプルもしくは考え方を教えていただければと思います。以下の処理内容です。 ・AXセルが「B」であった場合、次のセル(A(X+1))を検索し、次が空白になるまで検索し、空白になる前の最後の行のB列の値をCXセルに返す。該当しない場合は空白のまま 下記の例ですと3行目、8行目のB列の値を2・3、6-8行目のC列のセルに返すことになります。よろしくお願いいたします。 (処理前) ___A__B__C ------------- 1 2__B__2 3__B__3 4______4 5______5 6__B__6 7__B__7 8__B__8 9______9 (処理後) ___A__B__C ------------- 1 2__B__2__3 3__B__3__3 4______4 5______5 6__B__6__8 7__B__7__8 8__B__8__8 9______9

  • エクセル VBAで2つのデータを比較して、一致するものを検索したい

    以下のような事をしたいと思っています。 VBAは今まで使った事が殆どなく困っております。 仕事で作らなければならず、宜しくお願い致します。 エクセルVBAで、既存と新規という2つのシートから 2つの条件(A列とB列の完全一致)で行を検索して 一致したものを探し出します。 一致したら「新規シート」の該当した行の売上列のデータを 「既存シート」の該当月の列へコピーしたいと思っております。 また、「新規シート」には「既存シート」にないデータが 存在するので、一致から漏れた行は「既存シート」へ 新たに追加のデータとしてコピーしたいと思っています。 イメージ↓ 既存シート) 商品名 |製造地|6月(製造月の売上)|7月(製造月の売上) a     |あ   |¥150      | b     |い   |¥200      | (空白)  |(空白)|          | 新規シート) 商品名 |製造地 |7月(製造月の売上)| a     |あ   |¥300      | b     |い   |¥100      | c     |う   |¥250      | 上記の2シートで、商品名と製造地の2つが一致していれば 「新規シート」の7月の列のデータを「既存シート」の 7月の列にコピーし、「既存シート」に存在しない 「新規シート」の商品名”c”の行のデータを「既存シート」へ 新たに商品名”c”の行を作成しコピーしたいと思っています。 出来上がり後の(既存シート) 商品名 |製造地 |6月(製造月の売上)|7月(製造月の売上) a      |あ   |¥150      |¥300 b      |い   |¥200      |¥100 c      |う   |¥0        |¥250

  • エクセル(2013)の繰り返し処理マクロについて

    以下のような処理をマクロで行いたいのですが、どなたかお詳しい方教えて頂けませんでしょうか。 1.[シート(1)]A1を検索値にする 2.[シート(2)]のB3を範囲指定する。 3.一致しない場合→次行を検索 4.一致する場合、C3をコピーし、[シート(2)]のC10に値で貼り付ける。 5.[シート(2)]のB4を範囲指定する。 6.一致しない場合→次行を検索 7.一致する場合、C4をコピーし、[シート(2)]のC11に値で貼り付ける。 以下B列が空白セルになるまで繰り返し お手数ですが、ご教授頂けますようお願い致します。

  • VBAの構文で教えてください

    VBAの繰り返し処理 Do Until ~について教えてください。 シートの行列を全て書いてしまうと長くなるので 少し省略させていただきます。    A  B  C  D 1 2008 1 ○ 2008 2 2008 2 × 2008 このような羅列がデータ検索の際に何行になるかわからない状態のデータがあります。 C 列はBが1の場合○、2の場合は× D 列はAが数字があればそのままコピーするようにくみました。 ここで教えていただきたいのが、現在私はCとDの構文は AまたはBに数字があればC,Dに反映するという構文ではなく C、Dの列の最後まで全て数式を入力する構文にしています。 なので、A,Bに入力があってもなくても数式が飛ぶような構文になっています。 そこで、DO Until ~ を使用し A列が空白になるまで処理を繰り返すとすればいいのかなとおもうのですが、 Dim n as integer n=1 Do Until Sheets("sheet1").Cells(n, 1) = "" 空白までという構文(正しいかはわかりませんが)で行き詰っています。 これ以降のAが空白ならDに貼り付ける、 B列も同様に空白まで検索し○または×に置き換えるとは どのうように組み立てたらいいのでしょうか? また、申し訳ないのですが Cが×ならその列の背景を色づける(今回の場合なら2の列) とことまでしてみたいのですが・・・ このようなことが可能であれば教えていただければと思います。 VBAははじめたばかりで不勉強な点も多々ありますがよろしくお願いします。

  • VBAを使って検索したセルを別のシートにコピーする

    こんにちは。 業務でエクセルを使用して差し込み文書を印刷しています。 量が多いのでVBAを使って簡単に作業したいです。 まず、以下のようなシートがあります。 <Sheet1>差込文書 <Sheet2> (A)  (B)    (C)     (D) (E)  (F) 番号|会社名|支店名|役職名|氏名|会社、支店名、役職名、氏名 次のような作業をさせたいです。 1.<sheet2>のA列と同じ番号が<sheet1>の(L1)にあるかどうか検索する。 2.もし、一致するセルがあれば、<sheet2>の該当番号の行のF列を<sheet1>の(B5)にすべて(書式ごと)コピーする。 以上です。 VLOOKUP関数でしましたが、すべてをコピーする事ができなかったので、VBAでコピーしたいです。 F列は、個人名だけの方、支店がない会社などがあるため、バランス良く配置しているセルです。 よろしくお願いします。

  • Excel VBAで・・・

    こんにちわ。VBA初心者ですが、よろしくお願いします。 下記のような表からの値の取得(値の走査)の処理を考えているのですが、どうも1つ1つのセルを比較して取得するやり方しか考えつかなくて、マクロの実行時間が長くなってしまいます。。。 A列  B列   C列   D列 関東 千葉県 千葉市 中央区 関東 東京都       渋谷区 関東       横浜市 東北 福島県 福島市 関西             伏見区 北陸       新潟市 (A列にはエリア、B列には県、C列には市、D列には区が設定されてます。) 入力値がB,C,D列に全て一致した行のA列を返却させたいと思っています。 例えば、神奈川県横浜市港北区と入力した場合、関東を返して欲しいです。 ただし、空白のセルの箇所は見ない(何でも構わない)ため、 東京都新潟市中央区と入力した場合は北陸を返して欲しいのです。 私が思いつくのは、県を比較して、一致or空白なら次の列(市の比較)へ行き、不一致なら次の行で同じ処理を行うやり方しか思いつきません・・・ 1つ1つの比較以外に何かやり方はございますでしょうか? ExcelのFind関数などの利用も考えたのですが、空白の場合にうまく動かないので。。。 宜しければアドバイスをお願いします。

  • エクセル VBA で 教えてください!

    初めて質問させていただきます 初心者で困っています どなたかご教授よろしくお願いします! A列 ____B列______C列 B_____________________ 123 D______________________ 1 D______________________ 2 B______________________456 D______________________ 1 D______________________ 2 D______________________ 3 B______________________789 D______________________ 1 自分はB列にいます(表現が正しいかもわかりませんが) 同じ行で A列の内容が Bだったら隣のCセルの 内容をBセル(自分のいるセル)にコピー Dだったら上の内容(Bの時コピーした内容)をコピーし          行を下へ繰り返し A列のデータが空白まで繰り返す そうして B列を 埋めたいのですが よろしくお願いしたします!       

  • Excel VBAを使って会員検索

    Sheet1のA列に会員番号、B列に氏名、C列にフリガナ、D列に住所といったデータがあります。 Sheet2のA列に会員番号のみがあります。 この2つのデータを照合して、一致した場合のみ、Sheet1の該当会員データの横のセルに“一致”もしくは“1”などの値(上の例だとSheet1のE列に)を入力できるようなVBAを組みたいのですが、教えていただけますでしょうか?

  • エクセルVBA セルを参照した文字検索

    どなたか教えてください。 ブックAのシート1の“A1”の値が、ブックBのシート1のA列に完全一致であるかどうかを検索し、あればそのセルをアクティブ、なければメッセージを返すという処理をVBAで行いたいです。 Findメソッドを使うのかなというのは、なんとなくわかるのですが、検索値が毎回異なり直接検索値をコードに記入できないこと、異なるブックで検索することなどにより、コードの記載方法がわかりません。 どなたか、わかる方お教えください。

  • VBAを使って検索したセルをコピーして別の場所に貼り付ける。

    こんにちは。 業務でエクセルを使っていたのですが、 あまりに毎回時間がかかってしまうため、 VBAを利用して自動化したいと考えています。 まず、以下のようなシートが存在します。 A   B      C D E     F       G  H 1             2  なす          とまと   3 20 3 かぼちゃ         えんどう  4 55 4 きゅうり         りんご   2 82 5 とまと           6                7               みかん  3 10 8 にんじん         ごぼう  9  21 9 はくさい         うり   10 33 10 ねぎ 次のような作業を自動化したいのです。 1.A列に入っている野菜の名前と一致するものがF列にあるかどうか検索する。 2.もし一致するセルがあれば、そのセルとその横のセル、もう一つ横のセルをまとめてコピーしてそれぞれC、D、E列で、検索したもとの野菜と同じ行にペーストする。 3.この操作をA列にある全ての野菜について行い、 もし、F列に一致するものがなければ、CDE列は空欄にしておく。 4.A列一番下まで完了すれば作業終了。 以上です。 よろしくお願い致します。

専門家に質問してみよう