VBAで複数条件検索方法 | Excel2010

このQ&Aのポイント
  • エクセル2010・VBAを使用して、複数条件でデータを検索する方法を教えてください。
  • 【Sheet1】と【Sheet2】のデータを比較し、条件に合う行の納品日を入力し、ロットNoに色を付ける方法を知りたいです。
  • Find関数を使用して試行錯誤しましたが、うまく動作しないため、支援を求めています。
回答を見る
  • ベストアンサー

VBAで複数条件検索どうすればよいですか?

【Sheet1】 発注日   品番    ロットNo      納品日   A     B      C          D 1 3/11  553  111-111-1111   3/17 2 3/11  123  222-222-2222 3 3/11  223  333-333-3333 4 3/12  123  444-444-4444   3/17 5 3/12  553  555-555-5555 【Sheet2】  納品日  品番   ロットNo    A    B     C 1  3/17  553  111-111-1111 2  3/17  123  444-444-4444 3  3/17  223  666-666-6666 エクセル2010・VBAで、【Sheet2】の品番とロットNoの条件に合う行を【Sheet1】より探し、【Sheet1】D列に納品日を入力し、その行のロットNoを明るい緑で塗りつぶす。 【Sheet2】の条件が【Sheet1】にないなら【Sheet2】の行のロットNoを、赤で塗りつぶす。 【Sheet1】は発注リスト、【Sheet2】は納品リストになります。 納品日は検索した日の日付になります。 Findを使い試行錯誤しましたが、思うように動かず、スキル不足で困っています。どなたか、ご教授願います。宜しくお願い致します。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 色々やり方はあると思いますが・・・ 一例です。 >納品日は検索した日の日付になります。 とありますが、とりあえずSheet2(納品リスト)のA列日付としています。 Sheet1(発注リスト)に重複があっても対応できるようにしてみました。 ↓のコードを標準モジュールにコピー&ペーストしてマクロを実行してみてください。 Sub Sample1() Dim i As Long, k As Long, c As Range, wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("発注リスト") Set wS2 = Worksheets("納品リスト") Application.ScreenUpdating = False i = wS1.Cells(Rows.Count, "A").End(xlUp).Row Range(wS1.Cells(2, "D"), wS1.Cells(i, "D")).ClearContents k = wS2.Cells(Rows.Count, "A").End(xlUp).Row With wS1 .Cells.Interior.ColorIndex = xlNone .Range("A:A").Insert With .Range(wS1.Cells(2, "A"), wS1.Cells(i, "A")) .Formula = "=C2 & ""_"" & D2" .Value = .Value End With End With With wS2 .Cells.Interior.ColorIndex = xlNone .Range("A:A").Insert With .Range(wS2.Cells(2, "A"), wS2.Cells(k, "A")) .Formula = "=C2 & ""_"" & D2" .Value = .Value End With End With For k = 2 To wS2.Cells(Rows.Count, 1).End(xlUp).Row Set c = wS1.Range("A:A").Find(what:=wS2.Cells(k, "A"), LookIn:=xlValues, lookat:=xlWhole) If c Is Nothing Then wS2.Cells(k, "D").Interior.ColorIndex = 3 Else For i = 2 To wS1.Cells(Rows.Count, "A").End(xlUp).Row If wS1.Cells(i, "A") = wS2.Cells(k, "A") Then With wS1.Cells(i, "E") .Value = wS2.Cells(k, "B") .NumberFormatLocal = "m/d" End With wS1.Cells(i, "D").Interior.ColorIndex = 4 End If Next i End If Next k wS1.Range("A:A").Delete wS2.Range("A:A").Delete Application.ScreenUpdating = True End Sub ※ 両SheetともA列を作業用の列として挿入していますので、 コードでは元データは1列ずつずれています。m(_ _)m

ecolife007v
質問者

お礼

お礼遅くなりました。ありがとうございます。 >両SheetともA列を作業用の列として挿入していますので・・・ この部分の動きが、手こずりましたが、大体の動きが理解できました。勉強になりました。 ありがとうございました。

