質問: 複数条件が一致で別シートに転記【エクセルvba】 エクセルでセルの条件が複数一致したら別シートに転記される方法をお教えください。 シートを2枚用意して、配達日ごとに一覧化したいのです。 事前に用意したシート(配達表)の“配達”と“配達時間”が一致したら その方の名前と注文個数を右側に反映したいのですが・・・ 注文データが多すぎて困っています。 宜しくお願いします。 ■シート名:注文データ a b c d e ------------------------------------------------ 1 しめい 対応 配達日 時間 個数 ------------------------------------------------ 2 たけだ 配達 6/20(月) 13:00 2個 3 みうら 配達 6/18(土) 14:00 4個 4 らもす 郵送 6/20(月) ― 5個 5 いはら 配達 6/20(月) 14:30 8個 6 かつや 配達 6/20(月) 15:00 6個 7 みうら 郵送 6/20(月) ― 4個 ■シート名:配達表 a b c ------------------------------------ 1 配達 6/20(月) ------------------------------------ 2 12:00 3 12:30 4 13:00 5 13:30 6 14:30 7 15:00 8 15:30 9 16:00 マクロを実行すると・・・ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ■シート名:配達表 a b c ------------------------------------ 1 配達 6/20(月) ------------------------------------ 2 12:00 3 12:30 4 13:00 たけだ 2個 5 13:30 6 14:00 みうら 4個 6 14:30 いはら 8個 7 15:00 かつや 6個 8 15:30 9 16:00
回答: こういうのは「複数条件による抜き出し問題」だ。 関数で出来ればおなじみのやり方で良いのだが、既に出ているように式が長く複雑で、初心者には何をやって居るかわからない式になる。毎度週に数回このタイプの質問が出て、同じようなタイプの答えになる。googleででも「imogasi方式」で照会すれば、過去の沢山の例と回答(そのタイプも)が出てくる。 ーー まず初心者や急ぐ場合はデーターフィルターフィルタオプションの設定で済ませられないか勉強すべきだ。 ーー 本来、こういう仕事の関連のエクセル表は、vbaを勉強してそれを使うべきと思う(既に回答も出ているようだ) 関数で抜き出し問題や表の組み換えは、vbaで無いと、天下りの長い式をコピペで使うだけになる。 ーー 私が紹介している「imogasi方式」では、sheet2に時刻の所定の行に出す問題なので複雑になりすぎる。 ーー vbaでやってみる。 例データ しめい対応配達日時間個数 たけだ配達6月20日13:002個 みうら配達6月18日14:004個 らもす郵送6月20日ーー5個 いはら配達6月20日14:308個 かつや配達6月20日15:006個 みうら郵送6月20日ーー4個 (注意) 「ーー」セルは空白とする 「月日」列は、エクセルの年月日を入れておくこと(日付シリアル値(わかりますか)) 文字列では不可 6/20(月) の様な表示は、表示形式の設定でやること(エクセルの常識) m/d(aaa) 時間の列も時刻シリアル値で入れてあるとする。文字列では不可 ーー コード 標準モジュールに sub test01() dim sh1, sh2 set sh1 = worksheets("sheet1") set sh2 = worksheets("sheet2") d = sh1.range("a65536").end(xlup).row on error resume next for i = 2 to d '--条件をかけて選別 if sh1.cells(i, "b") = "配達" and sh1.cells(i, "c") = sh2.range("b1") and _ sh1.cells(i, "d") <> "" then t = sh1.cells(i, "d") '---sheet2で時刻行を探す for r = 2 to 30 if sh1.cells(i, "d") = sh2.cells(r, "a") then exit for next r '--該当行の値をsheet2の時刻該当行セット sheet2.cells(r, "b") = sh1.cells(i, "a") sheet2.cells(r, "c") = sh1.cells(i, "e") end if next i end sub ーー 実行結果 sheet2 配達6月20日 12:00 12:30 13:00たけだ2個 13:30 14:00 14:30いはら8個 15:00かつや6個 15:30 16:00 ・・・・・・