この記事ではVBAマクロでリストボックスの値を取得し、複数列や全ての値を指定セルに貼り付ける方法について解説していきます。
ポイントとしてはListBox.List、Value、Offset、Join関数を使用することです。
なお、マクロ初心者でもわかりやすいように変数名をaaaaa変数aaaaaといった名称にしています。
そのため、あなた自身がご活用の際には、ここを適切な(英語表記でしっくりくるものが一般的)ものに変更してご活用くださいね。
それでは詳しく見ていきましょう!
VBAマクロのリストボックスの値を複数列取得し指定セルに貼り付ける方法【リストボックス内2から4列目を指定し取得し、シート1のC3セルを先頭で貼り付け】
それではまず、VBAマクロのリストボックスの値を複数列取得し指定セルに貼り付ける方法について解説していきます。
Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。
Sub aaaaaGetListBoxValueaaaaa()
Dim aaaaaListBoxValueaaaaa As Variant
Dim aaaaaStartCellaaaaa As Range
Dim aaaaaRowaaaaa As Long
'リストボックス内の2列目から4列目の値を2次元配列で取得
aaaaaListBoxValueaaaaa = ListBox1.List(0, 1, ListBox1.ListCount - 1, 3)
'シート1のC3セルを貼り付け開始セルとして設定
Set aaaaaStartCellaaaaa = Sheets("シート1").Range("C3")
'リストボックスの行数分繰り返し
For aaaaaRowaaaaa = 0 To UBound(aaaaaListBoxValueaaaaa)
'リストボックスの値を1行ずつ貼り付け
aaaaaStartCellaaaaa.Offset(aaaaaRowaaaaa, 0).Resize(1, 3).Value = aaaaaListBoxValueaaaaa(aaaaaRowaaaaa)
Next aaaaaRowaaaaa
End Sub
コードのAlt+F8を押し、マクロ選択画面でaaaaaGetListBoxValueaaaaa関数を実行します。
このコードではまず、ListBox1.List関数を使って、リストボックス内の2列目から4列目の値を2次元配列aaaaaListBoxValueaaaaaとして取得しています。
次に、シート1のC3セルを貼り付け開始セルaaaaaStartCellaaaaaとして設定しています。
そして、リストボックスの行数分だけFor Nextループを回し、Offset関数とResize関数を使って、リストボックスの値を1行ずつ、aaaaaStartCellaaaaaから下方向に貼り付けています。
VBAマクロのリストボックスを全て取得しアクティブセルを先頭に1行ずつ貼り付ける方法【Value、Offset】
続いては、VBAマクロのリストボックスを全て取得しアクティブセルを先頭に1行ずつ貼り付ける方法について解説していきます。
Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。
Sub aaaaaGetAllListBoxValueToEachCellaaaaa()
Dim aaaaaStartCellaaaaa As Range
Dim aaaaaRowaaaaa As Long
'アクティブセルを貼り付け開始セルとして設定
Set aaaaaStartCellaaaaa = ActiveCell
'リストボックスの項目数だけ繰り返し
For aaaaaRowaaaaa = 0 To ListBox1.ListCount - 1
'リストボックスの値を1行ずつ貼り付け
aaaaaStartCellaaaaa.Offset(aaaaaRowaaaaa, 0).Value = ListBox1.List(aaaaaRowaaaaa)
Next aaaaaRowaaaaa
End Sub
コードのAlt+F8を押し、マクロ選択画面でaaaaaGetAllListBoxValueToEachCellaaaaa関数を実行します。
このコードではまず、アクティブセルを貼り付け開始セルaaaaaStartCellaaaaaとして設定しています。
次に、リストボックスの項目数だけFor Nextループを回し、List関数とOffset関数を使って、リストボックスの値を1行ずつ、aaaaaStartCellaaaaaから下方向に貼り付けています。
結果として、VBAマクロでリストボックスの値を全て取得し、アクティブセルを先頭に1セルずつ貼りつけが完了となります!
リストボックスの値を1セルにまとめるのではなく、セルごとに分けて格納したい場合は、このようにList関数とOffset関数を組み合わせると実現できます。
まとめ VBAマクロでリストボックスの値を取得、複数や全て指定セルに貼り付ける方法【ListBox.List、Value、Offset、Join】
用途に合わせて、貼り付け方法を使い分けるのが効果的ですね。