- ベストアンサー
VBA初心者のためのリストボックス処理の方法
- VBAでリストボックスの選択値をセルに出力する方法について教えてください。
- 選択した値が一つの場合は、その値をセルに出力するだけで良いですか?
- 選択した値が複数の場合は、値をカンマ区切りでセルに出力する方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
すみません、ちょっと状況が完全に把握できてないのですが、 「リストボックスの複数選択」というと、通常はListBoxのプロパティ MultiSelect を fmMultiSelectMulti か fmMultiSelectExtended に設定し、マウスで複数選択可能にすることなので、リストボックス2がそう設定されていて、選択されたものだけをセルに転記することだと思っていました。 そうではなくて、OKボタンを押した時点で、リストボックス2のどの項目が選択されているかどうかにかかわらず、リストボックス2の項目全てをセルに転記する、ということでよろしいでしょうか? それならば、項目が選択されているかどうかのIf文を外して、以下のようにすればよいかと思います。Sheet1は適切なシート名に変更してください。 Dim i As Integer Dim S As String For i = 0 To ListBox2.ListCount - 1 S = S & ListBox2.List(i) & "、" Next If Len(S) > 0 Then S = Left(S, Len(S) - 1) Worksheets("Sheet1").Range("F14").Value = S
その他の回答 (2)
- ham_kamo
- ベストアンサー率55% (659/1197)
No.1です。補足拝見しました。 ぱっと見たところ、おかしな箇所はないのですが…。 > 実行時エラー9 > インデックスが有効範囲にありません は、どの行で出たのでしょうか? 一番あり得そうなのは、 Worksheets("Sheet1").Range("F14").Value = S のシート名が違っていると上記エラーが出ますが、ここは間違いないでしょうか。
補足
すいませんシート名を変えたらできました!! ありがとうございます。 あとですねこまかいのですが、一つの選択はできますが 複数選択ができないです!! セルにコンマ区切りで出力ができないみたいです。 やりたい処理としまして、リストボックス1の画面で値を選択したら その値がリストボックス2に出力されてOKボタンを押すとリストボックス2にある数(項目)だけリストボックス2内の項目を選択しないでセルにコンマ区切りで出力をしたいのです。 まとめますとリストボックス2に値が入ったらその値をセルにコンマ区切りで出力したいのです。 どうかご教授をお願いします。 何回も質問してもうしわけありません。
- ham_kamo
- ベストアンサー率55% (659/1197)
以下のような感じでどうでしょうか。 Private Sub CommandButton1_Click() Dim i As Integer Dim S As String For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(i) Then S = S & ListBox1.List(i) & "、" End If Next If Len(S) > 0 Then S = Left(S, Len(S) - 1) Worksheets("Sheet1").Range("A1").Value = S End Sub
補足
御教授ありがとうございます。 上のコードで実施しましたところエラーとなってしまいました。 <コード内容> Option Explicit Private Sub btn選択_Click() '選択ボタン ListBox2.AddItem ListBox1.Text End Sub Private Sub btn選択2() ListBox2.RemoveItem (ListBox2.ListIndex) End Sub Private Sub CommandButton1_Click() '削除ボタン ListBox2.RemoveItem (ListBox2.ListIndex) End Sub Private Sub CommandButton2_Click() 'OKボタン Dim i As Integer Dim S As String For i = 0 To ListBox2.ListCount - 1 If ListBox2.Selected(i) Then S = S & ListBox2.List(i) & "、" End If Next If Len(S) > 0 Then S = Left(S, Len(S) - 1) Worksheets("Sheet1").Range("F14").Value = S End Sub Private Sub Label4_Click() End Sub Private Sub ListBox1_DblClick(ByVal cancel As MSForms.ReturnBoolean) 'ダブルクリック(選択) btn選択_Click End Sub Private Sub ListBox2_DblClick(ByVal cancel As MSForms.ReturnBoolean) 'ダブルクリック(削除)ListBox2_DblClick(ByVal cancel As MSForms.ReturnBoolean) btn選択2 End Sub Private Sub UserForm_Initialize() With ListBox1 .AddItem "スケジューラ" .AddItem "データ変換" .AddItem "DWH Server" .AddItem "PPP Server" .AddItem "ファイヤーウォール" .AddItem "暗号オプション" End With End Sub <エラー番号> 実行時エラー9 インデックスが有効範囲にありません このような状態になり動作しません。 お手数おかけしますが御教授をお願い致します。 宜しくおねがいします。
お礼
ham_kamoさん、上記の処理で実施しましたところ私が望んだ処理が 完璧に実現できました!!! まさにこの処理がしたかったわけです。 ほんとに初心者の私に細かく分かりやすく丁寧に教えて 頂き本当に感謝しております。 ham_kamoさんのおかげで間に合いました!!! ありがとうございました!!!!!