Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2016)
複数列のリストボックスに、データを配列で格納する方法
投稿日時: 21/02/12 14:14:04
投稿者: ののののの

下記のような2つの配列があります。
 
 myArray1 = Array("春", "夏", "秋", "冬")
 myArray2 = Array("あけぼの", "夜", "夕暮れ", "つとめて")
 
ユーザーフォームのリストボックスが2列あるとして、
1列目にmyArray1,2列目にmyArray2のデータを格納したいです。
 
このとき、1列目については、下記のコードで簡単に
リストボックスへデータを格納できます。
   ListBox1.List = myArray1
 
しかし、同じ要領で、リストボックスの2列目にデータを格納する方法が分かりません。
上記のように1行のコードで実現できる方法がありましたら、ご教授ください。
(左辺で2列目をどのように表せばよいでしょうか?)
 
※For構文などを使用して、複数行のコードであれば、2列目も対応できております。
 
 

回答
投稿日時: 21/02/12 14:53:55
投稿者: simple

2次元配列を作成しておいて、Listプロパティ(もしくはColumnプロパティ)に入れればよいと思います。
(Columnプロパティのヘルプにコード例が載っています。)

回答
投稿日時: 21/02/12 14:59:38
投稿者: K.Hiwasa
投稿者のウェブサイトに移動

1行ではありませんが、比較的簡潔に。
 

Option Explicit
Option Base 1

Private Sub UserForm_Initialize()

  Dim myArray1 As Variant
  Dim myArray2 As Variant
  Dim myArray3(2) As Variant
  
  myArray1 = Array("春", "夏", "秋", "冬")
  myArray2 = Array("あけぼの", "夜", "夕暮れ", "つとめて")
  
  myArray3(1) = myArray1
  myArray3(2) = myArray2
  
  Me.ListBox1.List = WorksheetFunction.Transpose(myArray3)

End Sub

回答
投稿日時: 21/02/12 15:00:30
投稿者: simple

もちろん、一括設定ではなく、.List(i,j)要素に繰り返しで設定することもできるでしょう。

投稿日時: 21/02/12 16:21:01
投稿者: ののののの

>simpleさん、K.Hiwasaさん
 
ご回答ありがとうございます。
とても的確なご回答をいただき、感激しております。
今後とも、どうぞよろしくお願いいたします。
 
 
>simpleさん
 
2次元配列・・・、知識はありましたが、
そのような発想がありませんでした。
 
ご返信を頂いてから、あれこれ試しておりますが、
二次元配列の理解が乏しいため、まだ再現できておりません。
もう少し時間をかければ、解決できると思います。
 
 
>K.Hiwasaさん
1次元配列を2つ取り込んで、Transposeさせる
という発想も、思いつきませんでした。
コードを取り込んで、再現できました。