• 締切済み

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

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

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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メソッドなどで検索するよりも、関数のほうがずっと速く検索できます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBA ユーザーフォーム 検索

    現在VBAにてユーザーフォームにて入力したデータをシート1に転記するものを作成しました。 この転記したデータを生かして作業したいと考えております。 データは商品データで A    B C E F 商品コード 商品名  区分  単価  備考 となっており ユーザーフォームも TEXTBOX1=A TEXTBOX2=B と言う様になってます。 現在考えているのがこのデータの一部を変更したい場合、コマンドボタンを押すと商品コード入力用boxがでてきて、商品コードを入力するとA列から検索し該当する商品データをユーザーフォーム上に表示するようにしたいのです。 そのデータがA75行にあったとします。 そのユーザーフォーム上で単価を変更した場合検索した行(A75行)にそのまま上書きする様にしたいです。 説明がうまくできてないかも知れませんが、どなたかご教授願います。

  • access2003 抽出条件が持ち越されてしまう

    http://okwave.jp/qa3580875.html ↑にて質問させていただいた者です。  一部繰り返しになりますが、2000種ほどの商品を扱っています。伝票を見ながらフォームから直接売上入力を行いたく思います。 ◆親)売上入力フォーム:売上管理番号/日付/取引先/取引先伝票番号/売上合計金額 ◆子)売上明細フォーム:商品コード/商品名/単価/数量/明細金額 ◆売上入力テーブル:売上管理番号/取引先/日付/取引先伝票番号 ◆売上明細テーブル:明細番号/売上管理番号/商品コード/数量/明細単価 子フォームで商品コードのフィルターとして、 1)親フォームで選択した取引先の商品のみ→[Forms]![売上入力フォーム]![取引先]を導入 2)ワイルドカード「Like "*" & [商品コードの一部を入力] & "*"」 のふたつを使っていますが、うまく動作してくれません。 いったん商品コードを選択すると、明細の次の行に移動しても取引先選択のポップアップが出ず、コンボボックスには同じ選択肢が提示されます。さらに、新しいレコードに移動してもポップアップなし&同じ選択肢が続きます。 この状態を回避する方法を教えてください。 長くなりましたが、どうぞよろしくお願いします。

  • エクセル マクロ 抽出について

    先程、下記の質問をさせていただきました。   続けて失礼いたします。   エクセルのマクロについての質問です。   まず、Sheet2に      A   B      C     D       1  abe 安部・・  東京都・・  03・・   2  asai 浅井・・  神奈川県・・ 04・・   3  asida 芦田・・  ・・     ・・   などのリストがあると仮定します。   一番はじめにお願いしたいのは、ユーザーフォームのTextbox1に   Sheet2のA列に相当するアルファベットを入れると、Listbox1にア  ルファベットに見合った氏名が表示できればと思っております。   難しいかもしれませんが、もしできるのでしたら、Textbox1へのア  ルファベット入力の途中での抽出ができるようになると、とても助  かります。例えば、『a』を入力すると『安部、浅井、芦田』が表  示され、つづいて『as』と入力すると『浅井、芦田』が表示できる  様なシステムです。 以前の質問と答えを参考にして、以下のマクロを書いてみました。しかし、全く反応がありません。どなたか詳しい方がいらっしゃいましたら、どうか教えてください。 Private Sub TextBox1_Change() v = TextBox1.Text Userform1.ListBox1.Clear For i = 1 To 14 c = Worksheets("sheet2").Cells(i, "A") If v = Left(c, Len(v)) Then Userform1.ListBox1.AddItem Cells(i, "B") End If Next i End Sub

  • ユーザフォームを使ってのデータの書き換え(エクセル)

    sheet1に下記のように商品のデータ一覧が入っており、 価格の改定があった時に[単価]に新しい価格をいれ、 当初[単価]に入っていた価格を[旧単価]に入れるようを作っています。 コード 商品名  単価  旧単価  改定日 1111  商品A  1000 1112  商品B  1500 1113  商品C  1200 ↓ コード 商品名  単価  旧単価  改定日 1111  商品A  1100  1000   2008/5/2 1112  商品B  1500 1113  商品C  1200 <UserForm> コード [コードのTextBox] 商品名[商品名のLabel] 単価  [単価ののLabel] 新単価[新単価のTextBox] 改定日[改定日のTextBox] ユーザーフォムでテキストボックスにコードを入れたら、 コードを商品のデータ一覧から検索して商品名と単価を ユーザーフォムのLabel Captionに自動で表示されるようにしたいのです。 1.コードの入力 2.商品名、単価が表示される 3.新単価、改定日の入力 4.元のデータ(Sheet1)の書き換え 上記のような順序で考えていたのですが、 どうしてもコード入力からの検索表示が上手くいかないのです。 どうすれば良いのでしょうか? ※ユーザーフォームで[商品名][単価]をLabelにしてるのは、 数値・文字列として書き換えの必要がないので動かせないほうがいいのでは とういう個人的な思い込みからですので、特にこだわりはございません。 相当な初心者のため、少しばかり注釈をつけてくださる大変ありがたいです。 上記のよう順番でなくても、よい方法があれば教えて下さい。 よろしくお願い致します。

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

    いつもこのサイトの皆様にはお世話になっております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

  • Excelでの複数シート間での検索

    2つのシートがあり、 シート1 商品コード 商品名  単価 100    A    50 200    B    70 300    C    80 シート2 商品コード 倉庫  在庫数 100   東京   10 200   東京    5 300   東京    2 200   大阪  100 300   大阪   70 となっています。 目的は、シート2の商品コードをキーとし、シート1の商品コードを検索し、単価を引っぱってきたいのです。 シート1に該当する商品コードがなかった場合は単価は0としたいです。 どのようにしたらよいか、アドバイスいただきたいのですが、よろしくお願いいたします。

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

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

  • エクセル マクロの記述 =VLOOKUP()

    エクセル マクロ ユーザーフォームを作成して そのフォ-ムのなかにテキストBoxを2つ 作り、TextBoX1にID番号(Sheet1にA列にID番号、B列に氏名あり)を入力すると、TextBox2に氏名が表示出来るようにしたいです。 そのような記述を教えて下さい。 お願いします。

  • エクセルのマクロを教えてください。

    マクロの初心者です。 特に変数が全く使えず、下記もどのように記載していいのかわからないため教えていただけないでしょうか。 ユーザーフォームのtextbox2に開始番号があります。 textbox3に本数があります。 sheet1のB12セルには開始番号が入ります。 開始番号から本数分+1したものを順番にセルに入っていくようにしたいです。 ただ、入れたいセルが横→左下(開始番号の列)→横→左下(開始番号の列)・・・としたいため、どのように書いていいのかわかりません。 地道に書くのであれば、下記のようになると思うのですが、変数を使って書く場合はどのようになるのか教えていただけないでしょうか。 Worksheets("Sheet1").Range("B12").Value = TextBox2.Value If TextBox3.Value = 2 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 ElseIf TextBox3.Value = 3 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 ElseIf TextBox3.Value = 4 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 Worksheets("Sheet1").Range("G13").Value = TextBox2.Value * 1 + 3 ElseIf TextBox3.Value = 5 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 Worksheets("Sheet1").Range("G13").Value = TextBox2.Value * 1 + 3 Worksheets("Sheet1").Range("B14").Value = TextBox2.Value * 1 + 4 ・ ・ ・ End If

  • エクセル 抽出

    Sheet1に コード番号 商品名 数量 単価 12345    チョコ   1  50 67891    アイス   1  60 45612    アメ    1  70 と上記のようにデータがあるときにSheet2でコード番号だけ打ち込めば商品名・数量・単価を出せる関数等あれば教えてください。 宜しくお願い致します。

このQ&Aのポイント
  • EPSON社製品のプリンター動作中に画面に「しばらくおまちください。」のメッセージが表示され、20分以上経っても表示が消えない場合、以下の対処法を試してみてください。
  • まず、プリンター本体の電源ランプが点滅している場合は、電源ボタンを押して一度電源を切り、再度電源を入れてみてください。
  • それでも表示が消えない場合は、プリンターのインクカートリッジを交換してみてください。インクカートリッジが空になっている場合、プリンターが正常に動作しないことがあります。
回答を見る

専門家に質問してみよう