マクロで2つのブックの条件一致を転記

このQ&Aのポイント
  • 2つのエクセルブックにはIDデータ表とID管理票があります。
  • IDデータ表のIDとID管理票のIDを一致させ、払い出し区分に基づいて日付を転記します。
  • FINDメソッドやオフセットを使用して繰り返し処理を行います。
回答を見る
  • ベストアンサー

マクロ 2つのブック 条件一致 転記

2つのエクセルブックがあります。 1つがIDデータ表になって、IDと払い出し内容と日付の3つがあります。 もう1つがID管理票で、IDを担当ごとに管理している票です。 IDデータ表のIDとID管理票のIDを一致したら IDデータ表の払い出し区分の単語を基準に(新規・変更・廃止) ID管理票.xlsに乗っているIDの横に 払い出し区分の単語の条件で 新規の場合,ID右隣に日付を転記 変更の場合,IDの2つ右隣に日付を転記 廃止の場合,IDの3つ右隣に日付を転記を行いたいのですが FINDメソッドを使い、行のB列の区分で判定して、日付を書き入れるのと Offセットでセルの位置を指定するのと「IDデータ表」.xlsの特定の範囲のデータを繰り返す というアドバイスをもらいましたが 繰り返し処理(ForやLoop)をよく理解していないからだと思います。 どなたかご教示くださいますでしょうか。 下記に簡素でありますが構成状態と 処理の概要と画像添付させて頂きます IDデータ表.xls    A列         B列       C列 1  ID番号     払い出し区分   日付 2  110001241      新規      10/2 3  120000065      変更      10/3 4  190000036      廃止      10/4     ↓ 以下100行くらい続いています ID管理票.xls ID番号の場所がバラバラで AO列にあったりBC列にあったりしています。 また、ID管理票にすでに日付が入っていることもありますが それはそのまま上書きで問題ありません。 110001241, 10/2       (新規区分なのでIDの右隣に日付を転記) 120000065, 空白 10/3     (変更区分なのでIDの右2つ目に日付を転記) 190000036, 空白,空白,10/4   (廃止区分なのでIDの右3つ目に日付を転記) お手数ですがよろしくお願いいたします

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

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

順繰り拾って、探して確認して記入する、だけです。 sub macro1()  dim w0 as worksheet, w1 as worksheet  dim h as range, Target as range  set w0 = workbooks("IDデータ表.xls").worksheets("シート名")  set w1 = workbooks("ID管理表.xls").worksheets("シート名") ’データ表のA列を巡回する  for each h in w0.range("A2:A" & w0.range("A65536").end(xlup).row)  ’管理表から探す   set target = w1.cells.find(what:=h.value, lookin:=xlvalues, lookat:=xlwhole)  ’見つけたら処理を行う   if not target is nothing then    select case h.offset(0, 1).value    case "新規"     target.offset(0, 1) = h.offset(0, 2).value    case "変更"     target.offset(0, 2) = h.offset(0, 2).value    case "廃止"     target.offset(0, 3) = h.offset(0, 2).value    case else     'do nothing    end select   end if  next end sub #「新規」や「変更」などが間違いなく記入されてる前提のご相談になってますが、そうでない場合とかも考えます。

samohankinpo
質問者

お礼

keithin様 拙い説明の中コードを記述して頂きありがとうございます!! 分岐の所をifで条件を分けないと駄目だという固定観念に囚われて CASEを使う事,全体で検索する方法等、コードを読み解き参考にさせて頂きます!! ベストアンサーに選ばさせて頂きます #「新規」や「変更」などが間違いなく記入されてる前提のご相談になってますが、 そうでない場合とかも考えます。 新規,変更,廃止はシステムからcsv出力するので決まっています・・・が 文言が違った場合 適宜対応させて頂きます。 お忙しい中 ありがとうございました!!!

