• ベストアンサー

▲▲検索欄を設置し該当する列を抽出する▲▲

いつもお世話になっております。 マクロを学び始め、調べに調べたのですが、行き当たりました。 ご教授頂ければ幸いです。 タイトル通りで御座います。sheet1にフォームを作成し それをsheet2に引っ張ることはできました。 続いて検索をさせたいのですが、それがうまくいきません。 写真を添付しているのですが、B2に検索したい文字を入力 ※B2についてはセルでは無理かと思いますので、テキストボックスになるかと思います。 D2~D4のボタンを押すことで特定の部分から検索を行い 列を抽出しB10配下に該当するものを抽出したいのですが、全くうまくいきません。 ご教授頂ければ幸いです。

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

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

画像は小さくて見えませんし、具体的にB2の内容をどこからどのように探したいのかとか、3つのボタンのそれぞれ目的の機能も(要するに「何をどうしたい」のか)説明がありませんので、このままでは具体的なマクロのアドバイスも寄せられるハズもありませんね。 とりあえず、次の通りに作成してみます。 手順: 標準モジュールを用意、次の3つのマクロを用意する sub macro1()  if worksheets("Sheet3").range("B2") = "" then exit sub  rows("11:9999").delete shift:=xlshiftup ’B2の内容をB列から前方後方一致で検索、転記する  application.screenupdating = false  application.calculation = xlcalculationmanual  application.enableevents = false  with worksheets("Sheet2")   .range("A:E").autofilter field:=2, criteria1:="*" & worksheets("Sheet3").range("B2").value & "*"   .autofilter.range.copy worksheets("Sheet3").range("B10")   .autofiltermode = false  end with  application.enableevents = true  application.calculation = xlcalculationautomatic  application.screenupdating = true end sub sub macro2()  if worksheets("Sheet3").range("B2") = "" then exit sub  rows("11:9999").delete shift:=xlshiftup ’B2の内容をC列から前方一致で検索、転記する  application.screenupdating = false  application.calculation = xlcalculationmanual  application.enableevents = false  with worksheets("Sheet2")   .range("A:E").autofilter field:=3, criteria1:=worksheets("Sheet3").range("B2").value & "*"   .autofilter.range.copy worksheets("Sheet3").range("B10")   .autofiltermode = false  end with  application.enableevents = true  application.calculation = xlcalculationautomatic  application.screenupdating = true end sub sub macro3()  if worksheets("Sheet3").range("B2") = "" then exit sub  rows("11:9999").delete shift:=xlshiftup ’B2の内容をD列から後方一致で検索、転記する  application.screenupdating = false  application.calculation = xlcalculationmanual  application.enableevents = false  with worksheets("Sheet2")   .range("A:E").autofilter field:=4, criteria1:="*" & worksheets("Sheet3").range("B2").value   .autofilter.range.copy worksheets("Sheet3").range("B10")   .autofiltermode = false  end with  application.enableevents = true  application.calculation = xlcalculationautomatic  application.screenupdating = true end sub ファイルメニューから終了してエクセルに戻る フォーム(ActiveXコントロールでは無いので間違えない事)のコマンドボタン、若しくは図形等でボタン絵柄を作成、それぞれ右クリックしてマクロの登録で用意のマクロを登録して利用する。

hideyuki-man
質問者

お礼

お時間さいての回答に感謝します。 ココまで画像が小さくなっていると思いませんでした。 わかりにくい説明の中、的確な回答をありがとう御座います。 いただきましたマクロを調節してうまく動きました。 本当にありがとう御座います!

その他の回答 (1)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

