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