• 締切済み

エクセルVBAユーザーフォーム「テキストボックス」「コンボボックス」の書式設定について

ユーザーフォームを作成して、出荷実績を投入しようとしています。 現在、ユーザーフォームを作成して、 上から以下のようにボタンが並んでいます。 (1)コンボボックス1  商品コードと商品名を選択する。 (2)テキストボックス1~7  地域ごとの出荷実績を投入する。 (3)コマンドボタン1  決定→入力 (4)コマンドボタン2  終了 そして、以下3つの問題点がありますが、どのようにVBAを記述したら良いのか、わかりません。  a.コンボボックス1に表示される商品を商品コード   (アルファベット)と商品名で改行したい。   つまり「折り返して全体を表示する」ことは出来ないでしょうか。  b.「AAAA~」は5行目・「CCCC~」は7行目 といった   ように、商品ごとに値を投入する行を変更したい。  c.テキストボックス1~6の内容の合計が自動で(入力している   最中に)テキストボックス7に表示されるようにしたい。 次のようなVBAは記述出来たのですが、上記3つの要素を加えるには どのようにしたらよいのか、教えていただけないでしょうか? ちなみに入力する順番は次のようになっています。(設定済み) M4→L4→J4→K4→H4→I4 →M5→L5→J5→K5→H5→I5 ------------------------------------------------------------- ’フォームを表示させる。 Sub formdsp() UserForm1.Show End Sub ’フォーム内容 Dim cnt As Integer Private Sub Combobox1_Change() End Sub '入力ボタン Private Sub CommandButton1_Click() With ActiveSheet .Cells(cnt, 13) = TextBox1.Text .Cells(cnt, 12) = TextBox2.Text .Cells(cnt, 10) = TextBox3.Text .Cells(cnt, 11) = TextBox4.Text .Cells(cnt, 8) = TextBox5.Text .Cells(cnt, 9) = TextBox6.Text .Cells(cnt, 15) = TextBox7.Text cnt = cnt + 1 .Cells(cnt, 13) = Activate End With UserForm1.TextBox1.Text = "" UserForm1.TextBox2.Text = "" UserForm1.TextBox3.Text = "" UserForm1.TextBox4.Text = "" UserForm1.TextBox5.Text = "" UserForm1.TextBox6.Text = "" UserForm1.TextBox7.Text = "" UserForm1.Combobox1.Text = "" UserForm1.TextBox1.SetFocus End Sub '終了ボタン Private Sub CommandButton2_Click() Unload Me End End Sub 'コンボボックス Private Sub userform_initialize() cnt = 4 With UserForm1.Combobox1 .AddItem "AAAA 11111111111" .AddItem "BBBB 22222222222" .AddItem "CCCC 333333333" .AddItem "DDDD 444444" .AddItem "EEEE 5555555555" .AddItem "FFFF 666" .AddItem "GGGG 7777777" .AddItem "HHHH 88888" .AddItem "IIIII 999999999" .AddItem "JJJJ 0000000000000" .AddItem "KKKK 1111" .AddItem "LLLL 222222" .AddItem "MMMM 3333" End With End Sub

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

