エクセルVBAユーザーフォーム作り方、シートとユーザーフォーム間でデータ情報の設定・取得、comboBox、textBox、addItem実例

Поділитися
Вставка
  • Опубліковано 12 вер 2024
  • 続編作りました2022年1月30日。エクセルVBAユーザーフォームの入門チュートリアルです。
    UserFormにラベルやテキストボックス、コンボボックスを貼りつけて、コンボボックスにはシートの情報を取得します。
    シートの客先、品番をコンボボックスにAddItemで追加します。
    コンボボックスで選択された品番の商品名、単価をシートのテーブルから取得します。この処理はVLOOKUP的ですね。
    テキストボックスには個数を入力しますが、数字以外を入力すると警告が表示されます。
    登録ボタンを押すと、シートにユーザーフォームの情報を転記します。
    挿入箇所は最下行の下の行となりますので、forループで最下行を取得する方法も学習できます。
    Withステートメントやもっと合理的な方法もありますが、基本的なプログラミンを理解していただくためのコードを記載しています。
    Udemy 講座
    エクセルVBAで簡単に!受注入力ユーザーフォーム・適格請求書作成でインボイス&軽減税
    www.udemy.com/...
    1,500円 のお得なクーポンです。
    有効期限 2024/10/06 6:28 PDT
    こちらブログに当動画のコードを記載しました。コピペして動作確認可です。
    chikaraemon.co...
    続編作りました2022年8月11日。ユーザーフォーム変更とキャンセル。シートの注文登録内容を取得してユーザーフォームに渡す。変更した注文情報をシートの該当行の情報を書き換えます。今更の続編でUserForm1の部品コードを再利用します。
    • ユーザーフォーム変更とキャンセル。シートの注...
    請求書版として続編作りました2022年1月30日。このユーザーフォーム作り方の受注明細を客先毎に請求を発行する動画です。よろしければご覧くださいね。
    • エクセルVBAで客先毎の請求書。ユーザーフォ...
    バイトシフト表 レギュラー曜日、休む日、臨時出勤対応 VBA動画
    • バイトシフト表をエクセルVBAマクロで作成。...
    健康管理 複数人数対応 ログイン機能付き エクセルVBA動画
    • エクセルVBAでログイン機能付き体温・健康状...
    部活動保護者登板表 エクセルVBA動画
    • エクセルVBAで部活動保護者当番表を作成しま...
    VLOOKUP関数をVBAで表現
    • EXCEL VLOOKUP関数をVBAで表現
    VLOOKUP関数に検索フォームを追加
    • EXCEL VLOOKUP関数に検索ユーザー...

