エクセルで複数の検索ワードを使って検索する方法

このQ&Aのポイント
  • エクセルで複数の検索ワードから検索し転記する方法を教えてください。
  • 部品コードを入力して検索する方法はVLOOKUPを使用していましたが、同じ部品コードで違う処理加工をする場合には手入力が必要でした。手入力時には数式が飛んでしまい、使いにくい状態でした。エクセルで部品コードと処理から一致するレコードを検索し、結果を他のセルに挿入する方法について教えてください。
  • マクロを組んで検索を試みましたがうまく動作しませんでした。このようなケースの場合、どのようなマクロを組むべきでしょうか?
回答を見る
  • ベストアンサー

(エクセル)複数の検索ワードから検索し転記する。

(エクセル) 複数の条件にあうレコードを検索し転記する方法を教えてください。 会社で加工履歴を入力し、それを加工のデーターベース及び、単価表としても使用しようと考えています。 以前は、部品コードを入力すると、VLOOKUPで別シートにある一覧から部品コードを検索し、その型式・部品名・金額・処理を出せるようにしていたのですが、同じ部品コードで違う処理加工をするケースが存在し、VLOOKUPでは先頭の1つのみしか結果が出せない為、手入力で行っていたのですが、手入力の際、そこのセルの数式が飛んでしまい、使いやすいのか使いにくいのかわからない状態でした。 そこで、部品コードと行った処理(合計4セル)から一致するものを検索し、言い換えれば、写真下段の加工フォームの様に、C4・C5・D5・E5の4種から一致するレコードを検索し、写真上段の一覧からその結果をC7・E7・C8に挿入すればいいのかと思い、色々とマクロを組んでみましたが、一向に作動しません。 このようなケースの場合、どういったマクロを組めばいいのでしょうか? どなたか、御教授願います。

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

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

こんばんは! 万一該当データが複数ある場合は最初の行のデータだけでよいのでしょうか? そういうコトだとしての一例です。 元データはSheet1にあり、コマンドボタンはSheet2にあるとします。 Sheet3を作業用のSheetとして使用していますので、Sheet3は全く使用していないSheetにしてください。 オートフィルタでやってみました。 Private Sub CommandButton1_Click() Dim i As Long, wS1 As Worksheet, ws3 As Worksheet Set wS1 = Worksheets("Sheet1") '←Sheet1は実際のSheet名に! Set ws3 = Worksheets("Sheet3") '←作業用Sheet Application.ScreenUpdating = False With wS1.Range("A1") .AutoFilter field:=1, Criteria1:=Range("C4") .AutoFilter field:=4, Criteria1:=Range("C5") .AutoFilter field:=5, Criteria1:=Range("D5") .AutoFilter field:=6, Criteria1:=Range("E5") End With i = wS1.Cells(Rows.Count, 1).End(xlUp).Row If i > 1 Then wS1.Cells(1, 1).CurrentRegion.Copy ws3.Cells(1, 1) With Range("C7") .Value = ws3.Cells(2, 2) .Offset(, 2) = ws3.Cells(2, 3) .Offset(1) = ws3.Cells(2, 7) End With Else MsgBox "該当データなし" End If ws3.Cells.Clear wS1.AutoFilterMode = False Application.ScreenUpdating = True End Sub こんな感じではどうでしょうか?m(_ _)m

tom0528y
質問者

お礼

遅くなりました。有難う御座いました。 おかげで解決しました。 一番先に回答をくれた方をベストアンサーとさせて頂きます。

その他の回答 (2)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

加工履歴のシートに部品コードと処理1から3を合体させた検索用文字列を表示する作業列を追加してしまえばマクロを使わなくてもVLOOKUP関数で出来ますよ。 作業列を見せたくないなら非表示にすれば良いです。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