M列やL列にデータが入ることは,最初のご質問のマクロにそう書いてありますので判ります。 そして同様に,あなたが掲示されたマクロにはもう一つ, 再掲: >入力するごとにシートの入力行を+1ずつしている という事が書いてあったので,お尋ねしたのです。 追加ご質問: >コンボボックスで選択された商品の情報を参考に >数値を入力するセルの行を変えたい 転記する行を+1ずつ下げていくのはもう全くやめにして,コンボボックスでこれを選んだら何行に転記すると,完全に固定してしまいたいという事ですか。 それならそれでお話は簡単で, #コンボボックスに,各データごとに何行に入れるというデータも持たせておく手もありますが 簡単にはまず今のcnt + 1している行は消して+1行ずつ下げるのは全くやめにして, その代わりに例えば select case combobox1.text  case "AAAA 11111111111"   cnt = 4  case "EEEE 5555555555"   cnt = 8  case else end select のように「コンボボックスでこのデータが選ばれているから転記先は4行目だ8行目だ」と数字を入れるのを,入力ボタンのマクロに書き込んでおけば良いです。 【重要な注意】 もちろん上記に書いたのはAAAAとEEEEの2つだけのサンプルですから,これだけコピーしても当然駄目です。もっとあなたが実際にコンボボックスに詰めた全ての全部の上から下までのデータについて,漏れなくマクロを書き足してくださいね。 >上のVBAを私が作成したVBAにそのまま加えてみたら… 当たり前です。 再掲: >3.テキストボックスの 『1から6それぞれに』 afterupdateなどを取り付けて, >具体的に、どのように記入したらよいのか教えていただけないでしょうか。 具体的なサンプルマクロは既にお話ししました。 まぁ,テキストボックス1で上手く動くのが確認できたので,まずは良しとしましょう。 同じ書きぶりで2から6についても作成してください。 折角ここまでご自分で作成されたのですから,今更丸投げで人に代わりに全部全部全部作って貰ったマクロを美味しくいただいて終わりにするんじゃなく,もうちょっとご自分でもね? そのために,わざわざイベントの種類や調べ方もお話ししましたが,その様子ですと全部スルーだったのでしょうね。きっと。

donald1982
質問者

補足

TextBoxのイベントを確認しても、どのように書式を設定したら よいのか理解できませんでした。 マクロを使い始めて数か月。 独特のマクロの記述方法を理解できていません。 詳しく紹介されている良いサイトや本などはありませんか?

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

1.コンボボックスの表示を折り返すことは出来ません。 2.今はどうやら入力するごとにシートの入力行を+1ずつしているようですが,ちなみに「5行目」「6行目」とはもうちょっとエクセル上の姿としてどこの事を言ってるのですか?  文字通りにとらえるとcntを+1するのではなく「ある行数単位」ずつ足し上げていき,「何々の時はcnt+5行」「これこれの時は+7行」のように作り込んでいくような事かなと思いますが。 3.テキストボックスの1から6それぞれにafterupdateなどを取り付けて,逐一合計を取ってはテキストボックス7に記入していきます。 簡単なサンプル: private sub TextBox1_AfterUpdate()  dim i  dim res  for i = 1 to 6   res = res + val(me.controls("TextBox" & i).value)  next i  textbox7 = res end sub その際,実際には >自動で…表示されるようにしたい 「自動」ってもうちょっと具体的に一体何をどんなタイミングでどうしたときにそうしたいのかに応じて,どのイベントを使うのか選びます。 それこそテキストボックスに「1文字書き入れるたびに」更新をかけるような事だって,それが必要なら出来ます。 具体的に一体何が出来るのか,オブジェクトブラウザでTextBoxを見て配下のイベントを確認し,それぞれのヘルプを熟読して検討してみて下さい。

donald1982
質問者

補足

>2.今はどうやら入力するごとにシートの入力行を+1ずつしているようですが,ちなみに「5行目」「6行目」とはもうちょっとエクセル上の姿としてどこの事を言ってるのですか?  文字通りにとらえるとcntを+1するのではなく「ある行数単位」ずつ足し上げていき,「何々の時はcnt+5行」「これこれの時は+7行」のように作り込んでいくような事かなと思いますが。 値を入力する列は以下のようにしています。 (1) M(テキストボックス1の値) (2) L(テキストボックス2の値) (3) J(テキストボックス3の値) (4) K(テキストボックス4の値) (5) H(テキストボックス5の値) (6) I(テキストボックス6の値) (7) O(テキストボックス7の値) そして、"AAAA 11111111111"が選択されたら (1) M4(テキストボックス1の値) (2) L4(テキストボックス2の値) (3) J4(テキストボックス3の値) (4) K4(テキストボックス4の値) (5) H4(テキストボックス5の値) (6) I4(テキストボックス6の値) (7) O4(テキストボックス7の値) そして、"EEEE 5555555555"が選択されたら (1) M8(テキストボックス1の値) (2) L8(テキストボックス2の値) (3) J8(テキストボックス3の値) (4) K8(テキストボックス4の値) (5) H8(テキストボックス5の値) (6) I8(テキストボックス6の値) (7) O8(テキストボックス7の値) といったように、列の順番は固定して、 コンボボックスで選択された商品の情報を参考に 数値を入力するセルの行を変えたいと思っています。 >簡単なサンプル: private sub TextBox1_AfterUpdate()  dim i  dim res  for i = 1 to 6   res = res + val(me.controls("TextBox" & i).value)  next i  textbox7 = res end sub ●上のVBAを私が作成したVBAにそのまま加えてみたら 何回かテキストボックス1の値がテキストボックス7の合計欄に 入りました。しかし、毎回、値が合計欄に入るわけではなく、 テキストボックス2~6の値も反映されません。 サンプルの「TextBox1」の数値を2~6まで変えて、計7つの サンプルをVBAに加えてみても、合計欄に結果が反映されません。 具体的に、どのように記入したらよいのか教えていただけないでしょうか。

