• ベストアンサー

エクセルマクロでデータの検索と転記方法

エクセル2000です。 sheetAの 10行~165行に表Aがあります。 途中に、空白行や小計行もかなりあります。 C列のコード(文字列、数値両方あります)をキーにして、SheetBの4行目から91行目までの表B(A列にコードがあります)のB列の数値を、sheetAの10行~170行のD列に転記したいのです。sheetAの表の小計行のC列は空白です。SheetBの表Bのコードは、sheetAの表Aのコードの一部しかありません。ですから、sheetAの表AのコードがSheetBの表Bになかったらそこは何も転記しません。 わかりづらい説明かと思いますが、マクロの記述をお教えいただければ幸いです。

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

  • ベストアンサー
回答No.1

ほかにもっと良い方法があるはずですが、お困りならこんな感じでもできますね。ただし、このやり方だと少し時間がかかります。といっても数秒のことですが。 あと、表Aは165行ですか?170なんですか? とりあえずは165でやっておきましたが。 Sub test01() Set sh1 = Sheets("SheetB") Set sh2 = Sheets("SheetA") For n = 10 To 165 For i = 4 To 91 If sh2.Cells(n, 3) <> "" Then If sh2.Cells(n, 3).Text = sh1.Cells(i, 1).Text Then sh2.Cells(n, 4) = sh1.Cells(i, 2) End If Next i Next n End Sub

error123
質問者

お礼

少し時間がかかりますというのは、表Aのコードを一つ一つ表Bの各行総当りで調べてるからですね? でも数秒のことですからぜんぜん問題ないです。 いつもありがとうございます♪

その他の回答 (1)

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

ほんと分かりづらいです。読んでも一回では頭に入らない。 表現を変えると 表A(SheetA) C列  コード D列  本件のVBAでセット 表B(SheetB) A列  コード B列  数 表Aのコードを見て、表Bで同じコードを探し、見つかれば表BのB列の数を持って来てセットする。 表BのA列コードはユニーク(ダブリなし)とする。 Findメソッドを使えば良いと思います。 Sheet3 C1:C3に(D列は結果も載せたもの)(表Aに当たる) C列   D列 d 9950 h 8975 s g 8900 x Sheet1のA1:B5に(表Bに当たる) A列   B列 a 50 d 9950 f 200 g 8900 h 8975 VBA Sub Macro3() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("sheet3") Set sh2 = Worksheets("sheet1") d = 5 For i = 1 To d Set x = sh2.Cells.Find(What:=sh1.Cells(i, "C"), After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) If x Is Nothing Then GoTo p01 sh1.Cells(i, "D") = x.Offset(0, 1) p01: Next i End Sub (結果) 上記Sheet3のD列のとおり。

error123
質問者

お礼

わかりずらい質問に回答していただき、本当にありがとうございます。 こちらの方法は検索して調べるのですね? 勉強になりました。

error123
質問者

補足

すみません。もう一つ教えてください。 Sub Macro4() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("sheet3") Set sh2 = Worksheets("sheet1") d = 5 For i = 1 To d Set x = sh2.Cells.Find(What:=sh1.Cells(i, "C"), After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) If Not x Is Nothing Then sh1.Cells(i, "D") = x.Offset(0, 1) Next i End Sub でも同じですか? If x Is Nothing Then GoTo p01 sh1.Cells(i, "D") = x.Offset(0, 1) p01: Next i を If Not x Is Nothing Then sh1.Cells(i, "D") = x.Offset(0, 1) Next i に変えただけですが。

