[[20151008162456]] 『リストを複数選択して一つのセルに表示させたい』(まきるへに) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『リストを複数選択して一つのセルに表示させたい』(まきるへに)

入力規則のリストだと項目が一つしか選択できないですが、それを複数選択したいです。
そして、複数選択した項目を同じセル内に表示させたいです。

元の値が↓だとして
10代女性,10代男性,20代女性,20代男性,30代女性,30代男性,40代女性,40代男性,それ以上,

10代女性と20代女性を選択したら、

10代女性
20代女性

とセル内に表示されるようにしたいのですが、可能でしょうか。
ご教示いただけるとありがたいです。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 リストボックスですと、複数選択可能です。

http://www.excel.studio-kazu.jp/lib/e7a/e7a.html
(カリーニン) 2015/10/08(木) 16:56


 フォームのリストボックスよりもActiveXコントロールのリストボックス
 の方がいいかな。

 プロパティのMultiSelectをfmMultiSelectMultiにして、Changeイベントに
 ↓のように記述してみてください。
 使うイベントやコード内容は工夫の余地がありそうです。

 また、不慣れなので、フォームのリストボックスでも行けるかもしれません。

 Private Sub ListBox1_Change()
  Dim lb As Object
  Dim i As Integer
  Dim r As Range
  Dim rstr As String
   Set r = ActiveSheet.Cells(1, 2)
   rstr = ""
   For i = 0 To Worksheets(1).OLEObjects("ListBox" & 1).Object.ListCount - 1
    If Worksheets(1).OLEObjects("ListBox" & 1).Object.Selected(i) = True Then
       If rstr <> "" Then rstr = rstr & vbLf
       rstr = rstr & Worksheets(1).OLEObjects("ListBox" & 1).Object.List(i)
    End If
   Next i
   If rstr <> "" Then r.Value = rstr
   Set r = Nothing
 End Sub
(カリーニン) 2015/10/08(木) 17:17

 リストからの入力規則選択は、あくまで、リストから【1つだけ】選んでセルに入力する機能ですから無理でしょう。
 カリーニンさん指摘のリストボックスがいいでしょうね。

 追記です。

 フォームコントロールのリストボックスでも複数選択設定ができます。
 ただし、LinkedCell には、選ばれた行の情報が入りませんので、やはり VBA処理が必要です。

(β) 2015/10/08(木) 17:22


お二人ともありがとうございます。

VBA触ったことがないので、どこに何を入れたらいいのか皆目不案内ですが、
これから勉強して入力してみます。
Chargeイベントというのは、コードの表示>Worksheet>chargeで良いでしょうか。

どうやらできそうな方法がある、ということがわかっただけでもありがたいです。
躓いたらまたおうかがいしますので、よろしくお願いいたします。
(まきるへに) 2015/10/08(木) 17:56


 >Chargeイベントというのは、コードの表示>Worksheet>chargeで良いでしょうか。 

 いえ、ListBox1のChangeイベントです。
 シートタブを右クリックしてコードの表示を選んだところに、カリーニンさんがアップされたコードを
 そのままコピペで貼りつければいいですよ。

(β) 2015/10/08(木) 18:03


 見返してみると、私のコードちょいといい加減ですね。

 Activesheet
 と
 Worksheets(1)
 が混在しています。

 また、転記先は

 Set r = ActiveSheet.Cells(1, 2)

 とアクティブシートのB1セルと決め打ちですので、適宜変更する
 必要があります。

 ちょっと修正しました。

Private Sub ListBox1_Change()

  Dim lb As Object
  Dim i As Integer
  Dim r As Range
  Dim rstr As String
   Set r = ActiveCell '転記先/アクティブセル
   rstr = ""
   For i = 0 To ActiveSheet.OLEObjects("ListBox" & 1).Object.ListCount - 1
    If ActiveSheet.OLEObjects("ListBox" & 1).Object.Selected(i) = True Then
       If rstr <> "" Then rstr = rstr & vbLf
       rstr = rstr & ActiveSheet.OLEObjects("ListBox" & 1).Object.List(i)
    End If
   Next i
   If rstr <> "" Then r.Value = rstr
   Set r = Nothing
 End Sub
(カリーニン) 2015/10/08(木) 18:51

 フォームツールを使った例です。

 シートモジュールに以下のマクロをコピペで貼り付けてください。

 フォームツールのリストボックスをシート上に配置し、リストボックスを右クリック、コントロールの書式設定で、
 ListFIllRangeに、リストで表示すべき領域を たとえば A1:A10 といったように指定。
 あわせて 選択の種類として複数選択または拡張選択を選ぶ。

 で、このリストボックスを右クリック、マクロの登録で以下のマクロを登録。

 リストボックスで選択するたびに、アクティブセルに結果を転記します。

 Sub Test()
    Dim s As String
    Dim i As Long

    With ListBoxes("リスト 1")    '★ 実際の名前に変更
        For i = 1 To .ListCount
            If .Selected(i) Then s = s & vbLf & .List(i)
        Next
    End With

    ActiveCell.Value = Mid(s, 2)

End Sub

(β) 2015/10/08(木) 19:24


>カリーニンさん

できました!
ちゃんとひとつのセルに複数選択した項目が入りました!
無理かと思っていたので、感動です。
ありがとうございます。

>βさん

あわせて色々アドバイスありがとうございました。
貼り付け場所も・・。
初歩の初歩の質問にも親切にお答えいただき、感謝です。
おかげで、資料を完成させられそうです!
(まきるへに) 2015/10/09(金) 10:44


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.