関連するQ&A

  • ユーザーフォームに入力したデーターが転記できない

    いつもお世話になります。 Windows7 excell2010 です。 いろんなものに勉強してここまでに作成したユーザーフォームですが、データーは入力できるのですがコマンドボタンをクリックしても各セルに反映されません。 色々と試行錯誤していますがうまくゆきません。 どこに不具合があるかわからず恐れ入りますがどなたかご指導いただけませんか。 参考にコードは参考に下記にします。 ユーザフォームのVBAは下記です コード ※Module1 Sub 売上() Do UserForm1.Show Loop End Sub Sub 入金() Do UserForm2.Show Loop End Sub ※UserForm1 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "1" .AddItem "2" .AddItem "3" End With End Sub Private Sub CommandButton1_Click() n = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(n, 2) = UserForm1.TextBox1.Text Cells(n, 3) = UserForm1.TextBox2.Text Cells(n, 4) = UserForm1.TextBox3.Text Cells(n, 11) = UserForm1.ComboBox1.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub ※UserForm2 Private Sub CommandButton1_Click() n = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(n, 2) = UserForm2.TextBox1.Text Cells(n, 3) = UserForm2.TextBox2.Text Cells(n, 4) = UserForm2.TextBox3.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub

  • エクセルVBA コンボボックスの値の転記

    エクセルVBAの質問です。 ユーザーフォームを表示し 年を選択するコンボボックス1 月を選択するコンボボックス2 を入力してもらい ユーザーフォームを閉じるときに sheet1のワークシートのC2セルに 「コンボボックス1の値」+「年」+と「コンボボックス2の値」+「月」をつなげて 入力できるというようなマクロを考えています。 下記の様に考えてみたのですが、 うまく入力できませんでした。 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "2021" .AddItem "2022" .AddItem "2023" .AddItem "2024" End With With ComboBox2 .AddItem "1" .AddItem "2" .AddItem "3" .AddItem "4" .AddItem "5" .AddItem "6" .AddItem "7" .AddItem "8" .AddItem "9" .AddItem "10" .AddItem "11" .AddItem "12" End With Private Sub CommandButton1_Click() 'ユーザーフォームを閉じる Unload UserForm1 'ユーザーフォームの値をセルC2に入力 With Worksheets("sheet1") .Cells(2, 3).Value = "ComboBox1.Text" & "月" & "ComboBox2.Text" & "日" End With End Sub どのように修正すればいいでしょうか? よろしくお願いします。

  • エクセルVBAのコンボボックス

    エクセル2002使用です。 生年月日とかを入力できるコンボボックスを作っているのですが、同じコンボボックスを5つ作ろうとしています。例えば和暦を入力するには Private Sub userform_initialize() With ComboBox(1) .AddItem "昭和" .AddItem "平成" End sub でうまくいくのですが、2個目から5つ目まで同じものを作成する場合、 With ComboBox(2) ・・・ With ComboBox(3) ・・・ と、コードを記述していかないと駄目なのでしょうか? できれば With ComboBox(1: 5) とか、 変数を使って Private Sub userform_initialize() Dim i As Integer For i = 1 To 5 With ComboBox(i) .AddItem "昭和" .AddItem "平成" End With Next End sub といった具合にまとめたいのですが、コンパイルエラーとなってしまいます。 初歩的な質問で申し訳ないのですが、よろしくお願いします。

  • VBA コンボボックスのコード記述位置について

    初心者です。初歩的な質問でお恥ずかしいのですが、コンボボックス用のコードを 記述するには「Private Sub UserForm_Initialize()」の下に記述するしかないのでしょうか。 例えば、縦長のユーザーフォームに上からコンボボックス1、コマンドボタン、コンボボックス2を 配置した場合、コードの記述をコンボボックス1の処理、コマンドボタンの処理、コンボボックス2の処理と、順番通りに記述することは出来るのでしょうか? 現在はこのようにコードを記述しています。 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "赤色" .AddItem "青色" .AddItem "黄色" End With With ComboBox2 .AddItem "緑色" .AddItem "黒色" .AddItem "紫色" End With End Sub Private Sub CommandButton1_Click() MsgBox "テスト" End Sub 本当であれば、下記のように順番通りに記述したいです。 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "赤色" .AddItem "青色" .AddItem "黄色" End With End Sub Private Sub CommandButton1_Click() MsgBox "テスト" End Sub With ComboBox2 .AddItem "緑色" .AddItem "黒色" .AddItem "紫色" End With End Sub With ComboBox2の上に、必要なコードを記述すればできるのでしょうか。 ご教示下さい。

  • Private Sub UserForm_Init

    いつもお世話になります。 Windws7 excell2010 です。 同一のシートに二つの「Private Sub UserForm_Initialize()」があるときにどう名前を変えればまたはどうすればいいかご指導願えませんか。 「Private Sub UserForm_Initialize()」が一つの時はE5のようにうまく作動してくれます。 E列に 売上の 「回収」のリスト Private Sub UserForm_Initialize() F列に 何時の 「売掛月」のリスト(1~12の数字) Private Sub UserForm_Initialize() A列に =IF(B2="","",TEXT(B2,"mm")) 参考に下記します。 ~1 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "振込" .AddItem "現金" .AddItem "小切手" End With End Sub ~2 Private Sub UserForm_Initialize() With ComboBox2 .AddItem "10" .AddItem "11" .AddItem "12" End With End Sub '**************** '設定 '**************** Private Sub CommandButton1_Click() y = 2 Do While Cells(y, 2) <> "" y = y + 1 Loop Cells(y, 2) = TextBox1.Text Cells(y, 3) = TextBox2.Text Cells(y, 4) = TextBox3.Text Cells(y, 5) = ComboBox1.Text Cells(y, 6) = ComboBox2.Text UserForm2.TextBox1.Text = "" UserForm2.TextBox2.Text = "" UserForm2.TextBox3.Text = "" UserForm2.ComboBox1.Text = "" UserForm2.ComboBox2.Text = "" UserForm2.TextBox1.SetFocus End Sub

  • EXCEL VBA 多種のコンボボックス操作

    こんばんは。 現在ユーザーフォーム上に10個のコンボボックスを配置しています。 1-8は共通リストを、9と10は別々のリストを表示させたいのですが・・ Private Sub UserForm_Initialize() Dim X, No, Y As Integer With UserForm2 For No = 1 To 8 For X = 0 To 7 .Controls("ComboBox" & No).AddItem Worksheets("Letter").Cells(X + 1, 10).Value Next Next For Y = 0 To 7 .ComboBox9.AddItem Worksheets("Letter").Cells(Y + 1, 11).Value .ComboBox10.AddItem Worksheets("Letter").Cells(Y + 1,12).Value Next End With End Sub 上記のコードですが、エラーが出てどうにも行き詰っています。 Private Sub UserForm_Initialize() Dim X, No As Integer For No = 1 To 8 For X = 0 To 7 UserForm2.Controls("ComboBox" & No).AddItem Worksheets("Letter").Cells(X + 1, 10).Value Next Next End Sub ↑だと1-8まで問題なく動くのですが・・・ すみませんが、アドバイスお願いいたします。

  • コンボボックスにリストが表示されません・・・

    ユーザーフォーム(UserForm)にコンボボックス(ComboBox1)を作ってリストを入れました。 しかしユーザーフォームを実行してもコンボボックスに何もリストが出てきません。 なにが悪いのでしょうか?チュートリアルどおりにやっているのですが・・・(T T) Private Sub UserForm_Initialize() With ComboBox1 .AddItem "東京" .AddItem "名古屋" .AddItem "福岡" End With End Sub Windows2000+Excel2000です。

  • Excel VBAでコンボボックスで選択

    コンボボックスで選択したいと思っていますがうまくいきません。 教えてください。 Private Sub userform_initialize()  With ComboBox2   .Font.Size = 12   .AddItem "A"   .AddItem "B"   .AddItem "C"  End With If ComboBox2 = "A" Then  With ComboBox3   .Font.Size = 12  .AddItem "a-1"  .AddItem "a-2"  End With ElseIf ComboBox2 = "B" Then With ComboBox3   .Font.Size = 12  .AddItem "b-1" .AddItem "b-2" End With Else: ComboBox2 = "C" With ComboBox3 .Font.Size = 12 .AddItem "c-1" .AddItem "c-2" End With End If End Sub コンボボックス2で"A"を選んだら、コンボボックス3には"a-1とa-2"の選択したい のですが、"c-1,c-2"しかでません。よろしくお願いします。

  • エクセルのマクロ コンボボックス他について

    下記のプログラムでユーザーフォームを作成しました。 まったく同じ記述で、他のブックでは、最終処理として、所定の箇所に選択した記号が表示(コピー)されるのですが、このブックでは表示されません。 しかし、エラーは出ていないので文法的には合っているようにおもいます。 それだけに、どこが違うのか尚更わかりません。 なお、Unload UserForm1 を Unload UserForm にした場合、 Sheets("基本データ作成").Range("C3") = UserForm1.ComboBox1.Value の UserForm1 を UserForm にした場合、 「実行時エラー424、オブジェクトが必要です。」のエラーが出ます。 どこが悪いのかわかりません。 どなたか、教えてください。 なお、エクセルは2003、OSはXPです。 Private Sub ComboBox1_Change() End Sub Private Sub ComboBox2_Change() End Sub Private Sub ComboBox3_Change() End Sub Private Sub CommandButton1_Click() Unload UserForm1 Sheets("基本データ作成").Range("C3") = UserForm1.ComboBox1.Value Unload UserForm1 Sheets("基本データ作成").Range("C4") = UserForm1.ComboBox2.Value Unload UserForm1 Sheets("基本データ作成").Range("C5") = UserForm1.ComboBox3.Value End Sub Private Sub UserForm_initialize() With ComboBox1 .AddItem "U" .AddItem "K" .AddItem "E" End With With ComboBox2 .AddItem "A" .AddItem "B" .AddItem "C" End With With ComboBox3 .AddItem "D" .AddItem "E" .AddItem "F" End With End Sub

  • 同じコンボボックスを二つ以上作る方法

    今同じ内容を表示するコンボボックスを二つ作ろうと思っているのですがつくり方がわかりません。 どのようにすれば一つのプログラムで二つのコンボボックスを作れるのでしょうか 例: 表示では はい いいえ プログラム: Private Sub UserForm_Initialize() ComboBox1.AddItem "はい" ComboBox1.AddItem "いいえ" End Sub Private Sub UserForm_Initialize() ComboBox2.AddItem "はい" ComboBox2.AddItem "いいえ" End Sub ↑のような作り方ではなく簡略化して Private Sub UserForm_Initialize() ComboBox●.AddItem "はい" ComboBox●.AddItem "いいえ" End Sub ●部を変更できれば一つのプログラムでコンボボックスを2つ操作できると思うのですがどのようにすればよろしいでしょうか?

専門家に質問してみよう