AddItem登録している複数の値をセルに張り付ける方法

Excel-VBA リストボックス

エクセルでユーザーフォームのリストボックスに項目登録にAddItemを使った場合に、セルに記載したいと思ったことはありませんか?

セルからリストボックスは一般的ですが、この逆のパターンはちょっと頭を悩ましますが、すぐにできますよ。

記載したいセル番地=ListBox番号 List(番号)

スポンサーリンク

リストボックスの値が1列の場合

VBAコードを使ってセルに記載する方法と同じで、セル番地=リスト番号で簡単にAdditem登録された値や項目をセルに記載することができます。

注意することは、リストボックスの一番最初の行のAddItemは1行目ではなく「0」行目になることぐらいです。

それでは、実際にVBAコードを使ってAdditem登録した値や項目をセルに書き写してみましょう。

1か所のセル・1つのAddItem

リストボックスを使っていてこのような使用例はないと思いますが、基本なので記載します。

VBAコード

Private Sub CommandButton1_Click()
Sheets(“リスト”).Range(“A1”).Value = ListBox1.List(0)
End Sub

VBA解説
  1. コマンドボタン1がクリックされたら
  2. シート名「リスト」のセル「A1」にリストボックス1の最初に書いてあるリストを記載する
  3. マクロ記録終了

この場合、5行目のAddItemを記載するならばList(4)となります。

2か所のセル・2つのAddItem

こちらも実用例としてはあまりないと思いますが、2か所書き写したい時に記載するVBAコードです。

VBAコード

Private Sub CommandButton1_Click()
With Sheets(“リスト”)
Range(“A1”).Value = ListBox1.List(0)
Range(“A2”).Value = ListBox1.List(1)
End With
End Sub

VBAコード
  1. コマンドボタン1がクリックされたら
  2. シート名「リスト」に対して処理を行う
  3. セル「A1」にリストボックス1の最初に書いてあるリストを記載する
  4. セル「A2」にリストボックス1の2番目に書いてあるリストを記載する
  5. Withステートメント終了
  6. マクロ記録終了

Sheets(“リスト”).Range(“A1”).Value = ListBox1.List(0)の部分を2行にしてもいいのですが、Withステートメントを使う事により、同じ内容(ここではSheets(“リスト”))に対して記載を省略できるので使用しています。

このように2つ以上ある場合に何行も繰り返して記載してもいいのですが、エクセルが重くなる原因となるので、繰り返し処理を使う事をおススメします。

複数のセル・複数のAddItem

リストボックスなので実用的なのが複数のAddItem登録されて値や項目を、セルにまとめて記載することの方が多いと思います。

ここでは繰り返し処理のFor~Nextを使用して一括してAdditemに登録した20個の値をセルA1~A20へそれぞれ記載します。

VBAコード

Private Sub CommandButton1_Click()
For i = 1 To 20
With UserForm1
Sheets(“リスト”).Cells(i, 1).Value = ListBox1.List(i – 1)
End With
Next i
End Sub

VBA解説
  1. コマンドボタン1がクリックされたら
  2. 繰り返し処理の変数「i」を宣言して、1~20まで繰り返す
  3. ユーザーフォーム1に対して処理を行う
  4. シート名「リスト」のセル「i行目の1列目」(セルA列)の値は、リストボックス1のリスト「i番目-1」(0列目=最初の値)とする
  5. Withステートメント終了
  6. マクロ記録終了

繰り返し処理を行うと短いVBAコードでセルA1に最初のAddItemを記載して、次にA2に2番目のAddItemと順番に20回繰り返してくれるので、一瞬で書き写すことができます。

とりっぷぼうる
とりっぷぼうる

一般的に For~Next を使う時にここでは、変数「i」に対して「データ型」(文字や英数字など)指定せずに使っています。

Excel2009から2016までは問題なく動作しています。

ちなみに指定する場合は「Dim i As データ型の種類」をForの前に入れます。

スポンサーリンク

リストボックスが2列の場合

リストボックスの初期設定は1列になっていますが、2列で使う事も可能です。

内容が重複するので2列利用の設定方法は下記をご覧くださいませ。

参考までに、複数のセル・複数のAddItemで2列目の値をセルに記載させるには、行と同じくリストボックスの最初の列が「0」なので、「1」とすれば可能になります。

Sheets(“リスト”).Cells(i, 1).Value = ListBox1.List(i – 1,1)

赤字の部分を付け加えるだけでリストボックスの2列目の値を取得してセルに記載してくれますので、簡単ですよ!