• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル VBAで入力フォームを作成し、そのフォームで検索をしようとF)

エクセルVBAで入力フォームを作成し、検索を行う方法

このQ&Aのポイント
  • エクセルVBAを使用して入力フォームを作成し、そのフォームで検索を行う方法を説明します。
  • フォームで検索を行う際、一度表示したデータが再検索時に表示される問題についても解決方法を紹介します。
  • VBA初心者でも理解しやすいように、具体的なコードや手順を説明します。

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

  • ベストアンサー
回答No.1

何となくですが、、、 ソースを見る限り、初回の検索もうまくいっていないのような。。。。 Set r = Cells.Find( は、検索結果に該当するセルを「取得するだけ」の処理で、カーソルは移動しません。 なので、検索前と検索後では「ActiveCell」は同じはずです。 検索結果が存在しない場合もあります。 Findメソッド発行後に If r Is Nothing Then   ActiveSheet.Protect      '検索結果なし   Call MsgBox("検索結果なし")   Exit Sub End If を追加しておきましょう。 そして、  If TypeName(r) = "Range" Then って、これ  Dim r As Range と宣言しているから、常にTrueだと思うので意味がない分岐かも? あと  略称.Value = Cells(ActiveCell.Row, 2).Value  ~  担当者.Value = Cells(ActiveCell.Row, 12).Value はActiveCellを利用していますよね? なので、値を読み取る前に  r.Activate として発行するか  略称.Value = Cells(r.Row, 2).Value  ~  担当者.Value = Cells(r.Row, 12).Value のように、カーソル位置を変えずに、検索結果のRangeを利用する必要があるかもです。 ※Findメソッド (特に引数Afterの意味) ※FindNextメソッド の理解を高めると、うまくいくと思いますよ。

souba
質問者

お礼

早速、やってみました。 略称.Value = Cells(r.Row, 2).Value でうまくいきました。 有難うございます。 ご指摘の通り勉強不足で理解してからやるべき とも思うのですが、出来たらいいなではなく、 やらないとならないものでしたので。 大変助かりました、有難うございました。

関連するQ&A

専門家に質問してみよう