ACCESSのような検索フォームを作成

こんにちは。伊川(@naonaoke)です。

ご視聴者様から質問がきました。

初めて動画拝見させていただきました。、Excelはワークシート内でセル同士を足したり引いたりするような算数程度の使い方しかできない初心者中の初心者の私ですが仕事で以前から入力フォームが作れると楽で便利だなと思っていたので大変参考になりました。関数もマクロ全く知らずVBAと言う存在もこの動画で初めて知りましたが、おかげさまで何とか入力フォームを作成する事が出来ました。ありがとうございました。入力フォームの動画はこれで最後とのコメントが動画内で有りましたが一度入力したしたデーターを入力フォームうぃ使い上書したり特定のリストを検索して入力フォームに表示させて上書するなどの作業をしたいのですがぜひ動画で分かりやすく教えていただけないでしょうか、長文なコメントと図々しいお願い失礼いたしました。宜しくお願い致します。

結構長い内容です。

要するに、ご質問者様には、

  • Excelのスキルがない。
  • でも、ユーザーフォームでデータを抽出して、情報を更新したい

では、早速作成してみましょう。


スポンサーリンク



今回利用する必要な知識

  • ユーザーフォーム
  • リストボックス
  • 動的配列
  • Controlsコレクション
  • ループ
  • ワイルドカード




完成のユーザーフォーム

それぞれのボタンの意味





動的配列を使って、検索フォームを作成

また、配列かと思うかもしれませんが、我慢してください。

そのほか、Controlsコレクションも配列のように扱うことができます。




検索フォームを作成 作業手順 その1 データベースを確認


上の図がデータベースとなります。






検索フォームを作成 作業手順 その2 変数の説明

変数の説明です。

動的配列の宣言を覚えていますか?

記憶が曖昧な方は、上の記事を参照してください。




検索フォームを作成 作業手順 その3 参照するデータベースを格納

これで、参照するデータベースを選択できました。




検索フォームを作成 作業手順 その4 参照されるデータベースを格納





検索フォームを作成 作業手順 その5 条件判定

すでに上記のコードがおかしいのは理解できますか?

ものすごく無駄が多いです。

どんどんループを使う

これで、短縮することができました。




検索フォームを作成 作業手順 その6 動的配列の内容をリストボックスに表現





検索フォームを作成 作業手順 その7 リストボックスへ表現





検索フォームを作成 作業手順 その8 Controlsコレクション

 Activecellはどこ?





検索フォームを作成 作業手順 その9 オマケ






検索フォームを作成 作業手順 その10 完成のコード

検索ボタンのコード


ユーザーフォームに検索データを表現するコード


修正した情報をセルに反映させるコード






ここがポイント

ここがポイント
Function8.png
ExcelでACCESSのようなことをすることは、結構、難易度が高いです。しかし、配列を理解するにはいいかもしれません。

また、ループを理解するには、配列は、いい教材だと思います。

 




まとめ

さすがに、配列は、いったん休止にします。

最近は、配列しか紹介していません。

また、次回から違う内容を紹介します。

今回のサンプルファイルは、No143です。

サンプルファイル
VBAを勉強中の悩みを解決
  • なんで動かないの?
  • もうやだ!
  • どこにも情報がない!
