pickup

 

目次

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

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

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

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

結構長い内容です。

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

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

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


スポンサーリンク

今回利用する必要な知識

  • ユーザーフォーム
  • リストボックス
  • 動的配列
  • Controlsコレクション
  • ループ
  • ワイルドカード
初心者でも、すぐに、集計、プレゼンができるようになる。書籍だけの勉強は今すぐやめよう!
電子書籍で、AMAZON1位
専門のスタッフが、電話、チャットで完全サポート
大手パソコンスクールよりも、圧倒的な低価格

完成のユーザーフォーム

それぞれのボタンの意味

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

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

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

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


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


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

変数の説明です。

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

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

 

参加者限定特典
プログラミングを覚えると、色々なことができますね。
本気で、プログラムを勉強するなら、無料で参加ですます。
  参加者限定特典あり。TECH::CAMPオンライン説明会   

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


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

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


未経験からプロのWebデザイナーになる! 400レッスン以上の完全マスターコース

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

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

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

どんどんループを使う

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

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

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

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

 Activecellはどこ?

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


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

検索ボタンのコード


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


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

 


Naosuke
呼び出すVBAは、クラスモジュールが最高です

ここがポイント

ここがポイント
Function8.png
ExcelでACCESSのようなことをすることは、結構、難易度が高いです。しかし、配列を理解するにはいいかもしれません。また、ループを理解するには、配列は、いい教材だと思います。
動画とブログでわかりやすくExcelとACCESSを紹介しています

まとめ

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

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

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

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

毎日の業務が、3時間短縮できます

わからない事を延々と考えるのは、無駄です。

  • なんで作動かないの?
  • もうやだ!VBAなんか嫌い!
  • ネットで調べても情報がない!

必ず作動するコードが、ここにあります。

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

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

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

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

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

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

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

  4. 伊川様
    いつもお世話になります。
    先日、ご連絡させて頂いた中澤です。この機能とても便利ですね!
    もう少しご相談させて下さい。

    只、もう1つ検索ボタンを追加すると格段に利便性が向上するかと思っております。
    例えば、名前の検索で「一」を含む人員が複数いたとして(例、一条さん等)、さらに、性別でフィルタリングをかける、といった具合です。(そもそもサンプルデータは2行のみですので、元データを最低3行にする必要が出てきますが、、、)

    見よう見まねで、新たに追加するボタンを書きましたが、予想通り?デバッグになってしまいます。
    どこが悪いのか教えて頂けないでしょうか?
    ↓↓↓

    Private Sub CommandButton5_Click()

    End Sub

    Dim Maxrow As Long ‘最終の値を取得
    Dim myData() As Variant
    Dim myData2() As Variant ‘動的配列を宣言

    Dim i As Long, j As Long, n As Long, x As Long ‘ループで使う変数を宣言

    With Worksheets(“Sheet1”)
    Maxrow = .Cells(Rows.Count, 1).End(xlUp).Row ‘worksheet(1)の最終行を取得
    myData = .Range(.Cells(1, 1), .Cells(Maxrow, 9)).Value ‘現状のデータを格納

    End With

    ReDim myData2(1 To Maxrow, 1 To 9) ‘myData の中で検索で一致したデータを配列 myData2 に格納
    For i = LBound(myData) To UBound(myData)

    n = n + 1
    If myData(i, 6) Like “*” & TextBox2.Value & “*” Then

    For x = 1 To 9
    myData2(n, x) = myData(i, x)
    Next x

    End If

    ‘For i = LBound(myData) To UBound(myData)

    n = n + 1
    If myData(i, 6) Like “*” & TextBox2.Value & “*” Then

      ’さらに性別で絞り込みたいので、’, 3から’, 6に直しました。

    For x = 1 To 9
    ‘ myData2(n, x) = myData(i, x)
    Next x

    End If

    Next i
    With ListBox1
    .ColumnCount = 9
    .ColumnWidths = “30;30;70;70;70;30;100;30;30”
    .List = myData2

    End With

    • 単純に条件を足しても、デバックになります。
      複数条件にするなら、コードを書きなおした方が早いです。
      メールでも返信済です。

コメントを残す

CAPTCHA


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

Twitterでフォローしよう

おすすめの記事