• ベストアンサー

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/17068)
回答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

  • ユーザーフォームのリストボックスの設定を標準モジュール内で取得した配列

    ユーザーフォームのリストボックスの設定を標準モジュール内で取得した配列にしたい。 題名のままの説明ですが、ユーザーフォームのリストボックス値を配列にして動的に動作させるようにしたいのですが、標準モジュールでPublicで配列を宣言しているのですが、うまくユーザーフォームモジュールに渡っていないというか、その配列変数をユーザーフォームモジュール内に書くと配列が存在しません。 というエラーが出てしまいます。 かといってユーザーフォームでPublicで配列を宣言することもできないのでどうやってリストボックスに 配列を設定すればいいのかわかりません。 配列は2次元配列で視覚的に説明するとは列数が3行、行数は標準モジュール内でRedimにより可変します。この配列をそのままレコードセットみたいにリストボックスに設定したのですが、 なにか良い方法はありますでしょうか?

  • リストボックスの列見出し(ExcelのVBA)

     ExcelのVBAでのリストボックスコントロールについての質問です。  リストボックスの列見出しを作りたいのですが、なかなか上手く行きません。リストボックスに項目を設定するのはExcelのシートから… ----- WorkSheets("Sheet1").ListBox1.ListFillRange = "A1:B2"  ↑(Sheet1のA1:B2のデータをListBox1に追加する場合)↑ ----- のようにするのではなく… ----- Dim MyList(1,1) ~~~(MyList配列にデータを代入) Userform1.ListBox1.Column = Mylist() -----  というように、コードから項目を追加しています。  そこで、列見出しを追加したいと思ったのですが… ----- ListBox1.ColumnHeads = True ----- と記述しても、列見出しは真っ白で、その下に項目が表示されるだけです。  列見出し専用の配列を用意しなければならないというような事はあるのでしょうか?  もしあれば、どのように定義すればよいのでしょうか。  ちなみに、用いているExcelの環境は『Microsoft Excel 2004 for Mac (11.5.6)』、VBAの環境は『Microsoft Visual Basic (11.5)』です。  我流で覚えてきたような知識ですので、とても常識的な事を聞いているかもしれないですが、回答宜しくお願いします。

  • エクセルVBAでフォームのListboxのリストの数を取得するには?

    ワークシート上に貼り付けたリストボックスがあります。 このリストボックスはOLEObjectではなくフォームのリストボックスです。 このリストボックスにリストが何項目セットされているのか取得したいのです。 Set myLb = ActiveSheet.ListBoxes(Application.Caller) MsgBox myLb.Name MsgBox myLb.ListIndex.Count とやってみたところ、名前は取得できましたが、項目数はエラーになってしまいました。 あと、可能ならListの2番目にセットされている項目の文言を取得する方法もあれば知りたいと思います。 宜しくお願いします。

  • Excelリストボックスについて

    ExcelVBAのリストボックスで質問!! (1)列に項目名称をつけたいのですが、どうすればよいでしょうか? ちなみにリストの値は別ファイルかVBAにくみこみたいと思っています。 (2)ホイール(マウス)によるスクロールは行えないのでしょうか?方法があれば教えてください。

  • エクセル VBAのリストボックス

    エクセルのVBAでユーザーフォーム上のリストボックスに文字を入力すると候補がドロップダウンリストに表示され、候補から一つを選択するとドロップダウンリストをとじるといったコードを教えてください。ただし、最終的にリストボックスの値はリストから選ぶのみで、文字を入力するのは候補を表示するためだけに使いたいのです。どなたか、ご教授願います。

  • エクセルVBAのリストボックス

    エクセルVBAのリストボックスを使った検索システムを作っています。 リストボックスはユーザーフォームではなくsheetに貼り付けてます。 リスト地域 北海道 青 森 岩 手 山 形 新 潟  ・  ・  ・ リストボックスから地域(複数選択)を選んで検索ボタン(コマンドボタン)を押すと同じsheetの特定の場所(例えばrange("A25")に選択した地域を表示させたいのですがうまくいきません。 例) 北海道、東京、愛知 のように表示させたいです。 単数選択ではうまく表示できるのですが、複数だとうまくいきません。 (複数選択できるようにプロパティのMultiSelectの項目はfmMultiselectMultiに変更しています。) よろしくお願いします。

  • 複数行表示されたリストボックスから最後の行だけ削除するには

    エクセルのユーザーフォーム上にあるリストボックスですが 必要に応じてボタンクリックでAddItemにより項目が追加されて行くリストボックスがあります この複数行表示された項目の内 別のボタンクリックで最後に追加された行だけ削除していくには どのように記述すればいいのでしょうか ------------- abcde fghij klmno pqrst ------------ と表示されていたリストボックスから クリックするたびに ------------- abcde fghij klmno ------------- ------------- abcde fghij ------------- の様に最後の行だけ削除をしたいのです 単純に ListBoX1.Clear では全て消されてしまい こまっています ぜひお力をお貸し下さい よろしくお願いします

  • リストボックスからユーザーフォームへのリンク方法

    ユーザーフォーム0に貼り付けてあるリストボックスに表示された項目からその項目ごとに見合った別のユーザーフォームにとびたいのですが、うまくいきません。 例えば リストボックスに 『算数 国語』 とあったとしたら算数をクリックすると算数の問題が表示されたユーザーフォームにとび、国語をクリックしたら国語の問題が表示されたユーザーフォームにとぶようにしたいです。 リストボックスの項目からユーザーフォームにとべる方法を教えてください。

  • エクセル2013のリストボックス

    エクセル2010でワークシート上に配置したリストボックスがあります。 ActiveXではなくフォームコントロールのリストボックスです。 これに11項目のリストを設定してあります。 2010ではまったく問題がないのですが、エクセル2013で開くと下の2項目が選択できません。 2010と2013では互換性がないのでしょうか?

  • リストボックスに追加

    リストボックスに項目を使う時にAddItemをつかいますよね。でも、AddItemをつかうと下に下にと追加されていってしまいます。これを上に上に追加していきたいのですがどうすればいいのでしょうか?

SQLの数値への単位について
このQ&Aのポイント
  • SQLの数値への単位付け方と修正方法を教えてください
  • SQLでのcmやkgの単位付け方とUPDATE DELETEの実行方法について教えてください
  • SQLの数値への単位付け方とUPDATE DELETEの実行方法について教えてください
回答を見る

専門家に質問してみよう