• 締切済み

Excel VBA 条件検索について

ExcelVBAで 「データ検索後リスト表示をして、そのリストから該当するシートを選べば表示される」 というユーザーフォームを作成したいのですが、やり方がよく解りません。どなたか教えて下さい。 具体的には 「コマンドボタンが押された時に、ユーザーフォーム内のテキストボックスに入力された値(名称、日付等)と、複数のシート内のセルの値(名称、日付等)を比較して、一致(全一致、一部一致)した場合、ユーザーフォーム内のリストボックスに表示させる」 というものと 「リストボックスに表示されたものの中から見たいシートを選択すると、そのシートを表示する」 というものです。 リストの表示形式は シート名   名称  日付等 Sheet1    りんご  2013.01.01 Sheet2    りんご  2013.01.02 という具合にしたいと思っています。 ちなみに複数のシートと言いましたが、マスターシートを作りコピーして使用しますので、同一形式のものになります。 以上になります。 色々やってみましたが、うまくいきませんので、どなたか解る方は教えて下さい。 よろしくお願いします。

みんなの回答

  • oka_me
  • ベストアンサー率86% (26/30)
回答No.1

こんな感じでどうでしょうか。不具合等あったら申し訳ありません。 前提として 「日付等」の列は日付のみ(yyyy/mm/dd形式) 「名称」の右横の列に「日付等」の項目があるとします。 一部一致ということが具体的にどのようなことか詳細がわかりませんでしたので、とりあえず全一致で作成しました (※そのあたりは質問者様側で修正可能であれば適宜変更願います) ※日付等の欄が単純なテキスト形式であれば、 If Format(c.Offset(, 1).Value, "yyyy/mm/dd") = TextBox2.Value Then の所を単純に If c.Offset(, 1).Value = TextBox2.Value Then 等でも動くかと思います。 '検索ボタン(CommandButton1) Private Sub CommandButton1_Click() Dim c As Range Dim fc As Range Dim s As Worksheet Dim q As Long q = 0 ListBox1.Clear For Each s In ActiveWorkbook.Worksheets Set c = s.Cells.Find(what:=TextBox1.Text, lookat:=xlWhole) If Not c Is Nothing Then Set fc = c Do If Format(c.Offset(, 1).Value, "yyyy/mm/dd") = TextBox2.Value Then With ListBox1 .AddItem .List(q, 0) = s.Name .List(q, 1) = TextBox1.Value .List(q, 2) = TextBox2.Value End With q = q + 1 End If Set c = s.Cells.FindNext(c) Loop Until c.Address = fc.Address End If Next End Sub '表示ボタン(CommandButton2) Private Sub CommandButton2_Click() Sheets(ListBox1.List(ListBox1.ListIndex, 0)).Activate End Sub

zeles32
質問者

お礼

返事が遅くなり申し訳ありません。 回答していただきありがとうございます。 参考にさせていただきます。

