プロが教えるわが家の防犯対策術!

エクセルVBAのユーザーフォームで、コンボボックスで選択したものをコマンドボタンを押すことで、同じフォーム上のテキストボックスに表示するところまではできたのですが、同じテキストボックスに追記する形でコンボボックスで選択したものを表示したいのですが、可能でしょうか。テキストボックスは複数行表示できるようにプロパティのMultiLineはTlueに設定することはしたのですが、2回目以降コンボボックスで選択した後コマンドボタンを押してもそのまま上書きするようなコードしかわかりません。
テキストボックスに、20回目まで選択項目を追加表示し、最後にはエクセルのシートにそのデータをコピーしたいのです。果たして、そのようなことは可能でしょうか。可能であればどのように記述すればよいのでしょうか。ぜひ諸先輩方のお知恵をお貸しください。よろしくお願いします。

A 回答 (4件)

現在のプログラムがどうなっているのか記述してほしい。



基本的には、コンボボックス.textをテキストボックス.textに追記するだけだと思いますのでできると思います。

text1.text = text1.text + combo1.text

位の式を入れてやればいいのではないかな。
    • good
    • 0
この回答へのお礼

ありがとうございます。
コードはごく単純に、

text.1.value=combo1.value

のような記述しか思いつきませんでした。
教えていただいた+で続ける記述ですと改行せずに
テキストボックスに続いて表示されてしまいました
うーんまったくの初心者なのでなぜだかもわかりません・・・

お礼日時:2005/03/30 22:40

txtBox.Text = txtBox.Text & CRLF & cmbBox.Text


でいけそうな気がします。CRLFは改行コードでvbCRなどの定義があるはずです。はっきり覚えていません。
テキストボックスではなく、リストボックスを使うほうがよさそうな気がします。
    • good
    • 0
この回答へのお礼

ありがとうございます。
vbCrの記述でテキストボックス内で
改行されて表示されました!
======
Private Sub CommandButton22_Click()
TextBox17.Value = TextBox17.Value & vbCr & ComboBox5.Value
TextBox18.Value = TextBox18.Value & vbCr & TextBox15.Value
TextBox19.Value = TextBox19.Value & vbCr & TextBox16.Value

End Sub
======
入力はコマンドボックスが1ツ、テキストボックスが2つで
この値が返されるテキストボックスは3つあり、
それぞれのテキストボックスに表示された内容を
打った人が今まで何を何回選んだかがわかるように
テキストボックスに累計で表示したかったのです
最終的には別のコマンドボタンでシート上のセルに各テキストボックス毎に
Text17はA1からA2、A3・・・
Text18はB1からB2、B3・・・
Text19はC1からC2、C3・・・
のようにコピーしたいのです
この改行された行を行ごとにセルにコピーするには
どのようなコードになりますでしょうか
また、この追加表示は最高20回までの追加で止めるには
どのようなコードがいいのでしょう(可能なのかどうかもわかりません)
仕事上どうしても、ユーザーフォーム使ったこの様な
入力を作る必要があり、VBAの専門書を基礎編、応用編
関数コントロール編の三冊買い込んで急遽勉強していますが根本がまだ理解し切れていないので自分では考え付きません。
ぜひよろしくお願いします

お礼日時:2005/03/30 23:02

#2さんも言ってますが、私も ListBox でやる方が楽に思えます。



下記はサンプルです。
試すなら新規ブックの UserForm に ComboBox1 ,ListBox1 ,CommandButton1 を置き、下記をコピペして実行します。
ListBox が5行になるとアクティブセルに転記します。

'--------------------------------------------------------------------
Private Sub UserForm_Initialize()
 For i = 65 To 90
   ComboBox1.AddItem Chr(i) '適当に文字を入れる
 Next i
End Sub
'--------------------------------------------------------------------
Private Sub CommandButton1_Click()
 If ComboBox1.Value <> "" Then ListBox1.AddItem ComboBox1.Value
 If ListBox1.ListCount = 5 Then
   Range(ActiveCell, ActiveCell.Offset(4, 0)) = ListBox1.List
   ListBox1.Clear
 End If
End Sub
    • good
    • 0
この回答へのお礼

大変参考になりました。ありがとうございました。

お礼日時:2005/03/31 08:21

テキストボックスの場合、改行コードも文字としてあつかっているので、区切りを自分で探す必要があります。


リストボックスだとlstBox.Items(i)のように1行ずつを簡単に抜き出すことができます。

エクセルのセルに順にセットするには
for i = 1 to 20
ActiveWorksheet.Range(1,i).Value = lstBox.Items(i)
next
のようになります。

20回までの制限はlstBox.Items.Countで登録済みのデータの数を確認できますので、IF文で判断すればできます。
    • good
    • 0
この回答へのお礼

ありがとうございます。ListBoxにしてやって見ます。大変参考になりました。

お礼日時:2005/03/31 08:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!