• ベストアンサー

ExcelVBA:コードを少なくする方法

例えば、コンボボックスでオブジェクト名が「コンボ1」「コンボ2」「コンボ3」の3つがあったとします。 全てのコンボボックスに「10」「45」「92」のリストを入れたいとき、 With コンボ1 .Additem 10 .Additem 45 .Additem 92 End With というように「コンボ2」「コンボ3」も同じようにコードを書いてるのですが、コードを少なくする方法を教えてください。 もう一つ、オブジェクト名に「(*)」(*は数字)を含んだ名前を作ることがなぜできないのでしょうか? 回答よろしくお願いします。

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

  • ベストアンサー
  • pauNed
  • ベストアンサー率74% (129/173)
回答No.3

>#1補足 >「v」は配列なので「Additem」は使えない 配列なので使えないというより、ComboBoxへのデータセット手段として ・AddItem メソッド ・List プロパティ ・RowSource プロパティ があり、 1次元配列を準備してList プロパティを使えば1行ですよ、 その1次元配列もArray関数を使えば1行ですよ、...という話です。 合わせて、 Dim i As Long For i = 1 To 3   Me.Controls("combobox" & i).List = Array(10, 45, 92) Next i も可ですが、同じ関数を3回繰り返したくなかっただけです。 (コード少量化=効率化...とは限らないと思いますので) >データ型を宣言するときに「Variant」以外はできない Array 関数が返す型がVariant型配列なので、その通りだと思います。 別に、 Dim v(2) As Long v(0) = 10 v(1) = 45 v(2) = 92 としてもできますが、だったら、記述的にはAdditemでも良いわけです。

miya_HN
質問者

お礼

>1次元配列を準備してList プロパティを使えば1行ですよ、 その1次元配列もArray関数を使えば1行ですよ、...という話です。 なるほど。よく分かりました。 ありがとうございました。

その他の回答 (2)

  • gatyan
  • ベストアンサー率41% (160/385)
回答No.2

ワークシートに値のリストを作成してRowSourceプロパティで設定する とか sub setx(obj as combobox) with obj end with end sub みたいにコンボボックスを引数にとる関数・プロシジャを使って設定する ()が駄目なのは、配列と区別できなくなるからでしょう? 多分

miya_HN
質問者

お礼

今回は、ワークシートにリストを作ってコンボボックスに追加するなどの方法は考えていませんでしたが、そういう方法もあるんですね。 ありがとうございました。

  • pauNed
  • ベストアンサー率74% (129/173)
回答No.1

こんにちは。 Dim i As Long Dim v v = Array(10, 45, 92) For i = 1 To 3   Me.Controls("コンボ" & i).List = v Next i こんな感じで、Control名 & x でLoopさせれば良いです。 ですのでControlはデフォルトか、連番で名前付けしておくと楽ですね。 >「(*)」(*は数字)を含んだ名前 については詳しくないのでうまく説明できないですが、他にも1文字目は数値不可とか、 メタキャラクタ(?)な文字は使えないとか、制限があるのではないでしょうか。 またComboBox名は実際も"コンボ"ですか? 「Visual Basic でプロジェクト名に日本語の文字を使用できない」 http://support.microsoft.com/kb/418924/ja 『予期しない動作をすることがあります』との記事もありますので、留意されたほうが良いかと。

miya_HN
質問者

お礼

今更ですが、お礼の記載が大変遅くなり、申し訳ありません。 ありがとうございました。

miya_HN
質問者

補足

回答ありがとうございます。 なるほど。コントロールを連番にして、プログラムではリストに追加したい配列を作ってコントロールの数だけリストを追加していくわけですね。 「v」は配列なので「Additem」は使えないのは分かりましたが、「v」に代入されるのは数値(正確には数値の配列)ですが、データ型を宣言するときに「Variant」以外はできないということですか?これもやはり、配列だからでしょうか? 「()」は名前を付けるときに制限があるんですね。 コントロールなどの名前に日本語を使わない方がいいんですね。今までは、なんとなく日本語の方が分かりやすいので使っていました。 これから気をつけたいと思います。 大変申し訳ありませんがもう一度回答よろしくお願いします。

関連するQ&A