• ベストアンサー

Excel VBA でリストボックスへ行追加について

お世話になります。 ExcelVBAで、ユーザフォーム表示のときに、リストボックスにデータを追加します。 その際、追加したいアイテムが項目数3の配列なのです。 配列もユーザ定義した配列(2次元配列)を使っています。 配列を作って、.List=Array でセットしようと思ったのですが、コンパイルエラーが出ます。 どうしたらよいでしょうか。 説明がわかりにくいかもしれませんが、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

質問を100%理解しているとは思いませんが質問内容をコード化?してみました。 最後に書いている、『リストボックスに渡すVariant型の配列を作る』ことが必要ではないでしょうか。 質問がこういう意味かよく分かりませんが・・・。ご参考に。 '/// 標準モジュール Module1 < Excel97 Type ListData     'ユーザー定義型変数   strA As String   strB As String   strC As String End Type '/// UserForm1 Dim myData() As ListData      'ユーザー定義型変数 Dim num As Integer         'リスト行数-1 Dim myArray() As Variant      'リストデータ Private Sub CommandButton2_Click() '/// 例として、CommandButton2を押すと下の事柄を実行します。   '2つのユーザー定義型変数に値をセット   num = 1   ReDim Preserve myData(num) As ListData     myData(0).strA = "AAA1": myData(0).strB = "BBB1": myData(0).strC = "CCC1"     myData(1).strA = "AAA2": myData(1).strB = "BBB2": myData(1).strC = "CCC2"   'ユーザー定義型変数を1つ増やし、値をセット   'ユーザー定義型変数の個数が変動するようなので書いただけです。   num = 2   ReDim Preserve myData(num) As ListData     myData(2).strA = "AAA3": myData(2).strB = "BBB3": myData(2).strC = "CCC3"   'リストボックスに渡す配列の再宣言   ReDim myArray(num, 2)    '列は3列なので→0,1,2   Dim c As Integer      'カウンタ   '***** リストボックスに渡すVariant型の配列を作る *****   For c = 0 To num     With myData(c)       myArray(c, 0) = .strA       myArray(c, 1) = .strB       myArray(c, 2) = .strC     End With   Next   'リストボックスに登録   ListBox1.Clear   ListBox1.List = myArray End Sub

cat_tomato
質問者

お礼

回答ありがとうございます。 ちゃんとやりたいようにできました。 本当に助かりました。 ありがとうございました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

下記3・4あたり補足していただいたほうが 答えやすい人が多いのでは。 (1)ExcelVBAとありますので、VBではなく、エクセルなんですよね。この部分はVBAでなくても、(フォームじゃなく)ツールバーのコントロールツールボックスのリストボックスを貼り付け、プロパティウィンドウをだし、ColumnCountを3とかにして、 BoundColumnを決め、LinkedCellを きめ、ListFillRangeにシート上のA1:C4とかを設定すれば済むように思います。これを VBAで設定することも出来ます。(マクロの記録では出ませんが) 本式フォームでなくても、罫線等消せばシートもフォーム らしくなります。 (2)リストボックスにデータを追加します-->一旦出来た リストボックスに実行時に追加(AddItem)したいのか、実行当初に設定したいと言うことを追加といったのかどちらでしょうか。 (3)項目数3の配列--->ColumnCount列数が3と言うことでしょうか、行数・要素数が3でしょうか。 (4)配列を作って、.List=Array でセットしようと-->AddItemを繰り回したくないと言うことですか。 ここのコーディング部分を掲示されては。すれば識者は 答えてくれるでしょう。 (5)コンパイルエラーが出ます--->VBAでコンパイルは行われるのですか。実行時エラーのことでは。

cat_tomato
質問者

補足

回答ありがとうございます。 補足できる部分を補足していきます。 1.RowSorceプロパティでは設定できないリストです。 (データを判定してからセットしています。) 2.毎回データを判定してセットするので、Clearしてから新たにデータをセットします。 AddItemでは配列をセットできないようです(やりかたが悪い?) 3.ColumnCountが3という意味です。 4.ユーザ定義型で、標準モジュールに Type ListData strA As String strB As String strC As String End Type このように定義し、ReDim Preserve で配列追加をしてから、一気にセットしています。 5.コンパイルエラーのメッセージは 「パブリック オブジェクト モジュールで定義されたユ ーザ定義型に限り、変数に割り当てることができ、実行時バインディングの変数に渡すことができます。」と出ます。 よろしくお願い致します。

関連するQ&A