こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

エクセル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

投稿日時 - 2010-03-31 22:47:05

QNo.5793522

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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についても作成してください。

折角ここまでご自分で作成されたのですから,今更丸投げで人に代わりに全部全部全部作って貰ったマクロを美味しくいただいて終わりにするんじゃなく,もうちょっとご自分でもね?
そのために,わざわざイベントの種類や調べ方もお話ししましたが,その様子ですと全部スルーだったのでしょうね。きっと。

投稿日時 - 2010-04-01 07:39:11

補足

TextBoxのイベントを確認しても、どのように書式を設定したら
よいのか理解できませんでした。

マクロを使い始めて数か月。
独特のマクロの記述方法を理解できていません。

詳しく紹介されている良いサイトや本などはありませんか?

投稿日時 - 2010-04-17 16:28:37

ANo.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を見て配下のイベントを確認し,それぞれのヘルプを熟読して検討してみて下さい。

投稿日時 - 2010-03-31 23:51:46

補足

>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に加えてみても、合計欄に結果が反映されません。

具体的に、どのように記入したらよいのか教えていただけないでしょうか。

投稿日時 - 2010-04-01 05:13:19

あなたにオススメの質問