スポンサーリンク
コメント一覧
  1. 畑中 一夫 より:

    VBA面白いですね
    今回の動画のコード8行4列でやってみました。
    何とか出来ましたが、質問です。
    リストボックスの大きさは表の行数だけ必要ですか?
    行数を増やすと表示しなくなりました。

    • Naoki Kikkawa より:

      範囲の指定の問題だと思います。
      配列にうまく反映されていないのではないでしょうか?

      • 畑中 一夫 より:

        お返事ありがとうございます。
        質問の書き方が悪かったようです。
        リストボックスの一番上にに検索した行は表示されないのでしょうか?
        現在例えば10行を検索したならば、9行分の空白があり表示されます。
        上に詰めて、常時1番上に表示できますか?
        まだまだスキルがなく、ユーザーフォーム作成は初めてなもので
        よろしくお願いいたします。

        • スキルを上げたい!! より:

          色々と勉強させていただいています。初心者です。色々なサイトを参考にして登録、検索、更新機能が使用できるOA機器の管理表を作れたらいいなと思い、日々奮闘しております。上の方と同じ問題にぶち当たっております。検索結果は1つしかないのに、検索結果より上にある該当しない行が空白として出てきてしまいます。どうしたらよいのでしょうか。
          また、結果を選択しユーザーフォームに反映させるのにとても苦労しています。同じようにやっているのに、オブジェクトが必要です。とエラーが出てきてしまいます。どうしたらよいのでしょうか。
          ユーザーフォームもコンボボックス、テキストボックス、オプションボタン、チェックボックス色々と付けました。
          実践を通して自分のものにしていきたいと思っていますが、初心者なのにハードルを上げすぎました…

          • Naoki Kikkawa より:

            If myData(i, 3) Like “*” & TextBox2.Value & “*” Then

            ここの部分ですかね?
            If myData(i, 3)=TextBox2.Value Then
            これに変更したどうでしょうか?

          • Naoki Kikkawa より:

            後は、原本を見ないとなんとも言えないです。

          • Naoki Kikkawa より:

            原本というのは、ファイルそのものを確認しないと分からないという意味です。

            >>.Range(.Cells(ListBox1.List(ListBox1.ListIndex,0)+1,1),.Cells(ListBox1.List(ListBox1.ListIndex,0)+1,14)).Select

            型が一致しませんというエラーですが、配列の設定がおかしいと思います。
            私のコードをそのまま利用してもおそらく作動しません。
            サンプルファイルを確認しました。
            最後の部分ですが、
            14)).Select
            9)).Select ⇒私のコード
            だからエラーがですのではないでしょうか?

  2. スキル上げたい!! より:

    早速のお返事ありがとうございます。
    サンプルで取り扱っている住所録と同じ作りで、私は1行14列からなるOA機器のデータを管理しています。

    検索ボタンを押して該当するものをリストボックスに表示

    With Worksheets(“管理”)
    Lrow =.Cells(Rows.Count,1).End(xlUP).Row
    myData = .Range(.Cells(1,1),.Cells(Lrow,14).Value
    End With

    ReDim myData2(1 To Lrow,1 To 14)
    For i=LBound(myData) To UBound(myData)
    n=n+1

    If myData(i,4)= TextBox機器№.Value Then ←先生のおっしゃるとおりにしてみましたが結果表示には変わりありませんでした。

    myData2(n,1)=myData(i,4) ←この書き方おかしい!と動画でおっしゃっている部分です。
    myData2(n,2)=myData(i,5) 検索結果にはキーとなる機器№、PCのタイプ、名前と社員番号のみを表示しました。
    myData2(n,3)=myData(i,6) 
    myData2(n,4)=myData(i,7)

    EndIf
    Next i

    With ListBox1
    .ColumnCount=4
    .ColumnWidth=”80;80;70;70″
    .List=myData2

    End Sub

    ——————————————–
    Private Sub List Box1_DblClick(Byval Cancel As MSForms.ReturnBoolean)←選択したものをユーザーフォームに反映させたい。

    With Worksheets(“管理”)
    .Range(.Cells(ListBox1.List(ListBox1.ListIndex,0)+1,1),.Cells(ListBox1.List(ListBox1.ListIndex,0)+1,14)).Select
    End With

    こちらが黄色くなってしまいます。
    こちらを書きながら自分が作ったほうに間違えがあるのに気づきました。ListBox1の1を書き忘れたので、オブジェクトが必要というメッセージはなくなりましたが、型が一致しませんと出てきます。
    これはリストボックスに表示するのを絞ってしまったからでしょうか?

    続きで選択したものをユーザーボックスに反映させるコードが続きますが、
    今まだ未完成です。ActiveCellの居場所が定まっていません。

    というくらいの初心者です。
    こちらのコメント欄で、わかりやすく反映されるか心配ですが、、、誤字脱字ご容赦ください。

  3. スキル上げたい!! より:

    リストボックスの空白は解決できませんが、選択したものをユーザーフォームに少しずつ反映できるようになってきました。もう少し頑張ってみます。また、相談に乗ってください。

コメントを残す

CAPTCHA


関連キーワード
Microsoft Excelの関連記事

Twitterでフォローしよう

おすすめの記事