エクセルVBAユーザーフォーム作り方、シートとユーザーフォーム間でデータ情報の設定・取得、comboBox、textBox、addItem実例
続編作りました2022年1月30日。エクセルVBAユーザーフォームの入門チュートリアルです。
UserFormにラベルやテキストボックス、コンボボックスを貼りつけて、コンボボックスにはシートの情報を取得します。
シートの客先、品番をコンボボックスにAddItemで追加します。
コンボボックスで選択された品番の商品名、単価をシートのテーブルから取得します。この処理はVLOOKUP的ですね。
テキストボックスには個数を入力しますが、数字以外を入力すると警告が表示されます。
登録ボタンを押すと、シートにユーザーフォームの情報を転記します。
挿入箇所は最下行の下の行となりますので、forループで最下行を取得する方法も学習できます。
Withステートメントやもっと合理的な方法もありますが、基本的なプログラミンを理解していただくためのコードを記載しています。
「エクセルVBAで簡単に!インボイス&軽減税率対応のユーザーフォーム・適格請求書作成Excelアプリ」教材を作成しました。
¥1,500 で購入できるクーポンリンクです。有効期限 2024/08/05 13:05 PDTまでの限定価格です。
↓
www.udemy.com/course/vba-invo...
こちらブログに当動画のコードを記載しました。コピペして動作確認可です。
chikaraemon.com/wordpress/202...
続編作りました2022年8月11日。ユーザーフォーム変更とキャンセル。シートの注文登録内容を取得してユーザーフォームに渡す。変更した注文情報をシートの該当行の情報を書き換えます。今更の続編でUserForm1の部品コードを再利用します。
• ユーザーフォーム変更とキャンセル。シートの注...
請求書版として続編作りました2022年1月30日。このユーザーフォーム作り方の受注明細を客先毎に請求を発行する動画です。よろしければご覧くださいね。
• エクセルVBAで客先毎の請求書。ユーザーフォ...
バイトシフト表 レギュラー曜日、休む日、臨時出勤対応 VBA動画
• バイトシフト表をエクセルVBAマクロで作成。...
健康管理 複数人数対応 ログイン機能付き エクセルVBA動画
• エクセルVBAでログイン機能付き体温・健康状...
部活動保護者登板表 エクセルVBA動画
• エクセルVBAで部活動保護者当番表を作成しま...
VLOOKUP関数をVBAで表現
• EXCEL VLOOKUP関数をVBAで表現
VLOOKUP関数に検索フォームを追加
• EXCEL VLOOKUP関数に検索ユーザー...
Пікірлер: 78
VBA初心者です。 実用的に応用できることを丁寧に解説されていて、非常に参考になります。 今後もVBA動画、楽しみにしています。
@user-in5rz4lt9m
3 жыл бұрын
ご連絡ありがとうございます。とても励みになります。 今後ともよろしくお願いいたします。
この短い時間の説明で、わかりやすく解説して頂きありがとうございます。
@user-in5rz4lt9m
3 жыл бұрын
このようなコメントをいただき、私も嬉しく思います。今後ともよろしくお願いいたします。
まさにやりたい事をそのまま動画にしていただけて助かりました!感謝しかない!
@user-in5rz4lt9m
Жыл бұрын
おはようございます。コメントありがとうございます!
VBA初心者です。ユーザーフォームに関して、とても分かりやすい動画で参考になりました。
@user-in5rz4lt9m
2 жыл бұрын
コメントありがとうございます!
VBA初心者ですが、分かりやすくて勉強になりました。
@user-in5rz4lt9m
3 жыл бұрын
コメントありがとうございます。今後ともよろしくお願いします!
すごくわかりやすかったです! ありがとうございます。
@user-in5rz4lt9m
Жыл бұрын
コメントありがとうございます!
ちょうどマクロの勉強していたので助かります!
@user-in5rz4lt9m
2 жыл бұрын
ありがとうございます!
はじめまして。通りがかりです。 シンプルかつ分かりやすく、実用的なコードなので、 即実践で使えそうです。フォームは苦手意識がありましたが、明日から使ってみます。 チャンネル登録しました。Excel VBAの動画を楽しみにしています。
@user-in5rz4lt9m
2 ай бұрын
コメントありがとうございます!!!😊
すげ〜ーー勉強になります
@user-in5rz4lt9m
Жыл бұрын
良かったです。ありがとうございます!
ありがと
何日も探してやっとこのやり方ゲットした。本当にありがとうございます。もし、シート2のデータが外部のデータの場合のやり方も是非教えて頂けると嬉しいです。
@user-in5rz4lt9m
3 жыл бұрын
ご連絡ありがとうございます。お役に立ててよかったです! 外部のデータというのは、他のエクセルファイルということでしょうか?
これはすごい
@user-in5rz4lt9m
2 жыл бұрын
コメントありがとうございます。
@user-xg5je8tj4l
2 жыл бұрын
@@user-in5rz4lt9m いやそりゃすごいよ
初心者です。 上司からのリクエストがまさにこれです。 ここにくるまでいろんな動画見ました。 もうできないか?とあきらめかけたところ まさに ありがとう😊ございます。 そして告知されているもの 是非是非 アップお願いいたします。 それまでが私の知りたいことです。 よろしくお願いいたします。
@user-in5rz4lt9m
2 жыл бұрын
コメントありがとうございます!そうですね、気長に待っててください。盆休みくらいに頑張ってつくろうと思います。
@user-yq5do7tg3v
2 жыл бұрын
@@user-in5rz4lt9m 是非よろしくお願いします。 本当お願いします
@user-in5rz4lt9m
Жыл бұрын
@@user-yq5do7tg3v こんにちわ。続編としてユーザーフォームの変更とキャンセルの機能をアップしました。 kzread.info/dash/bejne/nplnwZSkedezgdI.html
@user-yq5do7tg3v
Жыл бұрын
@@user-in5rz4lt9m ありがとうございます。早速勉強いたします。😃
お世話になります 動画大変参考になりました。 知識が浅くて申し訳ございませんが、もしコンボボックスの表示項目が 重複表示の場合、どうすれば良いでしょうか? 例えば動画の客先と品番の間の欄に“分類”とゆうコンボボックスの欄を入れ、 分類の欄の項目を選択し、下の品番の欄に連動して、品番の欄の選択項目を絞りたい場合、 どうすればよろしいでしょうか? 現在勉強中で初心者で、質問内容が伝わりずらかったらすみません。 お手数をおかけして、申し訳ございませんが、設定する事は可能でしょうか?
@user-in5rz4lt9m
3 жыл бұрын
ご連絡ありがとうございます。はい、出来ます。 分類を 鉛筆、ボールペン、定規、その他 とします。 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 とでもしておけば選択された分類に応じて絞られると思います。 ?はコンボボックス名です。
@user-ww8tj4ps7w
3 жыл бұрын
ご返信ありがとうございます😊 勉強になりました。 早速試してみます。 早急のご返信誠にありがとうございました。
VBA初心者です。質問失礼します。 現在勉強中で知識が浅く、質問内容が伝わりづらかったら申し訳ないです。 客先コンボボックスの内容は、参照先のN2:N5のデータをテーブルに変えれば、 客先が新しく増えたとしても自動で追加することは可能でしょうか。
@user-in5rz4lt9m
3 жыл бұрын
ご連絡ありがとうございます。 そのような方法もあるかと思います。 私はアナログチックですので、 古典的に for i= 3 to 9999 if cells(i,14)="" then exit for end if combobox1.additem cells(i,14) next i とします。 そのようにしますと 9999まで客先が増えても対応できます。
@semickycom0119
3 жыл бұрын
@@user-in5rz4lt9m ご返信ありがとうございます。 なるほど、やり方は様々ということなんですね。 色々試してみます! 早急なご返信ありがとうございました!
分かりやすい説明ありがとうございます。 チャンネル登録し何度何度も見て勉強しております。 質問ですが、「個数を入力」し「登録ボタン」を押すと「指定するセルに転記」されるのですが 転記されたセルの数値が「テキスト形式かアポストロフィで始まっています」となります。 今は、転記されたセルをひとつひとつ数値に変換しているのですが、面倒なのでどうにかなりませんかね~?
@user-in5rz4lt9m
2 жыл бұрын
こんにちわ。 チャンネル登録および何回も再生いただいてありがとうございます。 Cells(row_no, 2) = UserForm1.TextBox1 のCells(row_no, 2)の セルの書式設定は 日付 2012/3/14 です。 Cells(row_no, 3)~Cells(row_no, 8)の セルの書式設定は 標準 です。 転記されるシートのセルの書式設定はどのようになっていますか?
@chibi-chibi9137
2 жыл бұрын
コンボボックスやテキストボックスから取得した値は、 「文字列」になりますので、 数値として扱いたい場合は、 val関数で囲う必要があります。 val(ComboBox1.text)
大変分かりやすく丁寧な内容で感謝しております。 教えて頂きたいのですが、シートに登録した段階で日付が文字列扱いになってしまいフィルターで日付が拾えません。 日付セルをダブルクリックか区切り位置調整すると日付型になりますが、登録段階で日付型にする方法を教えて頂きたいのですが よろしくお願いします。
@user-gn6qw6cp1v
11 ай бұрын
お騒がせしました Cells(row_no, 2) = UserForm1.TextBox1.Value 書き込み時に数値変換でいいみたいですね。
@user-in5rz4lt9m
11 ай бұрын
コメントありがとうございます。そうですか、よかったです!
本当に助かりました!有難うございます。 再生と停止を繰り返し、一緒に作成してました。 大変勉強になりました。 動画内では、コンボボックスの参照先を「Cells」とされていましたが、私は別のワークシートをマスター用に作成して、セルの指定したいのですが、その場合のコーディングを教えていただけないでしょうか。。 恐らく簡単なことなのだろうと思うのですが、仕事のため独学(見様見真似)で作成している素人です…。 どうかお力をお貸しいただけますと幸いです🙇
@user-in5rz4lt9m
Жыл бұрын
こんばんわ コメントありがとうございます。 シート 「マスター」 にデータがあるとします。 そのデータを参照するには、 Sheets("マスター").Cells(i, 2) のように cells(i,2)の前に Sheets("マスター"). を付ければ良いだけですよ。
@micobmhbc3659
Жыл бұрын
やはり超初歩レベルなことですよねw 何の知識もないと、この( )や.の使い方が分からず、こんな小さなことにも躓きます。。 ですが、これだけでも他に応用が利きそうですし、本当に有り難いです。 早速チャレンジしてみたいと思います。 早々且つご親切な返信有難うございました!
すみません、ユーザーフォームのテキストボックスに特定の日付に、例えば20220106を入力したら自動的に2022/01/06に変化してくれる方法はありますか?
@user-in5rz4lt9m
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 と変換してくれますよ。
@user-in5rz4lt9m
2 жыл бұрын
ご覧いただけますと分かるかと思いますが、テキストボックスに入力された値が数値であって 且 8文字であれば、 左から4文字 + "/" + 左から5文字目から2文字分 + "/" + 左から7文字目から2文字分となります。
@PeaceOkinawa_Lee
2 жыл бұрын
こんばんは!ご回答ありがとうございます!やはりLen の関数ですね😳isNumeric初めて使います!もし数字だったらって意味ですかね🤔 調べてきます!ご回答とても助かりました✨🙌ありがとうございます
VBA初心者です。動画の通りに客先を選択出来るようにコードを書いてるのですがコンパイルエラーが出てユーザーフォームの実行が出来ません。何回やり直してもです。何故でしょうか?
@user-in5rz4lt9m
2 жыл бұрын
概要欄の私のブログにソースコードがあります。まずは、そのコードをコピペしてみてください。
@user-bm7kv1iw7x
2 жыл бұрын
@@user-in5rz4lt9m ありがとうございます。
出納帳を作っているのですが、入力ミス防止に入力ホームを使いたいと思っています、 宜しくお願い致します、
@user-in5rz4lt9m
3 жыл бұрын
こんばんわ。 出納帳とは、 月日、科目、摘要、収入、支出、残高 の項目が有り、 科目には、 支払・・・消耗品費、旅費交通費、交際費 収入・・・売上高、普通預金 のようなものが有り、 これらをユーザーフォームで実現されたいということでしょうか?
@Leon-Leon
3 жыл бұрын
@@user-in5rz4lt9m これから作る予定です、入力ホームなしのもの作っていました!
@user-in5rz4lt9m
3 жыл бұрын
@@Leon-Leon 分かりました。頑張ってください。 ニーズもありそうですので、出納帳の動画でも作ろうかな?
客先や品番を入力せずに登録した時にエラーの状態のものがシートに反映されてましたが、これって不細工ではないですか?
@user-in5rz4lt9m
2 жыл бұрын
動画の23分あたりに、 そのような処理を書いています。以下のような処理です。ご参照ください。 '客先が選択されていない場合の処理 If UserForm1.ComboBox1.Text = "選択してください" Then MsgBox "客先を選択してください" Exit Sub End If '品番が選択されていない場合の処理 If UserForm1.ComboBox2.Text = "選択してください" Then MsgBox "品番を選択してください" Exit Sub End If
@user-lt6ui8gr4t
2 жыл бұрын
@@user-in5rz4lt9m 様 それはそれは、大変失礼いたしました。 ほぼ同じようなワークシートを使用しておりますので、参考にさせていただきます。 ありがとうございました。
すみません、教えてください。 20:00辺りの、各『Cells(row_no,3)= 〜』のように真似て作成しているのですが、実行時エラー'1004'として、同箇所に黄色くハイライトされ、何が違うのかが分かりません…。 何かいただけるヒントはありますか?
@user-in5rz4lt9m
Жыл бұрын
こんにちは chikaraemon.com/wordpress/2022/01/22/howtomake_userform/ こちらにソースコードを載せていますので、それを貼り付けてみてください。
@micobmhbc3659
Жыл бұрын
@@user-in5rz4lt9m サイトをお持ちだったのですね。お返事も早々に、本当に有り難いです✨ 熟読&間違い探しします。もう一度チャレンジするモチベーションをいただきました! ご親切に本当に有難うございました。
@micobmhbc3659
Жыл бұрын
@@user-in5rz4lt9m お世話になります。一生懸命、、何度も、、トライするも未だ成功しません…。 ↓こちらは、サンプルとして抜き出しだ一部分です。単純にこれだけでは分からないかとは思いますが、このあとには「単価*数量=金額」的なところにも続けたいのですが、「登録」ボタンを押しても、当該セルに反映されないため、まだそこまでも到達できません。。 他に何か考えられるケース?障壁?にお心当たりはありますでしょうか? 稚拙な質問で申し訳ありません…。 ー---------- 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
@user-in5rz4lt9m
Жыл бұрын
@@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
Жыл бұрын
@@user-in5rz4lt9m いつも早々のご対応有難うございます。 まず、フォーム名は確認しました。ブログ内のコードをコピペさせていただいた際に、私がひとつずつ1を消していったものです。 また、"あいうえお"も同様にデバッグとしてハイライトされてしまいます…💧
空白の場合は無視して次の行にいけるようになりませんか?
@user-in5rz4lt9m
2 жыл бұрын
最終行をきめて、if文で空白でなかったら、処理をする。空白であったら、無視するを 決めた最終行までするようにすれば出来ます。
[Alt]keyの発音気になります。[Alt] alternate [ɔ'ːltɚnət]が一般的かなぁ。
@user-in5rz4lt9m
Жыл бұрын
どちらかといえば オ なんですね。勉強になりました。
12:36
これって、直接入力するのと何が違うんですか?
@user-in5rz4lt9m
Жыл бұрын
😅あくまで ユーザーフォームの使用例の動画ですが、違いとしては、 直接入力の場合、長い会社名、長い商品名、商品コード などのヒューマンエラーによる入力間違いが起こりえますが、ユーザーフォーム内で選択することにより、そのような間違いを防止します。また、直接入力の場合、最下行まで手動で移動するようなことも発生しますが、VBAで最下行を自動的に取得します。 直接入力よりも作業時間は短縮できるかと思います。 まあ、実務的に利用するには、シートに直接入力を不可にして、ユーザーフォームからしか 登録・更新ができないようにするのが良いです。