【VBA】リストボックスへ値を追加する&選択した値をクリップボードにコピーする


まずはリストボックスへ値を追加

コンボボックスのときとほぼ一緒ですね。コンボボックスのリストに値を追加する
フォームに適当なリストボックスとボタンを作ります。
リストボックスのMultiSelectプロパティを
2-fmMultiSelectExtended(複数選択可)にしておきます。

今回はこのデータを追加しました。
(人の名前にしようかと思ってたんだけどなんかお腹すいててパンの名前になっちゃった…

Private Sub UserForm_Initialize()
    lstName.Clear 'リストボックス内初期化
    Dim NameCol As Long
    NameCol = WorksheetFunction.Match("名前", Master.Rows(1), 0) '名前列数格納
    Dim LastRow As Long
    LastRow = Master.Cells(Rows.Count, NameCol).End(xlUp).Row '名前列最終行格納
    Dim i As Long
    For i = 2 To LastRow 'リストボックスに名前をすべて格納
        lstName.AddItem Master.Cells(i, NameCol)
    Next i
End Sub

選択した値をクリップボードにコピーする

選択した値を変数に格納

リストボックスの値が選択されていたら変数に格納し、改行を入れます。

クリップボードにコピーする

以前、Win7(Office2010)を仕事で使っていたときにNew DataObjectを使った記憶があるのですが
今回やろうと思ったらうまく動作しませんでした
調べると、テキストボックスを使った書き方が出てきて、
それを使ってみたら正常に動作しました。
「テキストボックスをフォームに作るってこと??」って思ったんですが
メモリ上に作成されたテキストボックスに文言を入れてそれをコピーするということらしいです!

Private Sub btnCopy_Click()
    '選択した項目をクリップボードにコピー
    Dim i As Long
    Dim ListDate As String 'リストボックスで選択した値を格納する変数

    For i = 0 To lstName.ListCount - 1 'リストボックスで選択した値を改行しながら変数に格納
        If (lstName.Selected(i)) Then
            ListDate = ListDate & lstName.List(i) & vbCrLf
        End If
    Next i

    'メモリ上のテキストボックスにListDateを格納する
    With CreateObject("Forms.TextBox.1")
      .MultiLine = True 'テキストボックスの複数行入力を許可
      .Text = ListDate '変数をテキストに格納
      .SelStart = 0 'テキストの0文字目以降
      .SelLength = .TextLength 'テキストすべてを
      .Copy 'クリップボードにコピーする
    End With
End Sub

【実行結果】
リストボックスに値が入って選択できました。

コピーボタンを押すとクリップボードにコピーされ
セルやメモ帳などに貼り付けられました。

ワタシ流こだわり

リストボックスを複数選択可能にするとき、MultiSelectプロパティはいつも、
ctrlで複数選択できる2-fmMultiSelectExtendedです。
1-fmMultiSelectMultiも複数選択可能ですが選択解除するとき選択したものをもう一度選択しなければなりませんので。
1-fmMultiSelectMultiを使うのってどんなときなんだろ?
こういう時に使うといいよっていうのあったら教えて下さい

ちなみにワタシはパンよりお米が好きです