КОМЕНТАРІ • 82

  • @user-xs6vv1gl8w
    @user-xs6vv1gl8w 4 місяці тому +1

    はじめまして。通りがかりです。
    シンプルかつ分かりやすく、実用的なコードなので、
    即実践で使えそうです。フォームは苦手意識がありましたが、明日から使ってみます。
    チャンネル登録しました。Excel VBAの動画を楽しみにしています。

    • @ちからえもん
      @ちからえもん  4 місяці тому

      コメントありがとうございます!!!😊

  • @shima-6551
    @shima-6551 3 роки тому +3

    VBA初心者です。
    実用的に応用できることを丁寧に解説されていて、非常に参考になります。
    今後もVBA動画、楽しみにしています。

    • @ちからえもん
      @ちからえもん  3 роки тому

      ご連絡ありがとうございます。とても励みになります。
      今後ともよろしくお願いいたします。

  • @user-yq5do7tg3v
    @user-yq5do7tg3v 2 роки тому +1

    初心者です。
    上司からのリクエストがまさにこれです。
    ここにくるまでいろんな動画見ました。
    もうできないか?とあきらめかけたところ
    まさに ありがとう😊ございます。
    そして告知されているもの 是非是非
    アップお願いいたします。
    それまでが私の知りたいことです。
    よろしくお願いいたします。

    • @ちからえもん
      @ちからえもん  2 роки тому

      コメントありがとうございます!そうですね、気長に待っててください。盆休みくらいに頑張ってつくろうと思います。

    • @user-yq5do7tg3v
      @user-yq5do7tg3v 2 роки тому

      @@ちからえもん 是非よろしくお願いします。
      本当お願いします

    • @ちからえもん
      @ちからえもん  2 роки тому

      @@user-yq5do7tg3v こんにちわ。続編としてユーザーフォームの変更とキャンセルの機能をアップしました。
      ua-cam.com/video/le3_2kItMQo/v-deo.html

    • @user-yq5do7tg3v
      @user-yq5do7tg3v 2 роки тому

      @@ちからえもん ありがとうございます。早速勉強いたします。😃

  • @kmaeda8856
    @kmaeda8856 2 роки тому

    VBA初心者です。ユーザーフォームに関して、とても分かりやすい動画で参考になりました。

  • @user-zw7us4ji6g
    @user-zw7us4ji6g Рік тому

    まさにやりたい事をそのまま動画にしていただけて助かりました!感謝しかない!

    • @ちからえもん
      @ちからえもん  Рік тому

      おはようございます。コメントありがとうございます!

  • @MM-yv8wo
    @MM-yv8wo 2 роки тому +1

    ちょうどマクロの勉強していたので助かります!

  • @fangchineselesson4776
    @fangchineselesson4776 3 роки тому

    VBA初心者ですが、分かりやすくて勉強になりました。

    • @ちからえもん
      @ちからえもん  3 роки тому

      コメントありがとうございます。今後ともよろしくお願いします!

  • @user-ps5cn5os1z
    @user-ps5cn5os1z 3 роки тому +2

    何日も探してやっとこのやり方ゲットした。本当にありがとうございます。もし、シート2のデータが外部のデータの場合のやり方も是非教えて頂けると嬉しいです。

    • @ちからえもん
      @ちからえもん  3 роки тому

      ご連絡ありがとうございます。お役に立ててよかったです!
      外部のデータというのは、他のエクセルファイルということでしょうか?

  • @sanchai1207
    @sanchai1207 3 роки тому

    この短い時間の説明で、わかりやすく解説して頂きありがとうございます。

    • @ちからえもん
      @ちからえもん  3 роки тому

      このようなコメントをいただき、私も嬉しく思います。今後ともよろしくお願いいたします。

  • @syouzama
    @syouzama Рік тому

    すごくわかりやすかったです!
    ありがとうございます。

  • @masa-qp6tb
    @masa-qp6tb Рік тому

    すげ〜ーー勉強になります

  • @user-xg5je8tj4l
    @user-xg5je8tj4l 2 роки тому +1

    これはすごい

  • @りょう介
    @りょう介 Місяць тому

    素晴らしいどうがです。
    感動しました。
    一点質問回答お願い致します。
    コンボボックスのリスト意外の値を入力すると、入力されてしまいます。
    こんな時はどうすればよいのですか。
    教えてください。

    • @ちからえもん
      @ちからえもん  Місяць тому

      プロパティウィンドウで該当するコンボボックスの
      Style を「2 - fmStyleDropDownList」にしてください。
      選択しかできなくなります。

    • @りょう介
      @りょう介 Місяць тому

      回答頂きありがとうございます。
      請求書の動画、これから見ます。
       CHIKARAEMONのロゴマーク
      カッコいいですね!😊

    • @ちからえもん
      @ちからえもん  Місяць тому

      @@りょう介 ロゴマークの指摘は初めてですね!マニアッックですが、メタリカというバンドが好きなので、それ風です。わかりませんね(笑)

  • @user-ej1lt8zt4s
    @user-ej1lt8zt4s 3 роки тому

    分かりやすい説明ありがとうございます。
    チャンネル登録し何度何度も見て勉強しております。
    質問ですが、「個数を入力」し「登録ボタン」を押すと「指定するセルに転記」されるのですが
    転記されたセルの数値が「テキスト形式かアポストロフィで始まっています」となります。
    今は、転記されたセルをひとつひとつ数値に変換しているのですが、面倒なのでどうにかなりませんかね~?

    • @ちからえもん
      @ちからえもん  3 роки тому

      こんにちわ。
      チャンネル登録および何回も再生いただいてありがとうございます。
      Cells(row_no, 2) = UserForm1.TextBox1
      のCells(row_no, 2)の セルの書式設定は 日付 2012/3/14 です。
      Cells(row_no, 3)~Cells(row_no, 8)の セルの書式設定は 標準 です。
      転記されるシートのセルの書式設定はどのようになっていますか?

    • @chibi-chibi9137
      @chibi-chibi9137 3 роки тому +2

      コンボボックスやテキストボックスから取得した値は、
      「文字列」になりますので、
      数値として扱いたい場合は、
      val関数で囲う必要があります。
      val(ComboBox1.text)

  • @渋川雅之
    @渋川雅之 Рік тому

    大変分かりやすく丁寧な内容で感謝しております。
    教えて頂きたいのですが、シートに登録した段階で日付が文字列扱いになってしまいフィルターで日付が拾えません。
    日付セルをダブルクリックか区切り位置調整すると日付型になりますが、登録段階で日付型にする方法を教えて頂きたいのですが
    よろしくお願いします。

    • @渋川雅之
      @渋川雅之 Рік тому

      お騒がせしました
      Cells(row_no, 2) = UserForm1.TextBox1.Value
      書き込み時に数値変換でいいみたいですね。

    • @ちからえもん
      @ちからえもん  Рік тому

      コメントありがとうございます。そうですか、よかったです!

  • @micobmhbc3659
    @micobmhbc3659 Рік тому

    本当に助かりました!有難うございます。
    再生と停止を繰り返し、一緒に作成してました。
    大変勉強になりました。
    動画内では、コンボボックスの参照先を「Cells」とされていましたが、私は別のワークシートをマスター用に作成して、セルの指定したいのですが、その場合のコーディングを教えていただけないでしょうか。。
    恐らく簡単なことなのだろうと思うのですが、仕事のため独学(見様見真似)で作成している素人です…。
    どうかお力をお貸しいただけますと幸いです🙇

    • @ちからえもん
      @ちからえもん  Рік тому +1

      こんばんわ コメントありがとうございます。
      シート 「マスター」 にデータがあるとします。
      そのデータを参照するには、
      Sheets("マスター").Cells(i, 2)
      のように
      cells(i,2)の前に Sheets("マスター"). を付ければ良いだけですよ。

    • @micobmhbc3659
      @micobmhbc3659 Рік тому

      やはり超初歩レベルなことですよねw
      何の知識もないと、この( )や.の使い方が分からず、こんな小さなことにも躓きます。。
      ですが、これだけでも他に応用が利きそうですし、本当に有り難いです。
      早速チャレンジしてみたいと思います。
      早々且つご親切な返信有難うございました!

  • @ジャスミン茶-q2l
    @ジャスミン茶-q2l 3 роки тому

    お世話になります
    動画大変参考になりました。
    知識が浅くて申し訳ございませんが、もしコンボボックスの表示項目が
    重複表示の場合、どうすれば良いでしょうか?
    例えば動画の客先と品番の間の欄に“分類”とゆうコンボボックスの欄を入れ、
    分類の欄の項目を選択し、下の品番の欄に連動して、品番の欄の選択項目を絞りたい場合、
    どうすればよろしいでしょうか?
    現在勉強中で初心者で、質問内容が伝わりずらかったらすみません。
    お手数をおかけして、申し訳ございませんが、設定する事は可能でしょうか?

    • @ちからえもん
      @ちからえもん  3 роки тому +1

      ご連絡ありがとうございます。はい、出来ます。
      分類を 鉛筆、ボールペン、定規、その他 とします。
      M列にH001~H015が 鉛筆、ボールペン、定規、その他 いずれに属するのか予め記入しておきます。
      ボールペンが選択された場合、ボールペンだけを絞って表示させるには、
      For i = 3 to 17
      if cells(i,13)="ボールペン" then
      combobox2.additen cells(i,10)
      end if
      next i
      のような感じで、IFを使います。
      ”ボールペン”のところには combobox?.text とでもしておけば選択された分類に応じて絞られると思います。
      ?はコンボボックス名です。

    • @ジャスミン茶-q2l
      @ジャスミン茶-q2l 3 роки тому

      ご返信ありがとうございます😊
      勉強になりました。
      早速試してみます。
      早急のご返信誠にありがとうございました。

  • @semickycom0119
    @semickycom0119 3 роки тому

    VBA初心者です。質問失礼します。
    現在勉強中で知識が浅く、質問内容が伝わりづらかったら申し訳ないです。
    客先コンボボックスの内容は、参照先のN2:N5のデータをテーブルに変えれば、
    客先が新しく増えたとしても自動で追加することは可能でしょうか。

    • @ちからえもん
      @ちからえもん  3 роки тому +1

      ご連絡ありがとうございます。
      そのような方法もあるかと思います。
      私はアナログチックですので、
      古典的に
      for i= 3 to 9999
        if cells(i,14)="" then
        exit for
       end if
       combobox1.additem cells(i,14)
      next i
      とします。
      そのようにしますと 9999まで客先が増えても対応できます。

    • @semickycom0119
      @semickycom0119 3 роки тому

      @@ちからえもん
      ご返信ありがとうございます。
      なるほど、やり方は様々ということなんですね。
      色々試してみます!
      早急なご返信ありがとうございました!

  • @user-us8ph2lm3t
    @user-us8ph2lm3t 2 роки тому

    ありがと

  • @takeshisatohallowclub6508
    @takeshisatohallowclub6508 Рік тому

    [Alt]keyの発音気になります。[Alt] alternate [ɔ'ːltɚnət]が一般的かなぁ。

    • @ちからえもん
      @ちからえもん  Рік тому

      どちらかといえば オ なんですね。勉強になりました。

  • @ネロ-v6s
    @ネロ-v6s 2 роки тому

    客先や品番を入力せずに登録した時にエラーの状態のものがシートに反映されてましたが、これって不細工ではないですか?

    • @ちからえもん
      @ちからえもん  2 роки тому +1

      動画の23分あたりに、 そのような処理を書いています。以下のような処理です。ご参照ください。
      '客先が選択されていない場合の処理
      If UserForm1.ComboBox1.Text = "選択してください" Then
      MsgBox "客先を選択してください"
      Exit Sub
      End If
      '品番が選択されていない場合の処理
      If UserForm1.ComboBox2.Text = "選択してください" Then
      MsgBox "品番を選択してください"
      Exit Sub
      End If

    • @ネロ-v6s
      @ネロ-v6s 2 роки тому

      @@ちからえもん 様
      それはそれは、大変失礼いたしました。
      ほぼ同じようなワークシートを使用しておりますので、参考にさせていただきます。
      ありがとうございました。

  • @micobmhbc3659
    @micobmhbc3659 Рік тому

    すみません、教えてください。
    20:00辺りの、各『Cells(row_no,3)= 〜』のように真似て作成しているのですが、実行時エラー'1004'として、同箇所に黄色くハイライトされ、何が違うのかが分かりません…。
    何かいただけるヒントはありますか?

    • @ちからえもん
      @ちからえもん  Рік тому +1

      こんにちは
      chikaraemon.com/wordpress/2022/01/22/howtomake_userform/
      こちらにソースコードを載せていますので、それを貼り付けてみてください。

    • @micobmhbc3659
      @micobmhbc3659 Рік тому

      @@ちからえもん
      サイトをお持ちだったのですね。お返事も早々に、本当に有り難いです✨
      熟読&間違い探しします。もう一度チャレンジするモチベーションをいただきました!
      ご親切に本当に有難うございました。

    • @micobmhbc3659
      @micobmhbc3659 Рік тому

      @@ちからえもん
      お世話になります。一生懸命、、何度も、、トライするも未だ成功しません…。
      ↓こちらは、サンプルとして抜き出しだ一部分です。単純にこれだけでは分からないかとは思いますが、このあとには「単価*数量=金額」的なところにも続けたいのですが、「登録」ボタンを押しても、当該セルに反映されないため、まだそこまでも到達できません。。
      他に何か考えられるケース?障壁?にお心当たりはありますでしょうか?
      稚拙な質問で申し訳ありません…。
      ー----------
      Private Sub btn登録_Click()
      '登録ボタン
      Dim row_no As Long
      Cells(row_no, 2) = UserForm.cmb2
      Cells(row_no, 3) = UserForm.txt3
      Cells(row_no, 4) = UserForm.cmb4
      End Sub

    • @ちからえもん
      @ちからえもん  Рік тому

      @@micobmhbc3659それはそれは、お疲れ様です。
      まず、フォームの部品名ですが、私の動画では、UserForm1としています。あなた様が作成されているフォームのオブジェクト名はUserformですか?私の動画は以下のように記載しています。テキストボックス等のオブジェクト名も私は以下のようにしています。
      Cells(row_no, 2) = UserForm1.TextBox1
      Cells(row_no, 3) = UserForm1.ComboBox1
      Cells(row_no, 4) = UserForm1.ComboBox2
      シンプルに
      Cells(row_no, 2) ="あいうえお"として
      セルに「あいうえお」が登録されるのか
      試してみてください。

    • @micobmhbc3659
      @micobmhbc3659 Рік тому

      @@ちからえもん
      いつも早々のご対応有難うございます。
      まず、フォーム名は確認しました。ブログ内のコードをコピペさせていただいた際に、私がひとつずつ1を消していったものです。
      また、"あいうえお"も同様にデバッグとしてハイライトされてしまいます…💧

  • @user-bm7kv1iw7x
    @user-bm7kv1iw7x 2 роки тому

    VBA初心者です。動画の通りに客先を選択出来るようにコードを書いてるのですがコンパイルエラーが出てユーザーフォームの実行が出来ません。何回やり直してもです。何故でしょうか?

    • @ちからえもん
      @ちからえもん  2 роки тому

      概要欄の私のブログにソースコードがあります。まずは、そのコードをコピペしてみてください。

    • @user-bm7kv1iw7x
      @user-bm7kv1iw7x 2 роки тому

      @@ちからえもん ありがとうございます。

  • @竹村竜星-l8u
    @竹村竜星-l8u 2 роки тому

    空白の場合は無視して次の行にいけるようになりませんか?

    • @ちからえもん
      @ちからえもん  2 роки тому

      最終行をきめて、if文で空白でなかったら、処理をする。空白であったら、無視するを 決めた最終行までするようにすれば出来ます。

  • @PeaceOkinawa_Lee
    @PeaceOkinawa_Lee 2 роки тому

    すみません、ユーザーフォームのテキストボックスに特定の日付に、例えば20220106を入力したら自動的に2022/01/06に変化してくれる方法はありますか?

    • @ちからえもん
      @ちからえもん  2 роки тому +2

      こんばんわ
      Private Sub TextBox1_Change()
      If IsNumeric(TextBox1.Text) = True And Len(TextBox1.Text) = 8 Then
      TextBox1.Text = Left(TextBox1.Text, 4) & "/" & Mid(TextBox1.Text, 5, 2) & "/" & Mid(TextBox1.Text, 7, 2)
      End If
      End Sub
      このようにしたら、20220106となったら 2022/01/06 と変換してくれますよ。

    • @ちからえもん
      @ちからえもん  2 роки тому +1

      ご覧いただけますと分かるかと思いますが、テキストボックスに入力された値が数値であって 且 8文字であれば、
      左から4文字 + "/" + 左から5文字目から2文字分 +  "/" + 左から7文字目から2文字分となります。

    • @PeaceOkinawa_Lee
      @PeaceOkinawa_Lee 2 роки тому

      こんばんは!ご回答ありがとうございます!やはりLen の関数ですね😳isNumeric初めて使います!もし数字だったらって意味ですかね🤔
      調べてきます!ご回答とても助かりました✨🙌ありがとうございます

  • @Leon-Leon
    @Leon-Leon 3 роки тому

    出納帳を作っているのですが、入力ミス防止に入力ホームを使いたいと思っています、
    宜しくお願い致します、

    • @ちからえもん
      @ちからえもん  3 роки тому

      こんばんわ。
      出納帳とは、
      月日、科目、摘要、収入、支出、残高 の項目が有り、
      科目には、 
       支払・・・消耗品費、旅費交通費、交際費
       収入・・・売上高、普通預金
      のようなものが有り、
      これらをユーザーフォームで実現されたいということでしょうか?

    • @Leon-Leon
      @Leon-Leon 3 роки тому

      @@ちからえもん これから作る予定です、入力ホームなしのもの作っていました!

    • @ちからえもん
      @ちからえもん  3 роки тому +2

      @@Leon-Leon 分かりました。頑張ってください。
      ニーズもありそうですので、出納帳の動画でも作ろうかな?

  • @mintlover8527
    @mintlover8527 Рік тому

    これって、直接入力するのと何が違うんですか?

    • @ちからえもん
      @ちからえもん  Рік тому

      😅あくまで ユーザーフォームの使用例の動画ですが、違いとしては、
      直接入力の場合、長い会社名、長い商品名、商品コード などのヒューマンエラーによる入力間違いが起こりえますが、ユーザーフォーム内で選択することにより、そのような間違いを防止します。また、直接入力の場合、最下行まで手動で移動するようなことも発生しますが、VBAで最下行を自動的に取得します。
      直接入力よりも作業時間は短縮できるかと思います。
      まあ、実務的に利用するには、シートに直接入力を不可にして、ユーザーフォームからしか 登録・更新ができないようにするのが良いです。

  • @user-ih8tz5xr3i
    @user-ih8tz5xr3i 2 роки тому

    12:36