- ベストアンサー
VBAユーザーフォームについて質問
- エクセルのユーザーフォームでコンボボックスで選択した値に応じてテキストボックスの内容を別のセルに転記したいです。
- プルダウン選択せずにテキストボックスに数字を入力した場合にエラーメッセージを表示したいです。
- VBAのコードを一部載せます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>星の部分がいまいちどのようにコードにすればよいかわかりません >ちなみに行は変数で指定はしていません。 '// Ifの次はElseが普通ですが、 '// TextBox1が未入力の場合に備えて、ElseIf '// にしています。未入力のケースを忘れるのが多いです。 If TextBox1.Text = "01" Then Cells(11, retu).Value = Me.仮1.Value ElseIf TextBox1.Text = "02" Then Cells(12, retu).Value = Me.仮2.Value End If '// TextBox1の場合分けが多い場合は、 '// 次のような書き方が有効です Select Case TextBox1.Text Case "01" Cells(11, retu).Value = Me.仮1.Value Case "02" Cells(12, retu).Value = Me.仮2.Value Case "03" Cells(13, retu).Value = Me.仮3.Value Case "04" '// 同様に続ける Case Else '// 未入力やおかしなデータへの対応です。 '// Elseが必要と思っている人は少ないですね。 '// 1行空行を作って、処理は書かないでいいでしょう。 End Select でしょうか。TextBox1は、01、02を入力するテキストボックス名です。 エディタに打ち込んだだけです。スペルミスなどがあるかもしれません。 Excel VBAの勉強をされているそうですが、 Excel VBA 入門講座へようこそ!! http://excelvba.pc-users.net/ MOUGモーグ https://www.moug.net/tech/exvba/ などを見られてはどうでしょうか。急がば回れです。 ご参考に。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
画像も出てないし、やりたいことがはっきりしない。 「マルチメディアファイルは削除されたか見つかりません。」 ーー 小生が、勝手に想像して作ってみた。 質問者のコードや既回答と違うので、良くも悪くも参考になるのでは。 ーー ・ユーザーフォームを1つ挿入。(操作) ・そこにテキストボックスを1つ貼り付け(操作) ・またコンボボックスを1つ貼り付け(操作) ・そこにアイテムを2つ追加 (VBA)デザインモードでのユーザーフォームのコードの表示をクリックして出る画面に) Private Sub UserForm_Initialize() UserForm1.ComboBox1.AddItem "01" UserForm1.ComboBox1.AddItem "02" End Sub ・コマンドボタンを1つ貼り付け。(操作) フォームへの入力が(1人分)終わったことをしらせるため、必要かと思う。 ・コマンドボタンのクリックイベント(VBA)デザインモードでのコマンドボタンをダブルクリックしてして出る画面に) Private Sub CommandButton1_Click() ’MsgBox UserForm1.ComboBox1.Text Select Case UserForm1.ComboBox1.Text Case "01" Range("A11") = UserForm1.TextBox1.Text Case "02" Range("A12") = UserForm1.TextBox1.Text End Select End Sub == 実行について Sub/UserFormの実行 シートにユーザーフォームが現れる。 テキストボックスに「山田」と入力 コンボボックスで「01」を選択 コマンドボタンをクリック A11に「山田」がセットされる ーー ’次に テキストボックスに「佐藤」と入力 コンボボックスで「02」を選択 コマンドボタンをクリック A12に「佐藤」がセット == 雑感 >if文を使うのだろうと思う いろいろあずぜよ。わざとCaseにした。 >Meキーワードについて Googleで検索して、よく勉強してください。 「excel vba Meキーワード」」 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12134815137 私は、今のところなるべく使わない。 ーーー 質問者は、そばに指導者が居ないようで、なんとなく危なっかしい感じ。
- nishi6
- ベストアンサー率67% (869/1280)
元の転記する行を「gyou = 4」としています。 TextBox1に入力があれば、01、02に対応して、11、12行に書き込みます。 TextBox1に入力がない時どうしたいか書いてないので、初期値の「gyou = 4」の4行目を使いました。コード中のコントロール名は実情に合うように変更してください。 Dim retu As Integer Dim gyou As Integer retu = Cells(3, Columns.Count).End(xlToLeft).Column + 1 gyou = 4 '// 元の書き込む行(何か定義してる?) If ComboBox1.ListIndex = -1 Then MsgBox "選択していませんよ" Else If TextBox1.Text = "01" Then gyou = 11 ElseIf TextBox1.Text = "02" Then gyou = 12 End If Cells(gyou, retu) = "書きたいデータ" End If
補足
回答いただきましてありがとうございます。もう1点質問なのですが Cells(3, retu).Value = Me.txtComboBox1.Value ←社員を選択 Cells(4, retu).Value = Me.txtsuzuki.Value ←売れた件数 Cells(5, retu).Value = Me.txttoyota.Value ←売れた件数 Cells(6, retu).Value = Me.txthonnda.Value ←売れた件数 *Cells(11, retu).Value = Me.仮1. Value *Cells(12, retu).Value = Me.仮2.Value 星の部分がいまいちどのようにコードにすればよいかわかりません^^; ちなみに行は変数で指定はしていません。 ご回答いただけましたら大変助かります。よろしくお願い申し上げます。
- nishi6
- ベストアンサー率67% (869/1280)
>テキストに入力した数字は、01を選択したら11行、02を選択したら12行に転記できるようにしたい どの列に入力するか書かれていないので、retuとし、テキストをTextBox1とすると、 Dim rw As Long Const retu = 2 If ComboBox1.ListIndex <> -1 Then If ComboBox1.Text = "01" Then rw = 11 ElseIf ComboBox1.Text = "02" Then rw = 12 End If Cells(rw, retu) = TextBox1.Text End If でしょうか。質問の意味を把握できていない気がします」。 >テキストボックスに数字だけ入力して、プルダウン選択してないとエラ~メッセージも出るようにしたいです テキストボックスとは、コンボボックスの選択窓のことでしょうか。 コンボボックスのStyleプロパティが「fmStyleDropDownCombo」の場合、Listにないデータを入力できます。Listからのみの選択にする場合は「fmStyleDropDownList」にする必要があります。 fmStyleDropDownLisにしています。未選択は、ListIndexでチェックしています。 If ComboBox1.ListIndex = -1 Then MsgBox "選択していませんよ" Else MsgBox ComboBox1.Text & "を選択しました" End If
補足
回答ありがとうございます! 質問が下手で申し訳ありません。 イメージ画像を追加しておきます。 ちなみに列は変数で宣言しております。 retu = Cells(3, Columns.Count).End(xlToLeft).Column + 1 1つのテキストボックスに選択により さらに転記するセルを変えたいのです。 01だとしたら、11行 02だとしたら12行 よろしくお願いします
お礼
色々と丁寧に教えてくださりありがとうございます。