• ベストアンサー

VBA フォームに入力された数値を検索条件としたい

ど素人ですので、よろしくお願いいたします。 VBAでユーザーフォームのテキストボックスに入力された数値○○~○○という条件でエクセルのデータをフィルターをかけて検索する構文を書きたいのですが、フォームのコードと標準モジュールのコードをどう繋げたらよいのかわかりません。よろしくお願いいたします。 以下が途中まで書いた構文です。 モジュールコード Sub 抽出() Range("a4").AutoFilter field:=1, Criteria1:=">=■1", _ operator:=xlAnd, Criteria2:="<■2" End Sub フォームコード Private Sub 実行_Click() ■1(○○以上の数値が入るテキストボックスの構文) ■2(○○未満の数値が入るテキストボックスの構文) End Sub 全く違っているのかも知れませんが、フォームは無視してモジュールの■に数値を直接入れると正しく検索します。

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

  • ベストアンサー
  • hotosys
  • ベストアンサー率67% (97/143)
回答No.1

こんなのはどうでしょうか? モジュールコード Private Sub CommandButton1_Click() 抽出 TextBox1.Text, TextBox2.Text End Sub フォームコード Sub 抽出(条件1 As String, 条件2 As String) Range("a4").AutoFilter field:=1, Criteria1:=">=" & 条件1, _ Operator:=xlAnd, Criteria2:="<" & 条件2 End Sub

googoo-uga
質問者

お礼

ありがとうございます。 急いでいたのでとても助かりました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

質問者は、どんどん自分で考えている点は立派だが、事実と言うか勉強の方が着いていってないようだ。 http://stakayama.com/2009/04/13/%E8%87%AA%E5%88%86%E4%B8%80%E4%BA%BA%E3%81%A7%E3%81%AF%E4%BB%95%E4%BA%8B%E3%81%AF%E5%87%BA%E6%9D%A5%E3%81%AA%E3%81%84/ コードを聞く前に、構想をしっかりしないと。 エクセルVBAとして (1)FindやAutoFilterなどは、Range(シートのセル範囲)オブジェクトのメソッドです。このことをはっきり判っていますか。 わかって無いのに教えてくれというのは見当ハズレです。 (2)Userform1に、またその上に乗ったテキストボックスにFind、Filterメッソドが有るかどうか調べないといけない。多分無いと思う。ここで行っているのはTextBox1に長文の文章があり、その中から 語句を見つけるといった場合です。 ーー 多分、TextBox1などの値をシートのセルに一旦持ってきて、セル上で検索や抜き出しを、しないとならないでしょう。 そして質問には、ユーザーフォームにテキストボックスが多数有るのかどうかも書いてない。 多数(1つでもだが)有る場合、色々テキストボックスの値は変わるので、値を取るタイミング(トリガ)を決めないといけない。それは イベントと言う考えを理解しないとならない。初心者にはわかりにくいだろう。 (コントロールによっては、LimkedCellといってセルとコントロールの値が連動するものも有るが、テキストボックスには無いようだ) なぜ直接セルに入力しないのか。フォームなど使うのは格好よくしているだけでないのか。 ーー 初心者には背後知識が要りすぎて無理な課題だと思う。 ーー 案として (1)フォームにコマンドボタンを1つ設ける (2)そのコマンドボタンのクリックイベントの中で TEXTBOX1からTextBoxxまでのTextbox1.Textなどの値をシートのセルに 順次代入する。多分同一列に、が望ましい。 そのやり方はわかるかな。(注) (3)そこでシートのRangeを対象にFindやAutoFilterメソッドを使う。 (注)Cells(1,"A")=TextBox1.Text Cells(2,"A")=TextBox2.Text Cells(3,"A")=TextBox3.Text ・・・ と書くのは、テキストボックスの数が多いと面倒だよね。初心者はとりあえずこういう書き方をして、将来はWEBででも、かっこいい書き方を勉強のこと。 先日も質問がこのコーナーであった。キーワードはControlsだと思う。 >フォームのコードと標準モジュールのコードをどう繋げたらよいのかわかりません (1)イベントで連動する (2)コントロールの値を、シートのセルと言う土俵に持ってきて そこでの勝負なる。土俵によっては、その使える道具(メソッドなど)がない場合もある。 これがObjectというもの。

googoo-uga
質問者

お礼

懇切丁寧な解説ありがとうございました。 勉強の方はまだ何もできていないのですが、急ぎで、仕事上必要なためご無理言いました。 勉強時間があまり取れないため、どのような勉強の仕方が合理的に理解できるか教えていただければ幸いです。

関連するQ&A