Sub Macro1() Sheets("Sheet2").Range("A5:C7").ClearContents Sheets("Sheet1").Range("A1:C4").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("Sheet2!Criteria"), CopyToRange:=Range( _ "Sheet2!Extract"), Unique:=False End Sub Sheet2(上記マクロ及びサンプル画像ではSheet1)のデータに対して Sheet3(上記マクロ及びサンプル画像ではSheet2)に検索条件を入れて Sheet3内に表示する方法として「詳細検索」機能をマクロ化する方法もあります >B2についてはセルでは無理 「検索文字 = sheets("Sheet3").Range("B2").Value」という事では。 >D2~D4のボタン 謎です。添付画像では読みとることができませんでした。 >列を抽出しB10配下に 行ではなくて列を抽出ですか? 具体的にどのようにしたいのか読みとることができませんでしたので、 「返値 = worksheetfunction.match(検索文字,対象,一致モード)」で一致する行を探したり For~Nextループで各セルを上記検索文字と一致するかIfで判定すればいいのでは。

関連するQ&A

  • Excelで全シートから検索し列で抽出する方法

    現在Excel2010で作成している表をマクロで検索・抽出したいのですが、 素人のため中々思うように出来なくて困っています。 Sheet2~Sheet4まで作成した表があります。 Sheet1には検索ボタンを作成し、検索ボタンを押すと検索フォーム(ユーザーフォーム)が出てきます。 検索フォームはTextBox1とCommandButton1があります。 ------ここまでは作成済みです-------- ・検索フォームのTextBox1に入力した文字(半角全角英数関係なく)をCommandButton1で検索を行う。 ・そしてその検索結果をSheet1の検索ボタン(セル A~B・1~2)を避けて表からコピーして抽出(複数ある場合は複数抽出)。 ・抽出内容は、検索でヒットしたセルの列全てを抽出(複数ある場合は複数の列が抽出される)。 ・同列に検索した文字が2つある場合も、抽出する列は1つ。 少しややこしいかもしれませんが、上記のようなマクロを作成したいのですが私では力が足りませんでした。 わかりやすく教えていただけると嬉しいです。

  • エクセルのVBAマクロで検索と結果表示(抽出)

    エクセルのVBAマクロで検索と結果表示(抽出)を行いたいです。 業務で使用している膨大なリストデータから、特定のキーワードで情報の絞り込みを行いたいのですが、上手くマクロが組めません。 機能としては、シート1で特定のキーワード(テキストボックスに)を入力し検索ボタンを押下すると、 シート2のリストデータから検索に引っかかったセルの"行"を、シート1にリストアップ(貼り付け)していくようなマクロを作りたいのです。 シート2にはB列~AH列xn行のリストデータがあり、シート2のK列のセル内から「シート1のテキストボックスで入力したキーワードを含む」検索を行い、 HITした行をシート1のA9の行から結果として表示を行いたいんです。 簡単に言えばオートフィルタ機能の部分一致版を作りたいのですが・・・。 (オートフィルタでは完全一致でしか抽出が出来ないので) そして、検索ボタンを押下すると前回結果はクリアしたいです。 ネット上のサンプル等も参考にしながらやってみたのですが上手く行きません。。。 どなたか上記のマクロ文をご教授願えないでしょうか。 必要な情報(シート2の特定の列)のみ表示させたいとも思いましたが、むずかしくて断念・・・。 もし可能でしたらこちらもお願い致します。 よろしくお願いいたします。

  • 検索後、削除や抽出するマクロ

    エクセルのシート1、A列の1~1500のセルにテキストが入力されており ある特定のテキストを含むセルを全て シート2のA列に抽出したいのですが、検索してみましたがうまくできません。 作業の流れとしては シート1のA列を範囲指定し、編集-検索、検索する文字列を入力し、すべてを検索をクリック 検索結果をコピーし、シート2のA列に貼り付ける もうひとつはシート1、A列の1~1500のセルにテキストが入力されており テキスト1またはテキスト2を含むセルを全て削除するというマクロを作成したいです。 ご指導のほどよろしくお願いいたします。

  • 検索文字に該当し除外字に該当しない情報を抽出したい

    検索文字に該当し除外字に該当しない情報を抽出したい  ■やりたいこと Excelの別シートに並んでいる顧客データから、検索文字に該当し、かつ、除外文字に該当しない住所を別シートに抽出したいです。 ---------------------------------------------------------------------------------------------------------  ■条件 シート参照元:B列に住所,C列に郵便番号,D列に名前,E列にメアドが並んでいます。 シート参照先:A1に検索文字 A3に除外文字が入力されています。 検索文字に該当し、除外文字に該当しない住所のみを参照元と同じ列の並びに表示させたいです ---------------------------------------------------------------------------------------------------------  ■除外文字がない場合においての数式 参照先シートのB2セルに =IFERROR(INDEX(参照元!B$1:B$10,LARGE(INDEX((FIND($A$1,参照元!$B$1:$B$10&$A$1)<LEN(参照元!$B$1:$B$10))*ROW(参照元!B$1:B$10),0),COUNTIF(参照元!$B$1:$B$10,"*"&$A$1&"*")+1-ROWS(B$2:B2))),"") と入力 過去の質問"INDEX関数で住所の途中から抽出する方法"こちらの回答No.5を応用させていただいています ---------------------------------------------------------------------------------------------------------  ■判らないところ 除外文字がない場合においての数式を応用してやろうとしましたが、うまくいきません。 (1)内側のIndex関数の"範囲"の部分(おそらく"*ROW(参照元!B$1:B$10)"の前の()内の「比較演算を行うところ」の設定)がわかりません。 (2)LARGE関数の"順位"部分の設定(おそらく"-ROWS(B$2:B2)"の前の「検索文字があり、且つ、除外文字がない行の数をカウントする」の設定)がわかりません。        (1)は私なりに色々試してみましたが、失敗しました。(2)は私の力不足でどうしたらよいか全く浮かびませんでした ---------------------------------------------------------------------------------------------------------  ■過去の質問 INDEX関数で住所の途中から抽出する方法 https://okwave.jp/qa/q9362447.html アスタリスクを使用しindex関数で抽出したいです https://okwave.jp/qa/q9362227.html”  よろしくおねがいします

  • マクロの検索と抽出について

    いつもこのサイトの皆様にはお世話になっておりますm(_ _)m この度、マクロの検索と抽出について教えていただきたいのですが、 シート1(シート名:住所録)のB9からE30に取引会社の住所録を入力しております。 B列は1~30までの数字、C列には会社名、D列には住所、E列には郵便番号をそれぞれ入力しております。 会社名をキーワードに検索をかけて、検索結果をシート2(シート名:抽出結果)に出力されるようなマクロを作りました。下記を参考にしていただきたいのですが、質問としましては、検索を何回か繰り返し行いたく、そしてその結果を抽出結果のシートに反映させる際に、前回の出力されたセルの下に反映されるようにしたいのです。 質問にまとまりがなくて伝わりづらかったとは思いますが どなたか教えていただけないでしょうか。 よろしくお願いいたします。 Private Sub CommandButton1_Click() '#### 最初に、テキストボックスの条件を住所録シートに転記しておく。 If OptionButton1 = True Then '部分一致にチェックが入っていたら '部分一致検索は、検索条件を「*」で囲む Worksheets("住所録").Cells(4, "C").Value = "*" & TextBox1.Text & "*" ElseIf OptionButton2 = True Then '完全一致にチェックが入っている場合 '完全一致検索は、検索条件の先頭に「'=」をつける Worksheets("住所録").Cells(4, "C").Value = "'=" & TextBox1.Text End If '####  検索を実行 Sheets("抽出結果").Select '抽出結果を表示するシートを選択しておく。 Cells.Select '前回の抽出結果を消しておく Selection.Clear Range("A2").Select Sheets("住所録").Range("B9:E109").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("住所録").Range("C3:C4"), _ CopyToRange:=Sheets("抽出結果").Range("A1"), _ Unique:=False End Sub Private Sub CommandButton2_Click() On Error Resume Next Worksheets("住所録").ShowAllData End Sub Private Sub CommandButton3_Click() TextBox1.Text = "" End Sub Private Sub UserForm_Initialize() OptionButton1 = True 'あいまいにチェックを入れておく End Sub

  • 複数シートから検索し、その行から15列下までを抽出したい。

    使用しているのはWINDOWS XP EXCEL2000です。 マクロ、VBはあまりよくわかっていません。 ひとつのファイルに6sheetあります。 シートY1~Y6があり、シートY1のB1に入力されたデータと同じものをシートY1~Y6全てから検索し、 その行から15列したまでを抽出するということをしたいのです。 現状は1シートのみからの検索で、A3からA17までMATCH関数とINDEX関数が入っていて抽出しています。 (下記のように関数が入っています。)  YIシート A3 → =MATCH(B1,T1_A1!D:D,0) B3 → =INDEX(T1_FMRA!E:E,A3,1)  YIシート A4 → =A2+1 B4 → =INDEX(T1_FMRA!E:E,A4,1) ↓ ↓  YIシート A17 → =A16+1         B17 → =INDEX(T1_FMRA!E:E,A17,1) これをA1に入力されたデータを全シートから(Y1~Y6)検索、抽出する方法が知りたいのですが・・・ 説明がわかりづらくすみません。 よろしくお願いいたします。     

  • ACCESSのマクロを使った抽出について

    質問をさせてください。 私は今、アクセス2002を使ったデータベース管理をしています。 そこで、データベースを検索方式でレポート形式表示しようと思い、フォームに抽出するテキストボックスとボタンを作りました。 その抽出するためのボタンに仕込んだマクロ「フォームを開く」のWHEREに [名前] Like "*" & [Forms]![フォーム]![テキストボックス] & "*" と入力して使っています。一応動きますが抽出できるのは1項目のみです。 このままでは使いにくいので、抽出する条件を複数指定して抽出をしたいと考えているのですが どうも上手く行きません。専門に扱っている本にも詳しくはのっていませんでした。 そこで ---------------------------------- 名前[テキストボックス1] 住所[テキストボックス2]         [ボタン] ---------------------------------- というようなフォームで、 レポート中の名前に○○を含み、 なおかつ住所に○○を含むデータを1度の検索で抽出するには どうしたら良いのでしょうか。 そして、もうひとつ。 同じようなものなのですが、コンボボックスを使って性別の抽出を行おうと思っているのですが 男性女性全てを抽出するためにはコンボボックスの文字が"すべて"では上手く動きません。 原因は"すべて"というワードを性別が含んでないからなのですが "すべて"を指定した時、全ての性別を抽出するにはまくロにどういった命令を書けば良いのでしょうか。 よろしくお願いします。

  • 検索・抽出・貼り付けのマクロ

    シート1のデータをオートフィルターかけて検索し抽出したものを、A列、B列、D列、F列をシート2の、A列、B列、C列、D列に貼り付けるマクロを教えて頂けますでしょうか? 一週間位悩んでいます。

  • 指定した文字数分の文字列を抽出し、検索(VBA)

    いつもお世話になっております。 指定した文字数分の文字列を抽出し、他のシートから抽出した文字列を検索して表示するのに セルBB2に =IF(AW2="",VLOOKUP(LEFT(N2,2),商品マスタ!$M$21:$N$67,2,0)) という数式を入れています。 セルBB2のみではなくBB列でずっと同じ処理をするため、マクロで処理しようと思うのですがなにぶん未熟でいい方法がわかりません。 Mid関数を使えばいいのかな、とは考えましたが、どう書けばいいのかわからず前にすすめません・・・・ どなたかご教授いただければ幸いです。

  • 検索したい日付からデータを抽出したい。

    こんにちわ。 キャンペーンが何日~何日までどういった内容がある、という一覧を作成しています。 Aの列が開始日、Bの列が終了日、Cの列がキャンペーン内容、です。 検索したい日付をD1のセルに入力したら、その日付に該当するキャンペーンすべてを別のシートに抽出できないでしょうか・・・ オートフィルタで抽出は出来るのですが、日付を入力しただけで抽出 させたいのですが、無理でしょうか・・・ よろしくお願いします。

専門家に質問してみよう