関連するQ&A

  • VBAの複数条件の検索について

    お世話になります。 VBAでEvaluate("SUMPRODUCT((棚卸!$A$1:$A$300=LEFT(C" & i & ",2))*(ISNUMBER(FIND(LEFT(D$1,3),棚卸!$B$1:$B$300)))*(ISNUMBER(FIND(D$2,棚卸!$C$1:$C$300))),棚卸!$F$1:$F$300)")という構文があります。 現在困っていることは、ISNUMBER(FIND(LEFT(D$1,3)のD$1をE$1、F$1、G$1としたいのですが、どのようにすればよいか分りません。 初歩的な質問で申し訳ありませんが、ご教示のほど宜しくお願いいたします。

  • エクセルで条件付で行ごと別シートに引用?

    我流でエクセルを使っていますが、こんなことできたら良いなと思い投稿しました。 (Sheet1)A   B   C     D    1 品名 金額  受注日  納品日    2 白菜 2000 3月12日 3月14日    3 大根 2000  3月12日 3月16日    4 人参 2000  3月16日 3月18日 Sheet1を元に、下のように Sheet2には、納品日が2/16~3/15の行の発注が並んだ表を Sheet3には、納品日が3/16~4/15の行の発注が並んだ表を作りたい (Sheet2)A   B   C     D    1 品名 金額  受注日  納品日    2 白菜 2000 3月12日 3月14日 (Sheet1)A   B   C     D    1 品名 金額  受注日  納品日    2 大根 2000  3月12日 3月16日    3 人参 2000  3月16日 3月18日 こんなこと関数でできませんか?

  • Excelデータを条件毎に分類したい

    Sheet1に検索用のデータ表があります。Sheet2に条件が入っています。シート2の条件と合うシート1のデータにフラグをたてたいのですが、検索用のデータ量、条件件数共にかなりあります。(その為、シートをわけました)。マクロを色々作ってみたのですが、どうしても上手く出来ません。シート1の各データがどの条件のものか判ればいいのですが。イメージでは下記の様になればいいのですが(簡略化していますが)。 シート1  A  B  C  課 品番 単価 1 E  123  450 2 A  223  350 2 E  123  450 シート2  A  B  C D  課 品番 単価 フラグNo 1  E  123  450 1 1  A  223  350 2    ↓ 結果(マクロ処理後) シート1  A  B  C D  課 品番 単価 フラグNo 1 E  123  450 1 2 A  223  350 2 1 E  123  450 1

  • エクセルVBAで複数の条件を満たす検索方法

    エクセルのVBAを使ってデータ検索を行うプログラムを作っています "Sheet2"は下記のように、A列に生年月日、B列に住所、C列に電話番号、D列にメールアドレスが入力されています        【Sheet2】   生年月日  住所    電話番号  メールアドレス     A      B       C        D 1 1999/9/10 東京都○○ 11-111-1111 aa@goo.co.jp 2 2003/2/26 大阪府○○ 22-222-2222 bb@goo.co.jp 3 1985/6/22 福岡県○○ 33-333-3333 cc@goo.co.jp 4 1995/4/11 愛知県○○ 44-444-4444 dd@goo.co.jp "Sheet1"のA1に生年月日、A2に住所、A3に電話番号を入力し、"Sheet2"のデータと照合して、3つの値が合致した行のD列のメールアドレスを"Sheet1"のB1に返したいと思います 上記の表だと、"Sheet1"のA1に1985/6/22、A2に福岡県○○、A3に33-333-3333と入力されている場合、B1にcc@goo.co.jpの値を返すようにしたいのです。 findを使って生年月日、住所、電話番号を検索し、行番号を取得して、3つの行番号が同じならその行番号のD列の値を返すというような方法で考えていたのですが、エラーが回避できずに困っています。 生年月日が同じ人がいたり、夫婦や親子などは住所と電話番号が同じといった場合があり、上手く検索できません。  エラー回避の方法、もしくは他のやり方でも構いませんので どなたかご教授願えないでしょうか? よろしくお願いします。

  • VBA 条件検索について

    VBAの検索について質問です。 以下のようなものを作ろうと思います。 sheet1とsheet2がありsheet1のA、Bの数値をsheet2の同じA,Bの数値の値の行を検索して, その同じ値の行のsheet1のCの数値の値からsheet2のCの数値を引いた値をsheet3のC列に返すプログラムを作ろうと思います。空白などで同じ値がない場合はsheet3に空欄を返そうと思います。 以下に例をプログラムの実行例を示します。 sheet1 ■ A 列 B 列 C列 1: 7 | 1 | 3 2: 5 | 8 | 2 3: 2 | 3 | 1 4: 9 | 6 | 4 sheet2 ■ A 列 B列 C列 1: 2 | 3 | 4 2: 9 | 6 | 2 3: 7 | 1 | 5 4: 5|   | 3 sheet3 ■ A列 B列 C列 1: 7| 1 | -2 2: 3: 2| 3 | -3 4: 9 | 6 | 2 自分で以下のプログラムを作成してみたのですが空欄が検索できなかったりしてなかなかできません。 どなたか、教えてください。お願いします。 Sub test() Dim sh1 As Object, sh2 As Object, sh3 As Object Dim d1 As String, d2 As String, a As Long Set sh1 =Sheets(“Sheet1”) Set sh2 =Sheets(“Sheet2”) Set sh3 =Sheets(“Sheet3”) For a = 1 To 3000 Step 1 d1 = sh1.Cells(a,1) & sh1.Cells(a,2) d2 = sh2.Cells(a,1) & sh2.Cells(a,2) Do while d2 <>”” If d1 = d2 Then Sh3.Cells(a,1) = sh1.Cells(a,1) Sh3.Cells(a,2) = sh1.Cells(a,2) Sh3.Cells(a,3) = sh1.Cells(a,3) Exit Do End If a= a+1 d2 = sh2.Cells(a,1) & sh2.Cells(a,2) Loop Next End Sub

  • Excel2007 複数条件での検索

    Excel2007で複数条件のデータの抽出について教えて下さい。 現在、シートAにデータが入力され、シートBにデータの抽出を行いたいと思います。 シートAの内容は以下の通りです(アルファベットと数字はセルの場所です): 1行目: 項目欄 2行目以下: データ詳細 1行目 A1 「日付」 B1「名前」 C1「出社状況」 2行目以下 A2 12/01  B2 山田  C2 出社 A3 12/01  B3 佐藤  C3 早退 A4 12/01  B4 木村  C4 出社 A5 12/02  B5 木村  C5 早退 A6 12/02  B6 山田  C6 遅刻 A7 12/02  B7 佐藤  C7 遅刻 ・・・・・ A列の日付は昇順ですが、B列の人名はランダムに入力されています。 また、日付によっては途中入退社する人もいるので、12/01に名前がなくても、 12/10から名前が入力されている場合(あるいはその逆)もありえます。 シートBは以下の通りです: 1行目 名前 A列:日付 B1 木村 C1 山田 D1 佐藤 ・・・ A2 12/01 A3 12/02 このシートBの B2に シートAから 「木村の12/01の出社状況」(つまりC4)に値するデータを 自動的に抽出するような関数を入力したいのですが、どのようにすればよいのでしょうか? (このB2セルの式をB2:D3に入力していきたいので、絶対値を指定することになると思いますが・・・) IndexやらMatchやらLookupやらを色々試してみたのですが、どうも上手くいきません。 どなたかアドバイスをお願いいたします。

  • 検索VBAを教えてください。

    VBAの勉強中です。 超初心者です。 シート1のB3に入力した値を、シート2のデータベースのC列から検索して、その検索した値と同じ行のD列・E列・F列の値を、シート1のB4・ B5・B6に表示したいと思います。 <シート1>    A     B     C     D 1 2     3       あああ ←ここを入力すると 4       aaa   ←表示したい! 5       bbb   ←表示したい! 6       ccc   ←表示したい! <シート2>    A    B    C      D     E     F 1           あああ    aaa     bbb     ccc 2           いいい      eee     fff      ggg 3           ううう      hhh      iii       jjj 4           えええ     kkk      mmm     nnn 5             おおお     ooo     ppp     qqq findを使えばいいと聞きましたが、使い方がよくわかりません。 例を読みましたが、どう自分に生かせばいいのかわかりませんでした。 どなたか未熟な私に教えていただけませんか? どうぞよろしくお願いいたします。

  • Excelの検索条件について

    Excelについてお教え下さい。   A    B    C      D 1 日付  金額  納品書No. 2 10/1  2000  10-1     2000 3 10/2  1000  10-2     1000 4 10/3  2000  10-3 5 10/3  1500  10-3 6 10/3  1200  10-3     4700 7 10/3  1100  10-4 8 10/3  3000  10-4     4100 このようなデータ(納品書に書ける個数が3点まで)の場合の納品書No.ごとの小計をDのような形で出したいと思います。 (最終的には月毎の合計も出します) SUMIF(C2:C8,検索条件,B2:B8)が使えるのかなと思ったのですが、固定しない納品書No.をどのように検索条件に入れればいいのでしょうか。 よろしくお願いします。

  • VBAでのデータ並び替え、条件判断について

    Excel2003、VBA6.5でマクロに挑戦しているVBA初心者です。 学生時代にプログラムはかじった事があるのですが、マクロは勝手が分からず、 以下のようなマクロを組みたいのですが、そもそもプログラムはどこの ウィンドウに書くのか?という辺りから調べ出す始末のため、皆様の お知恵をお借りしたく、投稿しました。 【目的】 Sheet1に貼り付けられたデータを、精査(並び替え、条件判断)し、結果をSheet2に出力させたい。 Sheet1(入力データ) 1行目は項目名 データA1,データB1,データC1,データD1,データE1 データA2,データB2,データC2,データD2,データE2 … … データA11,データB11,データC12,データD11,データE11 データA12,データB12,データC12,データD12,データE12 ※データEのみ、整数型で後は文字データになります。  また行数というか、データ量は20~30行程度を想定してます。 Sheet2(出力データ) 1行目は項目名 日付,データB1+データC1の文字列を結合,固定値2,条件判断結果1(データD1より条件判断) 日付,データB2+データC2の文字列を結合,固定値2,条件判断結果2(データD2より条件判断) … ※Sheet1のデータ1行は、すべてが必要でありません。一部のみがあればOKです。  上記の例だと、Sheet1のデータAとEはSheet2では不要です。 ※日付…マクロを走らせた日付をMM/DD形式で出力させたい ※条件判断結果…(データD1がAMだったら09:00、PMだったら13:00、PM2だったら15:00という値を返すようにしたい) 流れを考えてみましたが、 1)データ型を宣言して、 2)1行を配列に読み込む 3) a)データB列、C列の文字列を結合  b)データD列の条件分岐 4)配列からデータを書き出す 5)Sheet1の行が空白だったら処理完了 という感じかと思っているのですが、具体的にマクロにできず(関数をうまく使えず)、困っています。 Findメソッドか、Vlookupあたりで必要になるデータだけ、Sheet1で検索した結果をSheet2に埋めて 行く形でもできるのかな、とも思いましたが、こちらも具体的にマクロにできません。 特に処理スピードにこだわるわけではないですが、あとあと見返して勉強およびメンテできるような、 シンプルなカタチ(1行にコマンドを詰め込んだ複雑な形ではなく)にしていただけると助かります。 どうぞご教授いただけませんでしょうか。 よろしくお願いいたします。

  • エクセルVBAで2つの条件が一致すれば結果を転記

    エクセルVBAの書き方を教えてください。 以下3つのエクセルファイルがあります。 ・F依頼(使うSheet:ナンバリング ・F結果(使うSheet:OKリスト ・F回答(使うSheet: F結果の「OKリスト」シートのA列3行目に結果が入っています。     A列         B列     C列 3行目 OK(結果)    12345678    9012 F依頼の「ナンバリング」シートには、過去からの番号が書き続けられています。     A列      B列     C列     D列 2行目 日付    12345678    9012    OK(結果) OKリストのB&Cの12桁をナンバリングシートのB&Cから検索し 一致するものがあれば、ナンバリングシートのD列(結果)にOKリストのA列(結果)を 貼り付けたいです。

専門家に質問してみよう