• 締切済み

Excelユーザーフォームでのデータ検索

初心者の質問で申し訳ございません。 ユーザーフォームを利用して検索ボタンを作ろうと考えています。 ユーザーフォームでテキストボックスを2個と コマンドボタン1個を作成し、 テキストボックス1に検索したい氏名を入力して コマンドボタンを押すと、 ワークシート(ワークシート名、データ)に作成されたデータのD列から 一致するものを検索し、 一致したデータのA列にある「番号」をテキストボックス2、 表示する。 というマクロが書けず困っています。 よろしくお願いします。

みんなの回答

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

サンプルマクロです。 Private Sub CommandButton1_Click() Dim res  If TextBox1.Text <> "" Then   res = Application.Match(TextBox1.Text, Sheets("データ").Columns(4), 0)   If IsNumeric(res) Then    TextBox2.Text = Sheets("データ").Cells(res, "A").Value   Else    TextBox2.Text = "Not Found"   End If  Else   TextBox2.Text = ""  End If End Sub でもこれで実用に耐えるか疑問です。本当はもっと色々考えなくてはなりません。 1)検索するD列の値が数値の場合  TextBoxで取得する値は「文字列」です。シートのD列が「数値」なら見かけが同じでも絶対にMatchしません。TextBoxの文字列をVAL関数で数値に変換してから検索しなければなりません 2)入力された文字が「全角」「半角」違いの場合  入力者は意識せず「全角」「半角」を混在して入力することがあります。D列には「abc(半角)」と入力してあるのにTextBox1に「abc(全角)」で入力しても、これまたMatchしません。D列が半角/全角のどちらかに統一されているなら、Strconv関数で変換して検索するのがよいでしょう。

hinasehinae
質問者

お礼

返事遅くなって大変申し訳ございません。 ちゃんと動くようになりました。 ありがとうございます。