関連するQ&A

  • エクセル2007VBAで検索するコードを知りたい。

    エクセル2007(Excel2007)のVBAで【検索と置換】と同等の機能をもった検索アプリケーションを作りたいのですが、 そのコード(コマンドボタンを実行したときのコード)を教えていただけないでしょうか。 (おそらくですが、リストボックスのコードも必要だと思います。) 正しくは、【検索と置換】から【置換】機能を無くしたものとイメージしていただきたいです。 ●設置するもの ユーザーフォーム(UserForm1) テキストボックス(TextBox1) コマンドボタン(CommandButton1) リストボックス(ListBox1) ●仕様 ユーザーフォームのテキストボックスに入力してコマンドボタンを押すと、検索対象を見つけ、 リストボックスにその対象一覧を行ごとに表示するものになります。 ●検索するときの条件 (1)大文字と小文字を区別しない (2)半角と全角を区別しない (3)部分一致すれば(一部でも一致すれば)検索対象にする (4)今、開いているワークシート上の「全てのセルが検索対象(列や行を指定しない)」 ※検索されたセルの存在する行ごとに、ユーザーフォームのリストボックスに(1行ずつ)表示したいです。 そして、リストボックスに表示されたデータのうち、どれか1つを選ぶと、その選択対象の行の【D列】にアクティブセルを移動するようにしたいです(画面もアクティブセルが見える位置にスクロールします)。 ●リストボックスに(1行ごとに)表示するもの● ↓↓↓ (左から)I列の値、D列の値、O列の値、Q列の値(→4列の値になります) ※リストボックスにQ列の値が表示された場合のみ(Q列に何かしらのデータがある場合のみ)、 リストボックス上の【その行の(I列の値、D列の値、O列の値、Q列の値の)文字すべてを赤色】にして表示していただきたいです。 分かる方がいましたらよろしくお願いいたします。

  • VBA 2条件の検索について

    VBA初心者です。よろしくお願いします。 下記のような、シートがあります。   A B C D E E ・・・・・ 1 生産番号 型番 ライン 1/18 1/19 1/20・・・・・・ 2  111 XXX 1 3 222 YYY 2 4 333 ZZZ 3 5 444 AAA 5 ユーザーフォームに生産番号と生産数と日付を入力する コンボボックスを作成し、生産番号(列)と日付(行)が一致する セルに生産数を入力するようなVBを作成しています。 (例)生産番号222、生産数200、日付1/20 であれば、    E3のセルに200入力する Findメソッドでは、2条件の検索が当方実力ではできず、 質問させていただく事となりました。 ちなみにシートも複数有り、全てを検索できるようなVBを考えてます。 検索対象の生産番号・日付は1bookで1つしかありませんので、 検索結果が複数はありません。 よろしくご教示お願いいたします。

  • Excel VBA の質問です

    ユーザーフォームの中のコンボボックスの値をリストから呼び出して選択したとき、テキストボックスの値を同じリストの別の列から表示させたいです 会社の仕事で品番と品名がありますが、必ず品番は一つの固定の品名を持っています。 なので、品番を製品のマスタからひろってきてるのでわざわざ品名を入力するのは面倒です 製品マスタは例えばA列の2行目に ある品番があればその品名がB列の2行目に必ずあります よろしくお願いします

  • ExcelVBAでユーザーフォーム内のリストボックスの設定について

     教えてください、ExcelVBAでユーザーフォーム内にリストボックスを作りました。 複数列・複数行のワークシートデータを参照する設定です。  列は12列で、一番左の列に番号をふってあります。  行は31行で、一行目がタイトル表示してあります。  質問なのですが、このリストボックスは全列・全行表示する大きさでユーザーフォーム内に作成してあるのですが、いざマクロを動かすと幅は問題ないんですが、高さが縮んで自動的にスクロールが表示されます。  ユーザーフォームを大きくしてリストボックスも大きくしてやっても同じです。 このリストボックスの高さを固定させる設定はどうすれば良いでしょうか。

  • 検索画面の作り方

     今、エクセルマクロでユーザーフォームをつくり、その中にシートから引っ張ってきた項目をリストボックスに表示させてあるのですが、新たにテキストボックスをつくりそこにリストボックスにある項目と一致した場合、(もしくは一部が一致)した場合に強調表示させることは出来るのでしょうか。  そして、選んだ項目をコマンドボタンだけでなくダブルクリックで特定のセルに入れることは可能でしょうか。よろしくお願いします。

  • VBA コンボボックスにシート名を表示

    ExcelVBA初心者です。 ユーザーフォームの中にコンボボックスを作成し、現在使用しているbookのワークシート名をすべてリスト表示させたいのですが、どうしたら良いでしょうか? ワークシート名はSheet1、Sheet2、Sheet3です。 よろしくお願いします。

  • エクセルVBAのリストボックス

    エクセルVBAのリストボックスを使った検索システムを作っています。 リストボックスはユーザーフォームではなくsheetに貼り付けてます。 リスト地域 北海道 青 森 岩 手 山 形 新 潟  ・  ・  ・ リストボックスから地域(複数選択)を選んで検索ボタン(コマンドボタン)を押すと同じsheetの特定の場所(例えばrange("A25")に選択した地域を表示させたいのですがうまくいきません。 例) 北海道、東京、愛知 のように表示させたいです。 単数選択ではうまく表示できるのですが、複数だとうまくいきません。 (複数選択できるようにプロパティのMultiSelectの項目はfmMultiselectMultiに変更しています。) よろしくお願いします。

  • エクセルVBAについて質問です。

    エクセルVBAについて質問です。 シート1のユーザーフォームにコンボボックスとテキストボックスが各1つずつ、 シート2のA列には1行目から順に「あ」「い」「う」と文字が入っていて、B列には「1」「2」「3」と値が入っています。 コンボボックスのリストにはシート2のA列の文字が選択できる状態にあります。 この状態で、例えばコンボボックスで「い」を選んだら、テキストボックスに自動的に「2」と入る、というように、コンボボックスのリストの中から任意の文字を選択したときに、テキストボックスにB列の値が入るようにするにはどのようにすればいいのでしょうか?よろしくお願いします。

  • vbaについて教えてください

    エクセルでワークシートに貼ったコマンドボタンをクリックするとユーザーフォームを呼び出してかつ、ユーザーフォーム上のコンボボックスに指定フォルダ下のフォルダを表示するものを作りました。 ユーザーフォーム上のコンボボックスに表示されたフォルダを切替選択するとリストボックスにそのフォルダ下のファイルを表示させたいのですがやり方がわかりませんので教えてください。

  • VBA 変数の受け渡し

    エクセルVBAで標準モジュール内でインプットボックスに入力した変数をユーザーフォームに受け渡してユーザーフォーム内のリストボックスに表示させる場合どのように変数の受け渡しを行えばよいか教えてください。 現在は、一度ワークシートの任意のセルに値を書き出し、その後ユーザーフォームのイニシャライズで先ほどのセルから値を受け取るようにしています。 標準モジュールではインプットボックス入力後「UserForm1.Show」でユーザーフォームの立ち上げを行っています。