3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-09-09

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

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

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

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を使った記憶があるのですが
今回やろうと思ったらうまく動作しませんでした:sweat:
調べると、テキストボックスを使った書き方が出てきて、
それを使ってみたら正常に動作しました。
「テキストボックスをフォームに作るってこと??」って思ったんですが
__メモリ上に作成されたテキストボックスに文言を入れてそれをコピーする__ということらしいです!

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

【実行結果】
リストボックスに値が入って選択できました。
image.png
コピーボタンを押すとクリップボードにコピーされ
セルやメモ帳などに貼り付けられました。
image.png

ワタシ流こだわり

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

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

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?