元の一覧表がシート1に有るとして写真下段の表がシート2にあるとします。 シート2で「開発」タブの「挿入」からActiveXコントロールのコマンドボタンをクリックしてシート上に四角を描くようにしてボタンを設置します。 右クリックして「コードの表示」を選択して表示の画面には次のコードを入力します。 Private Sub CommandButton1_Click() Set WS1 = Worksheets("Sheet1") Set WS2 = Worksheets("Sheet2") Dim i As Long i = 1 Do i = i + 1 If WS1.Cells(i, "A").Value = WS2.Range("C4").Value And WS1.Cells(i, "D").Value = WS2.Range("C5") _ And WS1.Cells(i, "E").Value = WS2.Range("D5").Value And WS1.Cells(i, "F").Value = WS2.Range("E5").Value Then WS2.Range("C7") = WS1.Cells(i, "B").Value WS2.Range("E7") = WS1.Cells(i, "C").Value WS2.Range("C8") = WS1.Cells(i, "G").Value End If Loop Until WS1.Cells(i, "A") = "" End Sub 部品コードと処理のセルに入力したのちにコマンドボタンをクリックすれば形式、部品名、金額が表示されます。

tom0528y
質問者

補足

>KURUMITOさん  早速の回答有難うございます。  早速試してみましたが、C8に”0”と表示している結果でした?  何故でしょうか?  お分かりになりましたら、御教授下さい。  私も色々と試してみます。

