• 締切済み

エクセル 複数条件による検索・抽出 マクロ

ユーザーフォームに5つのTextBoxを用意しまして、TextBox1に取引先会社名、TextBox2に商品名を入れると、(できれば自動的に)TextBox3に単価、TextBox4に商品番号、TextBox5に材料名が入るようなマクロを組みたいと考えております。 当社は、取引先相手が一次卸か二次卸かで、同じ商品でも単価が変わってくるので、二つの条件が必要となり、初心者の私には、どのようなマクロを組めば良いのかわかりません。 できれば、ユーザーフォームを立ち上げるSheet1とは、別のSheet2などに各会社名・対応する商品名、そして各々の単価などの表を作りたいと考えております。 分かりにくい質問かと思いますが、宜しくお願いします。 上記に書いた方法以外に、もっと良いアイデアなどありましたら、是非とも宜しくお願いします。

みんなの回答

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

#2の方と同じことを言いますが、VLOOKUP関数で、別シートに 取引先名、商品名、単価、注意書きの表をつくり、検索するのがよいと思います。 VBA(マクロではない)で仕事に使えるものを作ろうとすると、相当慣れが必要で、6ヶ月1年の期間と、偏執的とも言える興味の持続と沢山の書籍購入が必要です。システムを仕事にした人や一部理科系で優秀な人だと習熟は早いような気がしますが、自信ありますか。 ついでに、VBAでもVLOOKUP関数は使えます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

簡単な説明をすると、ユーザーフォーム自体よりも、まず、データ・テーブルを完成して、次に、INDEX 関数やVlookup関数などで、充実させることが先決です。 その後で、ユーザーフォームに組み合わせるような形にします。 例えば、 今は、データテーブルが、どのようなスタイル、どのような位置になっているか分かりませんので、ある程度こちらの想像で進めます。 kaisha = TextBox1.Value shohin = TextBox2.Value としますね。 そうしたら、 a1 = Application.Match(kaisha, データ1, 0) a2 = Application.Match(shohin, データ2, 0) で、数値(行数)を求めます。 そうしたら、場所が決まりますので、 r1 = Application.Index(範囲,a2,2) r2 = Application.Index(範囲,a2,3) r3 = Application.Index(範囲,a2,4) と返せばよいわけです。 まだ、状況が変わるかもしれませんが、いきなり、ユーザーフォームで作ろうとせずに、まず、関数で処理することをお勧めします。ユーザーフォームで、Findメソッドなどで検索するよりも、関数のほうがずっと速く検索できます。