関連するQ&A

  • エクセルで入力済みのセルのみ見つけて・・

    エクセルで入力済みのセルだけを見つけ出して、 指定した場所に並べる作業をマクロで1発で出来るようにしたいのですが、その方法を教えてください。 シートが37シートあります。(sheetA1~sheetA12,sheetB1~sheetB12,sheetC1~sheetC12,sheet37) それぞれセルC5からC20まで数値が入っていますが、 最終行はC20とは限りません。(sheet37はまとめるためのシートで空白) C15が最終行の場合もあれば、C18が最終行の場合もあります。 各シートそれぞれ最終行が違います。(列は同じですスタートもC5です) 各シートのC列の入力済みのセルの数値をsheet37のB1セルから順番に縦に並べたいのです。 A,B,Cのシート順にC列に入力された数値を縦に並べます。 空白は無しで詰めて並べます。 これを1回の作業でできるマクロを教えてください。 それから入力済みの最終行を見つけ出すマクロの部分を表示して頂けるとありがたいです。 宜しくお願いします。

  • エクセル マクロ

    エクセルを使って12桁の数字をsheet A と sheetBとの違いを調べる、表?をつくりたいのですが、マクロを使えば簡単と聞きました、マクロは全くわからないので、マクロを使わなくてもいいのですが、良い方法はありますか?  例えば エクセルの sheet A に 12桁の数字を50, sheet Bに12桁の数字を50, その中からsheetAにはあってsheetBには無いもの、sheetAには無くてsheetBには有るもの を色をつけてわかるようにしたいと思っています。 みなさんよろしくお願いいたします。

  • エクセルで自動的に範囲選択させるには?

    職場のエクセルの表を壊してしまいました。チカラを貸してください。 SHEETaに表があります。 常に表の最終行にデータを入力しています。  A10     B10    C10    D10   E10 3月3日   りんご   8個   みかん  5個 この一部を同じブックのSHEETbの表の最終行に =IF(SHEETa!A10="","",SHEETa!A10)といったふうに返しています。  A15     B15    C15 3月3日   みかん   5個 ちなみにSHEETaとSHEETbのデータの並び順は違います。 行の番号も違います。 作業としては、SHEETaを入力したあと、SHEETbの最終行を1行だけ 印刷します。 SHEETaを入力すると自動的にSHEETbの最終行が選択されるようにするにはどうしたらいいのでしょうか?    

  • エクセルマクロでシートの比較

    sheetAとsheetBそれぞれのA列に千件くらいのデータが入っています。 かなり重複もあります。 今回マクロでSheetCのA列に重複されないデータのみ抜き出したいと思います。 どのような記述になるのでしょうか?

  • エクセルのマクロで転記

    シート1とシート2があり、 シート1の20Aから39Lまでのセルの中に情報を書き込んでいます。 シート1の20Lから39LのL行で、数値が入っているセルがあれば、その行のA、B、I、L列と、J2、A7を取り出し、シート2の2行目から下に転記していくのですが、 シート2のA列にはシート1のJ2を、B列にはシート1のA7を、C列以降は、シート1のA、B、I、Lを入れるようにします。 また同じ条件がシート1で発生すれば、シート2の3行目以降に転記していく感じです。 どのようにすればいいでしょうか。

  • エクセルのデータ移動(マクロ使用)

    エクセルのSheetAを使用して入力画面を作成し、そのデータをSheetBやSheetCへリンクさせて印刷を行っています。1件ごとの入力になるので、データが残りません。このSheetAのデータを別のSheetDか別のファイルへ行ごとの横一直線という形式で残したいのですが、どうすればよろしいでしょうか? また、反対に移動したデータを戻す場合などどうしたらいいのでしょうか? マクロを利用すればいいように思うのですが、マクロは印刷程度の簡単なマクロの知識しかありません。 もしも、何か方法があるようでしたら、いろんな応用が利きそうなので、今後に向かって幅が広がりそうなので、是非詳しい方お願いします。 <例> 1つめのデータをSheetAへ入力 SheetA セルA1 h16.12.1                  B2 ○○商事                           C3 △△-□□          ↓(データー移行) SheetD セルA1 h16.12.1 B1 ○○商事 C1 △△-□□  (この間にSheetAのデータはすべて削除) 2つめのデータをSheetAへ入力 SheetA セルA1 h16.12.3                 B2 ●●販売                            C3 ▲▲-■■          ↓(データー移行) SheetD セルA1 h16.12.1 B1 ○○商事 C1 △△-□□       A2 h16.12.3 B2 ●●販売 C2 ▲▲-■■

  • エクセルのマクロについて

    マクロのコードについて教えていただきたいと思います。 sheet1のA2に[=today()]の数式があって、その下の表がであります。表にもオートサムなどの関数 B2~H 70まであります。 sheet2の 1行目が日付欄で、この日付とsheet1のA2が一致した時にB2~H 70の表の数値だけを転記することは可能でしょうか。 わかりにくくて申し訳ありませんがコードがわかれば助かります。

  • エクセルで選択した項目をマークする方法

    SheetBで選んだ項目を、SheetAの該当する項目の隣の列の四角を □から■になるように、数式を組みたいのです。 ・SheetA       A列  B列 1行目  □   りんご 2行目  □   みかん 3行目  □   ぶどう という表を作成しております。 SheetB       A列                                    B列 1行目  選択する果物を、B列のリストボックスより選んでください   {りんご,ぶどう、みかん} シートB列の (1,B)は、リストボックスで簡単に出来るのですが、 シートAの、(3、A)の、ぶどうを□から■にする方法がわからないのです。 当然、ぶどうの次に、りんごが選ばれれば、ぶどうは□、りんごを■にしたいのです。 解決方法をご存知の方がいらっしゃいましたら ご教授のほう宜しくお願いします。

  • エクセルで転記と集計の方法

    教えてください。 エクセルでA,B列の表があります それをC,D列にコードと合計金額を自動に転記、計算をしたいのですが、どうしてもわからないので教えてください。  A    B      C     D コード   金額    コード  合計金額  100  1000   100  6000 101  2000   101  6000 102  3000 → 102  3000 101  4000 100  5000    

  • sheet1セルA1のデータ切り替えについて

    Excel2010に3つのシートsheetA、sheetB、sheetC があります。 それぞれセルA1のデータは,sheetAのA1=ブランク、sheetBのA1=b、sheetCのA1=c とします。 この状態で、 sheetBがActiveの時に、sheetAのA1=b sheetCがActiveの時に、sheetAのA1=c になるような関数、もしくはマクロを組み込みたいと思います。 どのようにしたら実現できますでしょうか? よろしくお願いします。

専門家に質問してみよう