関連するQ&A

  • Excelユーザーフォームでのデータ検索

    現在Excelマクロの勉強中ですが、ユーザーフォームでテキストボックスを4個とコマンドボタン1個を作成し、テキストボックス1にコードを入力してコマンドボタンを押すと、ワークシート(ワークシート名、住所録)に作成されたデータのA列からコードを検索(データは2行目から始まる)し、一致したデータのB列にある「名前」をテキストボックス2、C列の「住所」をテキストボックス3、D列の「電話番号」をテキストボックス4に表示する。 というマクロが書けず困っています。 わかる方教えてください。

  • ユーザーフォームでの任意の文字を含む検索について

    初心者の質問で申し訳ございません。 ユーザーフォームを利用して検索ボタンを作りました。 ユーザーフォームでテキストボックスを2個と コマンドボタン1個を作成し、 テキストボックス1に検索したい氏名を入力して コマンドボタンを押すと、 ワークシートに作成されたデータのD列から 一致するものを検索し、 一致したデータのA列にある「番号」をテキストボックス2、 表示する。 このサイトで教えていただき、以下のようなプログラムで 検索することができました。 しかし、テキストボックス1の文字が完全に一致すれば結果は出るのですが、 文字を含むものを検索するように改良したいのですがどのようにすればいいのか 分からず困っています。 よろしくお願いいたします。 ************************** Private Sub CommandButton1_Click() Dim res  If TextBox1.Text <> "" Then   res = Application.Match(TextBox1.Text, Sheets("データ").Columns(4), 0)   If IsNumeric(res) Then    TextBox2.Text = Sheets("データ").Cells(res, "A").Value   Else    TextBox2.Text = "Not Found"   End If  Else   TextBox2.Text = ""  End If End Sub

  • ユーザーフォームを使った検索について

     仕事で使うために、VBAを勉強中ですが、検索の段階でつまずいてしまいました。自分なりに色々やってみたのですが、どうしてもうまくいきません。自分の知識不足が原因なのですが、どこをいじったらよいのかわからないでいます。  シート"一覧"にA列から整理No、職員番号、職種、氏名・・・・という風に、40列、130行程度データが入ります。 ユーザーフォームに複数のテキストボックスを作り、氏名を入力することで、任意のテキストボックスにその行のデータを返すようにしたいのですが、検索すると、アクティブセルの値が表示されます。  よろしくお願いします。

  • EXCEL ユーザーフォームを使ったマクロ

    データの登録をするのにユーザーフォームを使おうと思うのですが、なかなかうまくいきません。教えてください。 ユーザーフォームにはコンボボックス、テキストボックス、コマンドボタンが貼り付けてあります。(コンボボックスのリストには呼び出したいシートの名前が入っています) コンボボックスのリストの中から呼び出したいシートを選択し、テキストボックスに入力した内容を、コマンドボタンを押すことで選択されたシート上の、あるセルに登録したいのですがどうすればよいでしょうか?

  • ユーザーフォームのデータをそのまま保存する方法

    エクセルでユーザーフォームを作成し、エクセルのワークシート上のボタンからユーザーフォームを表示するようにしました。 ワークシート上のボタンをクリックして表示されたユーザーフォームにデータを入力してユーザーフォームを終了しワークシートを保存終了、再度そのワークシートを開いてボタンからユーザーフォームを表示すると入力したデータが消えてしまいます。 ユーザーフォームに入力したデータがそのまま保存できて次に開いたときにデータが残っている方法はありませんか? 今回、ユーザーフォームを作成をした目的は、ユーザーフォームに入力したデータを元に住所録等を作成するためではありません。ですからユーザーフォームに入力したデータはワークシートと連動させていません。 やりたいことは、ワークシート上に氏名一覧があり、個々の氏名欄にボタンを作成して、その人のデータ一覧をユーザーフォームで表示させるということです。 ユーザーフォームは、人数分を作成する予定です。

  • ユーザーフォームについて

    エクセル2002です。 ユーザーフォーム内のテキストボックスを使用して、 (1)A1のセルに1と入力されている状態でマクロを起動した場合、 (2)ユーザーフォーム内のテキストボックスには2と表示される (3)ユーザーフォーム内のボタンを押すと、A2のセルに2と入力される。 このような流れで、A列のデータ最終行に番号をふっていきたいです。 (A列のデータ最終行がA30なら、A31に31と番号をふる) ユーザーフォームのテキストボックスとボタンは作ってあるのですが、 それぞれに入れるコードを教えていただけないでしょうか。 よろしくお願いします。

  • ユーザーフォームのプロパティが表示しなくなる。

    ワークシートのコマンドボタンでユーザーフォームを表示しテキストボックスに入力後、ワークシートに転記するマクロを作成しているのです。 途中で作動テストをすると上手く動きましたが、しばらく放置し又、動かしてみるとえエラー出る。 調べようとしてもユーザーフォームのプロパティがパスコードエラーで全く表示されなくなっている。 その後自動保存される。 再度開きなおして作動させると作動するけど又、同じ現象になる。 プログラミングの問題なのでしょうか。

  • エクセルのユーザーフォームの作り方で

    エクセルのVBAの初歩的なことで教えてください。小学生の子供用の学習ソフトを試作しています。シート1を問題の表示画面とし、シート2に問題のデータを保存しています。学習者はシート1を見て、最初に名前や使った日をユーザーフォームに入力すると、そのデータがシート1の表示されていない下の方のセルに記録されるようにマクロを組んで作りました。そのユーザーフォームを、シート1に作ったコマンドボタン(テキストは「開始」としました)を押すと表示されるようにしたいのです。そのためのコマンドボタンをどのように作ればよいでしょうか。ユーザーフォームの方は、マクロを実行すれば立ち上がり正常に入力(登録)できます。VBAの本を読んで独学で勉強し始めたばかりですので、できればわかりやすく教えてください。

  • ユーザーフォームで教えてください。

    ユーザーフォームで教えてください。 エクセルシートで、A列に1から100までナンバーがあり、 B列~E列までデータが入っている表があります。 テキストボックスにナンバーを入力(もしくはスピンボタン)して 「検索」のコマンドボタンを押すと、B列以降のデータが各テキストボックスに表示される。 という形にしたいのですが、やり方が分からず困っています。 これまでは表の外に最初の行と最後の行を表示させて、 それを変数として扱い、「前」、「次」のコマンドボタンで1ずつ増減させて 表示していたのですが、ナンバーから直接表示させたほうが効率が良いと思いました。 (データが少ないときはよかったのですが。) 希望としては、 例としてテキストボックス1に「50」と入力する。(またはスピンボタンで50を選択) コマンドボタン「検索」でナンバー50のB列~E列のデータをテキストボックス2~5へ表示。 コマンドボタン「前」「次」を配置し、「前」でナンバー49、「次」でナンバー51のデータを表示。 1もしくは100(最後のナンバー)のときに「前」「次」を押してもデータは表示せず、 メッセージで「これが最初(最後)です」と表示。 という感じです。 できればでいいのですが、 ナンバー50のデータが表示された状態で、 B列以降のデータを直してナンバー50の行に上書きする「修正」、 表示された行を削除して1行上にずらす「削除」の コマンドボタンがあると助かります。 長くなってしまいましたが、よろしくお願いします。

  • エクセルのユーザーフォームについて

    パスワード入力用のしかけです。 ワークシートに配置したコマンドボタンを押してユーザーフォームを呼び出します。 Private Sub CommandButton1_Click() UserForm1.Show End Sub ユーザーフォームにはテキストボックスとコマンドボタンを配置しております。 テキストボックスのPasswordCharには * を設定しました。 Private Sub CommandButton1_Click() If StrConv(TextBox1.Text, vbLowerCase) = "abcd" Then MsgBox "OK!" Unload Me Else TextBox1.Text = "" TextBox1.SetFocus End If End Sub これで、ABCDまたはabcdと入力され、ユーザーフォーム上のコマンドボタンをクリックすれば、ユーザーフォームは消えます。 でも、いちいちマウスでクリックするのが面倒なのでEnterキー1回でユーザーフォームを消したいのです。 今でも、一度Enterキーを押すと、ボタンにフォーカスが移動するので、さらにEnterで消えますが、二度ではなくEnterキー1回でユーザーフォームを消すにはどうすればよいのでしょうか? ユーザーフォームは使ったことがないのでわかりません。 よろしくお願いします。

専門家に質問してみよう