関連するQ&A

  • エクセルマクロについて。検索ボタン。

    すいませんがエクセルのマクロについてご教授ください。 今私がしたいことは下記の通りです。 メーカー名入力セルと商品名入力セルを設けています。 例えばメーカー名をパナソニックと入力して検索をすると商品名が一覧で出てきたり洗濯機という商品で検索するとそのメーカーが一覧ででてくるようにしたいです。 検索したら全てあてはまるキーワードがでてくるようにしたいのですがどうすればいいでしょうか? VLOOKUPだと検索すると1件しかヒットしないので検索ボタンを作りたいと考えました。 ちなみに A1セル メーカー B1セル商品名とあって後は下にずらっと300行位資料を作っています。 例えば C1セルにメーカー名入力セル、D1セルに商品名入力セルを設けE列にマクロで"検索ボタン"を作成し、 C1やD1に入力をしてあてはまるキーワードがあったなら全て表示したいような事をしたい場合にはどうすれば良いですか? 紙ベースでお客様に持って行ったところ大変好評だったのですが紙じゃなくてエクセルで検索できるようにしたら社内でも好評だと!と言われました。 検索と置き換えでも良いのですがお客様向けの資料として分かりやすいようにボタンを使った検索を提案したいのです。 アクセスかマクロしかないと思っているのですがまだまだ私にとっては未知の世界ですのでご教授ください。 申し訳ございませんが宜しくお願い致します。

  • エクセルのVLOOKUP関数で…(複数条件?の抽出)

    ●シート2、A列に部品正式名称、B列に部品略称の一覧表(部品の種類は約500点) ●シート3、A列に略称、B,C,D,E,F,G列と続けて寸法などの詳細を記した一覧表 があります。 ●シート1に検索一覧表として、B列(B3~B8)は項目、セルC3~C8にVLOOKUPでシート3の情報が抽出されるようにしてあります。 C1で略称を入力し抽出するのはOKなのですが、正式名称で入力しても同じようにシート3の情報を抽出するようにしたいです。 (IFを使って思いつく関数を組合わせてみたりしたのですが、うまくいきませんでした(TT) できたら関数で何か良い方法ありますでしょうか? 宜しくお願いします。

  • Exel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

    部品表というブックがあります A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。 A列     B列     C列       商品名  商品番号  コード モータ  U-1325-L   ホルダ  R-134256 また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。 やりたいことは 部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。 部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。 自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが… Sub 別ブックから貼り付ける()   Dim 検索する As Long Windows("部品表.xls").Activate 検索する = cells(i,2).Value Windows("コード一覧表.xls").Activate ActiveWindow.SmallScroll Down:=-3 Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。 基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。 どうぞよろしくお願いします。

  • エクセル関数 検索機能

      A  B 1 山田 25歳 2 田中 27歳 3 佐藤 32歳 4 落合 34歳 5 田中 41歳 6 田中 23歳 という一覧を作成し、D2セルに名字を入力すると E2セルに名字、F2セルに年齢が表示される 検索機能をつけたいです。たとえば落合さんを探したい時は E2は =VLOOKUP(D2,A1:B6,1,TRUE) F2は =VLOOKUP(D2,A1:B6,2,TRUE) で検索できましたが、田中さんの様に複数の場合 D2に名字を入力するだけで E2 F2 E3 F3 E4 F4 に3人分を表示させる関数はありますか?

  • 検索値が複数条件ある場合のエクセル関数

    A列に抽選会の回数(1回~30回)、B列に当選番号(1番OR2番)、C列に商品番号(1番~10番)が入力されているデータが3000レコード 程入力されているデータがあります。 例えば、A列の抽選会の回数が5回&B列の当選番号が2番だった時のC列の商品番号を求めたいのですが、どんな式にすれば良いのでしょうか?入力されているデータの加工はできないので、セルを連結してVLOOKUP関数で検索値を求める事はできません。 どなたか、宜しくお願い致します。

  • エクセルで検索結果が複数の場合すべて抽出する

    Excelでシート営業とシート顧客の2つがあります。どちらも互いの部署のデータが入っています。 シートの説明をします。シート顧客のD列に部品コード【145847】のような数字が1000以上あり、シート営業にも同じ数字がB列に1000以上ランダムにあり更に同じ数字が出てきます。シート営業のA列には、取引先コードが【123-254】とあり、同じ部品コードでも違う取引先コードがいくつかあります。 そこで私の作りたいのは、シート顧客をベースにして、部品コードD1を検索値として、シート営業の部品コードB列の検索範囲から検索して、ヒットした取引先コードのみをシート顧客の部品コードD1隣空セルに入れたいのです。このとき、検索結果が複数あった場合はさらに隣の空セルにいれたいのです。開きセルE.F.G.H.I.Jのように10個程度必要です。つぎは部品コードD2を検索値として行います。これを1000以上繰返したいので、関数かVBAを考えています。 長くなってすみません。 マクロについては あまり詳しくないので できれば関数を使いたいのですが 無理でしょうか? マクロを使うのであれば 分かりやすくプログラムを教えていただきたいのですが・・方法が分からず困っています。 お手数ですが、どうかお教えください。

  • 複数の検索結果を抽出したい

    Excelでシート営業とシート顧客の2つがあります。どちらも互いの部署のデータが入っています。 シートの説明をします。シート顧客のD列に部品コード【145847】のような数字が1000以上あり、シート営業にも同じ数字がB列に1000以上ランダムにあり更に同じ数字が出てきます。シート営業のA列には、取引先コードが【123-254】とあり、同じ部品コードでも違う取引先コードがいくつかあります。 そこで私の作りたいのは、シート顧客をベースにして、部品コードD1を検索値として、シート営業の部品コードB列の検索範囲から検索して、ヒットした取引先コードのみをシート顧客の部品コードD1隣空セルに入れたいのです。このとき、検索結果が複数あった場合はさらに隣の空セルにいれたいのです。開きセルE.F.G.H.I.Jのように10個程度必要です。つぎは部品コードD2を検索値として行います。これを1000以上繰返したいので、関数かVBAを考えています。 長くなってすみません。 マクロについては あまり詳しくないので できれば関数を使いたいのですが 無理でしょうか? マクロを使うのであれば 分かりやすくプログラムを教えていただきたいのですが・・方法が分からず困っています。 お手数ですが、どうかお教えください。

  • エクセル 別シートから一覧を抽出したい

    部品一覧表を作成しているのですが、2シートあり 1入力シート・2部品コードシートとあります。 部品コードシートにはB列に部品番号・C列部品名・D列部品番号・E列部品名と2行ずつ使い番号・品名がB~Wまで47行分入力されています。 B1:C47、D1:E47…と2列47行にはそれぞれ【A】、【B】、…とセルの名前の定義をつけました。現在【H】までありますが、今後増える可能性があります。 入力シートに、セルの名前を指定したときに部品コードのシートから 一覧を抽出したいのですが、どの関数を使えばよいのかわかりません。 入力シート                 |部品コードシート G   H                  | A Bコード C部品名  Dコード E部品名 4式入力用にあけています。     |1 1800  ユニットA   1501 電源A 5コード 部品名             |2 1801  ユニットB   1502 電源B 6                       |3 G4に関数を入れてG6~G52まで部品コードのシートA1~A47を一気に表示 させたいのです。部品コードシートの行数が変わることはありません。 マクロを使わないと、関数では難しいでしょうか?

  • エクセルで別ブックを検索するマクロ、VBA

    エクセルで以下の処理を行えるマクロを作成したいです。 当方、マクロについてほとんど知識がありません。 恐縮ですが、教えていただけると嬉しいです。 ・主にしたいこと  [検索]ブックで一致するコードを探して、  [結果]ブックの対応するコードの行にそれぞれの項目を返したい。 ●ブック1 [検索]  シートが12個あります(それぞれ、1、2、3…12というシート名=1~12月分)  ↓各シートの内容    A    B    C    D 1  氏名  数値  コード  内容 2  abc   111  SS1234 あいうえお 3  bcd   123  SS3456 かきくけこ ・ ・ ・ といった感じです。 12個のシートの中身はそれぞれ似たようなものですが、 「コード」や「内容」などは少しずつ違います。 ●ブック2 [結果]  ↓シートの内容    A    B    C    D 1  氏名  コード  内容  数値 2      SS3456 3      SS1234 ・ ・ ・ といった感じです。 (注)検索用ブックとは列の並びが異なっています。 ここでやりたいことの詳細ですが、 ・[結果]ブックの「コード」(B列)にコードを入力すると、  [検索]ブックで一致するコードを検索し、  A列「氏名」、C列「内容」、D列「数値」に、[検索]シートの内容を  自動的に表示させたい。  (ただし[結果]ブックに入力した「コード」は、[検索]ブックの1~12のうち、   どのシートにあるかわからない) ・入力したコードが見つからない場合は何も表示しない。 ということです。 最初VLOOKUP、MATCH等の関数で表示することを考えましたが、 シートが複数にまたがっているのと、 列の並び方が[検索][結果]ブックで違うのでわかりませんでした。 長くなってしまい申し訳ありませんが、どうかおしえてください。 よろしくお願いします。

  • InputBoxの値で検索して転記するマクロ

    1.InputBoxを3回表示させます。 2.ユーザーに入力してもらいます。 入力できるのは半角英数字のみでそれ以外は エラーメッセージを出したいです。 3.1回目は18桁か22桁以外の場合、 2回目と3回目は4桁以外の場合はMsgBoxを表示して 再入力を促します。 4.InputBoxに入力された値の3個を連結した値で Sheet2のA列を検索して 合致したらその行のG列の値を見ます。 5.G列に"済"とあったら MsgBoxを表示して 中止するか継続するか判断します。 6.継続した場合 その該当行の各列の値をSheet1にそれぞれ転記します。 Sheet2の該当行のB列→Sheet1のセルB3 Sheet2の該当行のC列→Sheet1のセルC3 Sheet2の該当行のD列→Sheet1のセルD3 Sheet2の該当行のE列→Sheet1のセルE3 Sheet2の該当行のF列→Sheet1のセルF3 7.かつSheet2の該当行のG列に 済 と転記します。 すでに済が記入されている場合は上書です。 以下のように作成しましたがエラーで動かなくて動作確認が出来ません。 どう直せばいいのか教えてください。 イレギュラー時の対応処理が必要だとも思うのですが動作しない為 思いつきません。 記述が滅茶苦茶なのですがこれが限界です。申し訳ありません。 Sub 表示板作成() Dim 検索値1 Dim 検索値2 Dim 検索値3 Dim 検索値4 Dim 判定値 Dim 判断 Dim 記録 Dim 確認 検索値4 = 検索値1&検索値2&検索値3 Do 検索値1 = Application.InputBox("型番を入力してください") If Len(検索値) < 18 Then MsgBox "18桁未満です。再入力しますか?" Loop Else Exit Do '検索値2と3も上記と同じ記述をここへ入れる '(現在省略) End If 判定値 = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 7, 0) If 判定値 = "済" Then 判断 = MsgBox("発行済みです。再度データ取得しますか?", vbYesNo) Else Select Case 判断 Case vbNo Exit Sub Case vbYes Range("B3").Value = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 2, 0) Range("B4").Value = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 3, 0) Range("B5").Value = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 4, 0) Range("B6").Value = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 5, 0) Range("B7").Value = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 6, 0) End Select End If 記録 = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 7, 0) 記録.Value = "済" 確認 = MsgBox("これは●●用です。いいですか?", vbYesNo) Select Case 確認 Case vbNo Exit Sub Case vbYes Call 印刷 End Select End Sub

専門家に質問してみよう