関連するQ&A

  • 2つブック 条件転記と分岐の方法

    以前に2つのブックを条件で転記させるマクロのアドバイスを頂き 活用させていただいておりましたが 票の形式が変わってしまって、新規,変更,廃止という文言がなくなって日付だけで 判別する形式になってしまって現在、修正しております。 大変恐縮ですが、CASEで分岐させるときの書き方を色々と調べておりますが 分岐させる条件の書き方を色々とやってみましたが上手く動きませんでした・・・ ご教授願えないでしょうか? 下記に構成と概要と 以前にアドバイスを頂いたコードを記述させて頂きます。 IDデータ表.xls    A列         B列    1  ID番号      日付 2  110001241    10/4 3  120000065    10/5 4  190000036    10/6 5 190000088    取消 ID管理票.xls 110001241 ,9/1 120000065 9/9 190000036 9/9 190000088 11/11 IDの場所はバラバラですが日付は必ずIDの横3つのどれかに記述されています。 以前にアドバイスを頂いたマクロは 新規,廃止,変更で offsetでIDの横3つの場所を指定して日付を記述する形式でしたが 新規,廃止,変更の文言がデータから、なくなってしまったので IDデータ表.xlsとID管理票.xlsのIDが一致して 尚且つそのIDの横3つのセルに日付が入ってるものを上書き 空白のセルは無視する IDデータ表のB列に取消と入っていたら ID管理票と合致したIDとその横3つの日付をクリアする。 Sub 転記() Dim w0 As Worksheet, w1 As Worksheet Dim h As Range, Target As Range Set w0 = Workbooks("IDデータ表.xls").Worksheets("大元") Set w1 = Workbooks("ID管理票.xls").Worksheets("管理") For Each h In w0.Range("A2:A" & w0.Range("A65536").End(xlUp).Row) Set Target = w1.Cells.Find(what:=h.Value, LookIn:=xlValues, lookat:=xlWhole) If Not Target Is Nothing Then Select Case h.Offset(0, 1).Value Case "新規" Target.Offset(0, 1) = h.Offset(0, 2).Value Case "変更" Target.Offset(0, 2) = h.Offset(0, 2).Value Case "廃止" Target.Offset(0, 3) = h.Offset(0, 2).Value Case Else 'do nothing End Select End If Next End Sub CASEで分岐させれば可能だと助言を頂きましたが如何せん 上手く記述できないのでご教授願えないでしょうか? 申し訳ありませんがよろしくお願いいたします

  • 【再依頼】 2つブック 条件転記と分岐の方法

    いつもこの質問サイトには大変おせわになっております。 2つブック 条件転記と分岐の方法というタイトルで質問させて頂いて コードのアドバイスを頂いたのですが 本来は元の質問に追記したかったのですが ベストアンサーを選んだので回答が締め切ってしまったので 一部、やりたいことと相違があったので再度質問させて頂きます 2つのブックがあって IDデータ表.xlsは IDと日付が記述されています。 ID管理票のIDの場所はバラバラですが 日付は必ずIDの横3つのどれかに記述されています。 IDデータ表.xlsとID管理票.xlsのIDが一致して 尚且つID管理票.xlsのIDの横3つのセルに日付が入ってるものを上書き 空白のセルは無視する IDデータ表のB列に取消と入っていたら ID管理票と合致したIDとその横3つの日付をクリアする。 このマクロで IDデータ表とID管理票のIDが一致したら IDデータ表の日付をID管理票に転記するという内容で With c.Offset(, 1)の命令でIDのすぐ横に記述しています。 この命令をID管理票の元々記述あった日付のセルに上書きしたいのですが どう変えれば動くでしょうか? アドバイスの方 よろしくお願いいたします Sub TEST() Dim w0 As Worksheet, w1 As Worksheet Dim i As Long, c As Range Set w0 = Workbooks("IDデータ表.xls").Worksheets("大元") Set w1 = Workbooks("ID管理票.xls").Worksheets("管理") For i = 2 To w0.Cells(Rows.Count, "A").End(xlUp).Row Set c = w1.Cells.Find(what:=w0.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then If w0.Cells(i, "B") <> "取消" Then With c.Offset(, 1) .Value = w0.Cells(i, "B") .NumberFormatLocal = "m/d" End With Else c.Resize(, 4).ClearContents End If End If Next i End Sub

  • 条件が一致時の転記マクロの実行時エラーの対処

    いつもお世話になっております。 このサイトで転記するマクロを相談させて頂いたところ コードを教えてもらい そのコードを使用していたのですが 大元のエクセルのブックのセルの配置が変わる運用になり それに伴いマクロを修正を行っていたのですが 実行時エラー"1004" アプリケーション定義またはオブジェクト定義のエラーでマクロが動きません コードのデバック部分はわかっていますが 色々と修正を試しましたが上手くいきません。 構成図とコードを書かせて頂きます 確認して頂いてもよろしいでしょうか? 転記先のID管理票.xls このエクセルは別のマクロを組んでいて メールと連動していてメール受信後、自動で A列 B列 C列に次から次へとデータがのってきます このエクセルは原本のためマクロを更に追加したり 行を消したりふやしたりはできないです。 (マクロでF列を作業列として使用は可能です) D列以降は空白です。 E列にIDデータ.xlsに記述した項目ごとのシートを確認して 文言を手作業で入力 文言は 「確認」 「払出」 「保留」 「取下」 「転記」 「再確認」 A列の横は20000から始まっていますが過去のデータ3か月分乗っているので データ量が行6から行20000以降続いています 当初は行1から始まっていたのですが仕様変更に伴い 行5から始まっています 列番号   A列        B列     C列  D列  E列 1   2 3 4 5 日時       件名      処理      区分 6  2014/11/19 18:13:11 19001236   新規       確認 7 2014/11/19 18:33:08 19001237   修正       払出 8 2014/11/19 18:33:09 19001238   修正       転記 9 2014/11/19 18:33:08 19001237   修正       保留 10 2014/11/19 18:33:08 19001237   修正       取下 11 2014/11/19 18:33:08 19001237   準備       12 2014/11/19 18:33:08 19001237   準備       12 2014/11/19 18:33:08 19001237   修正       確認 ↓ ずっと2万行まで続いています ・A列にIDを受領した時間が記述  時間帯はバラバラです。 ・B列にID番号が記載  同じ番号続いたりします。 ・C列はIDの区分の新規.修正,準備が入ります ・D列は空白 ・E列に確認項目を入力します 現状   最初の時は空白で、IDデータ.xlsのシートに時間とIDと区分を記述して  IDデータ.xlsのシートを確認して手作業で入力  文言は 「確認」 「払出」 「保留」 「取下」 「転記」 「再確認」 尚、C列に「準備」と項目があればE列も空白です 転記元のIDデータ.xls シートが転記先のID管理票.xlsの入力する文言 ID管理票.xlsのD列の文言ごとにシートが分かれています 「確認」 「払出」 「保留」 「取下」 「転記」 「再確認」の5つのシートで分かれている     確認のシート 列番号    A列            B列    C列   E列   1  2014/11/19 18:13:11     19001236   新規  締切案件       払出のシート 列番号    A列          B列       C列  D列 1     2014/11/19 18:33:08   19001237  修正  確認案件     2     2014/11/19 18:33:06   19001237   修正  延期案件    保留のシート            列番号    A列          B列    C列    D列  1    2014/11/19 17:23:11  19001239   修正   見直し 取下のシート 列番号    A列        B列     C列    D列 1    2014/11/19 17:23:11 19001239   修正    再度提出                 転記のシート 列番号    A列        B列      C列   D列 1     2014/11/19 17:23:11 19001240   修正      再確認のシート 列番号    A列        B列     C列   D列 1   2014/11/19 17:23:11 19001241   修正 やりたいことは IDデータ.xlsの方にマクロを組み込んで ID管理票のD列に 時間とIDが一致したものを 文言(「確認」 「払出」 「保留」 「取下」 「転記」 「再確認」 の5つの項目)を転記 この条件でコードを書いていただいたのですが エクセルの内容が変わったために上手く動いていません 実行時エラー"1004" アプリケーション定義またはオブジェクト定義のエラー lastRow6 = wS2.Cells(Rows.Count, "A").End(xlUp).Row ここでデバックでています。 下記が書いていただいたコードを環境に合わせて書き換えた状態です。 確認して頂いてもよろしいでしょうか? お忙しい中、お手数ですがよろしくお願いいたします Sub ○○() Dim i As Long, k As Long, lastRow1 As Long, lastRow2 As Long Dim wS1 As Worksheet, wS2 As Worksheet Application.ScreenUpdating = False Set wS2 = Workbooks("ID管理票.xls").Worksheets(1) lastRow6 = wS2.Cells(Rows.Count, "A").End(xlUp).Row Range(wS2.Cells(2, "F"), wS2.Cells(lastRow2, "F")).Formula = "=A6&""_""&B6" With ThisWorkbook For k = 3 To .Worksheets.Count Set wS1 = .Worksheets(k) lastRow1 = wS1.Cells(Rows.Count, "A").End(xlUp).Row If lastRow1 > 1 Then Range(wS1.Cells(2, "E"), wS1.Cells(lastRow1, "E")).Formula = "=A6&""_""&B6" For i = 6 To lastRow6 wS2.Rows(1).AutoFilter field:=6, Criteria1:=wS1.Cells(i, "E") If wS2.Cells(Rows.Count, "A").End(xlUp).Row > 1 Then Range(wS2.Cells(2, "E"), wS2.Cells(lastRow2, "E")). _ SpecialCells(xlCellTypeVisible) = wS1.Name End If Next i wS1.Range("E:E").ClearContents End If Next k End With wS2.AutoFilterMode = False wS2.Range("F:F").ClearContents Application.ScreenUpdating = True End Sub

  • 2つのものが一致時に転記するマクロ

    いつもお世話になります。 ここのサイトで 2つのブックでIDが一致したら 横にある文字を転記するというマクロがあるのですが 同じIDが続いても転記先のエクセルに全て転記したいと質問させて頂き そのマクロを使わせて頂いたのですが IDと時間を一致したものを転記させなければいけなくなりました A列の時間とB列のIDを一致したときに 大元に転記させるのは、変数で2つの項目を設定して 確認させればいいのかと思っていましたが上手くいきません 更に、データ量が多いので マクロを動かすたびに応答なしになるので コードをfindから別なコードを変えたほうがよろしいのでしょうか? 下記にマクロのコードと構成と画像を記述させて頂きます お手数ですがご教授して頂けないでしょうか? 恐縮ですがよろしくお願いいたします。 Sub 転記改造()   Dim w0 As Worksheet, w1 As Worksheet   Dim h As Range, Target As Range Dim i As Range, Target1 As Range   Dim FirstAddress As String   Set w0 = Workbooks("IDデータ.xls").Worksheets(1)   Set w1 = Workbooks("ID管理票.xls").Worksheets(1)   For Each h In w0.Range("A2:A" & w0.Range("A65536").End(xlUp).Row) For Each i In w0.Range("B2:B" & w0.Range("A65536").End(xlUp).Row)     If h.Offset(, 1).Value = "確認" Then       Set Target = w1.Range("D11:D60000").Find(what:=h.Value, LookIn:=xlValues, lookat:=xlWhole)       If Not Target Is Nothing Then         FirstAddress = Target.Address         Do           If Target.Offset(, -1).Value = "" Then             Target.Offset(, -1) = "確認"             Exit Do           Else             Set Target = w1.Range("D11:D60000").FindNext(Target)           End If         Loop While FirstAddress <> Target.Address       End If     End If   Next   next End Sub

  • 複数の条件に一致するセルを転記したい

    二つの条件に一致するセルの値を別のシートに転記したいです。 具体的には 表1 日付 名前 場所 1/1  A   横浜 1/1  B   渋谷 1/2  A   新宿 のデータを 表2    A  B 1/1 ☆ ★ 1/2 ★ ★ 表1にデータをもとに 表2の☆部分に横浜と返されるようにしたいです。 また★のところにも返されるようにするにはどうしたらよいでしょうか?

  • マクロの自動転記について教えてください

    マクロの自動転記について教えてください 別シートで集計したデータをマクロを使って図の左端G列に表記させました このG列のデータにある日付(G3)は関数でその日のものですがこのG列のデータを図にある日付と同じ場所に毎日転記させたいのですがどなたか教えていただけませんか EXCELについてはある程度解っているつもりですがマクロは全くのド素人で勉強中ですが宜しくお願い致します

  • EXCEL:形式が違う別bookへの転記

    マクロほぼ初心者のため、形式が違う別Bookへの転記について悩んでいます。 どなたかご教示いただけないでしょうか。よろしくお願いいたします。 (詳細) (1)売上実績表.xls の「比較」シート     A      C     D      E     F      G      H 1 商品No.                4月              5月 2      .  2009   2010    2011   2009   2010     2011 3  100     0    1000      800      0    1200   4  101     0      0      0     0      0 5  102     800   2050    4000   500    3000 6  103 (2)売上計画表.xls の「2011」シート     C     D      E       F     G  ・・・ 1  商品No.   4月     5月    6月 2   100      800    1000   1000 3   102     4000    5000    5000 4   107     1200    500     500               (1)の2011の列に毎月実績を入力していきます。 それを(2)に転記(上書き)させたいのですが、 (1)と(2)の形式が違うためうまくできません。 今考えているのは inputboxで月を指定して、 たとえば「4月」と入力すれば (2)のC列の商品No.と(1)のA列の商品No.をみて、 (1)E列の値を(2)D列に転記させ 「5月」と入力すれば (1)H列の値を (2)E列に転記させたいのですが・・・ 恥ずかしながら、下記のように列を指定して転記させる レベルでストップして、困っています・・・ Sub 転記() Dim LastRow As Long With Workbooks("売上実績表.xls").Sheets("比較") LastRow = .Range("D65536").End(xlUp).Row Workbooks("売上計画表.xls").Sheets("2011").Range("D2:D" & LastRow).Value = .Range("E3:E" & LastRow).Value End With End Sub どうかよろしくお願いいたします。

  • 2つのブックの列と列を比較し、一致すれば、片方のブックのA列にある番号を転記したい

    いつもお世話になっております。 また、Excelで悩んでしまいまして(>_<) 今、『観光地.xls』というブックのA列には、以下のようなデータが記載されています。 夏井川渓谷 オルチャ渓谷 御岳渓谷 ハラワ渓谷 福知渓谷 イアオ渓谷 チャリン渓谷 ワイメア渓谷 羽山渓谷 ヴァッハウ渓谷 そしてもう一つの、『日本の渓谷.xls』というブックのB列には、 夏井川渓谷 ウェルサンピア京都 御岳渓谷 昭和記念公園レインボープール 福知渓谷 大磯ロングビーチ 羽山渓谷 と、日本の渓谷のデータと日本のプールのデータが混ざって並んでおりまして、隣のA列には、渓谷のデータにのみ、k1,k2・・・と、番号を振っております。プールのデータの隣は、空白になっています。 この状態から、『観光地.xls』のA列と、『日本の渓谷.xls』のB列を比較し、データが一致すれば、『日本の渓谷.xls』の渓谷データのすぐ隣、A列に記載してある番号を、『観光地.xls』のL列に、転記したいのです。 『観光地.xls』のB~K列には、他の観光地のデータがずらりと記載されているので、空白のL列に、『観光地.xls』のA列の日本の渓谷データ(=『日本の渓谷.xls』のB列の渓谷データ)に、対応する番号を付したいのです。 データが膨大ですので、マクロを使うのが最も合理的だと思うのですが、以前、似たような質問↓ http://okwave.jp/qa5015030.html を解決してくださいまして、この時の応用で何とかなる、「一致したら斜線を引くのではなく、同シートのL列に、『日本の渓谷.xls』のA列のデータを転記するよう、指示すればいいのかな」と思い、マクロを書いてみました。 Sub keikoku() ◆変数名の入力ミスによる動作の不具合を防ぐために変数名を宣言。 Dim KeikokuSearch1 As Range, KeikokuSearch2 As Range, k As Range, kk As Range ◆Activateメソッドを実行。 With Workbooks("観光地.xls") .Activate .Sheets("Sheet1").Activate End With ◆Rangeオブジェクトで範囲を選択 With Workbooks("観光地.xls").Sheets("Sheet1") Set KeikokuSearch1 = .Range(.Range("A1"), .Range("A1").End(xlDown)) End With With Workbooks("日本の渓谷.xls").Sheets("Sheet1") Set KeikokuSearch2 = .Range(.Range("B1"), .Range("B1").End(xlDown)) End With ◆For Each...In...Nextステートメントで、データの一致を調べる。 For Each k In KeikokuSearch1 For Each kk In KeikokuSearch2 If k.Value = kk.Value Then ・・・ と、この辺りで立ち往生してしまいました(;_;) If Then~Else~End Ifステートメントで、KeikokuSearch1とKeikokuSearch2のデータが一致すれば、条件を満たす場合の処理として、KeikokuSearch2(『日本の渓谷.xls』のB列)の隣にあるA列のデータを、KeikokuSearch1(『観光地.xls』のA列)から11マス隣のL列にコピーする、という風に指示したいのですが・・・ココから先のコードが、おぼつかない状況です(>_<) やはりマクロは難しいです。皆様のお力をお借りいただければ幸いです。 よろしくお願いします<m(__)m>

  • 複数のブックからデータを転記するマクロについて

    こんにちは。 VBAの素人なのでネットや本などで自分なりに調べましたが、 どうにも解決できないので、ご教示いただけませんでしょうか。 複数のブックにある同一セル番地にある データを別のブックにまとめたいのですが、 ブック数が500程度あり、マクロでうまくできないか悩んでいます。  (1)転記元ブックを開く。  (2)転記元データをコピーする。  (3)転記先ファイルのセルに貼り付ける。  (4)転記元ブックを閉じる。 の繰り返しだと思うのですが、(2)ができず困っています。 ちなみに、500のブックとまとめるブックも同じフォルダにあります。 具体的には、転記元ブックは以下のような形で、A列に様々な温度のデータが縦に並んでいます。    A列   1行  温度  2行  27 ←ここのみ抽出したい 3行  28 4行  30 それぞれのブックのA2番地の温度データのみを抽出し、転記先ブックのA2からA500までまとめたい。 組んだマクロは以下です。 ------------------------------ Sub 特定フォルダ内ブックを並べ替えて転記() Dim myDir As String, myName As String, myBook As Workbook Dim motodata As Range, sakidata As Range   '集計用のブックがあるフォルダ名を指定 myDir = "D:\VBA練習" myName = Dir(myDir & "\" & "*.xls")   Do While myName <> ""   '↓転記先の最新レコード位置を取得する   Set sakidata = Range("A65536").End(xlUp).Offset(1)   '↓(1)指定した名前のブックを開いて変数に格納する  Set myBook = Workbooks.Open(Filename:=myDir & "\" & myName)   '↓(2)転記元を取得する   Set motodata = myBook.Range("A2")      '↓(3)転記先に貼り付ける   motodata.Copy sakidata   '↓(4)開いたブックを閉じる   myBook.Close  myName = Dir()  Loop End Sub ------------------------------ mybookというキーワードを使用して、A2セルデータをコピーする構文をご教示いただけませんでしょうか。 以上、長々となってしまいましたが、何卒アドバイスの程お願いいたします。

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

    エクセル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になかったらそこは何も転記しません。 わかりづらい説明かと思いますが、マクロの記述をお教えいただければ幸いです。

専門家に質問してみよう