• ベストアンサー

定数について

VBA超初心者です。 Excel2000を使っているのですが、 定数で大量のデータを格納する時、どのように構文を書いたらいいでしょうか。 例えば001、002、003・・・500までの連番、などです。 よろしくお願い致しますm(_ _)m

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

  • ベストアンサー
回答No.3

>例えば001、002、003・・・500までの連番、などです。 この文から想像すると、 「001」「002」という文字列を使いたいように取れます。 それから、定数という言葉を素直に受け取ると、 Public Const NUM001 As String = "001" というようなものをたくさん配列っぽく宣言したいのでは? とすると。 配列になっている定数は宣言できません。 上の通り、 (Public/Private) Const [定数名] As [型] = [定数の値] という構文で1つだけ宣言できます。 絶対途中で書き換えない配列を宣言して、プログラムの開始直後に配列へ値を格納(やりかたはNo2さん参照)すれば良いかと思います。

m2ario
質問者

お礼

お礼が遅くなってしまってすみませんでした! また、質問の内容の説明が足りなくて申し訳ありません。 penpenpenさんのいう通り、文字列を使った定数をたくさん配列っぽく宣言したかったのですが、1つしか宣言できないとすると、別の方法を考えるしかなさそうです・・・ 何にしても、まだまだ勉強不足なので、もっと勉強します。回答ありがとうございましたm(_ _)m

その他の回答 (4)

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

どういうケースで使いたいのか、書かないといたずらに難しい方法の回答になってしまうと思う。 規則的に+1の数を「順順に」!ほしいときは N=N+1で増やして使えばよいし。 500もの定数を定義しておかなければならないケースはどんなものですか。 テキストファイルに1から500まで書き込み、それに対応したデータも書き込んでおいて、プログラムの処理のはじめに読み込んで配列に格納するとか。 定数といっても、メモリ上のデータであって、書き換えを想定してないだけの話でしょう。 それともエクセルVBAの初心者であれば アクチブシートのA列で Sub test02() For i = 1 To 500 Cells(i, "A") = i Next i End Sub のことを聞いているのかな。 それなら質問の書き方は大げさすぎます。

m2ario
質問者

お礼

お礼が遅くなってしまってすみません! また、質問の内容の説明が足りなくて申し訳ありませんでしたm(_ _)m 定数、変数に関して、まだまだ勉強不足なので、もっと勉強してきます。 アドバイスありがとうございました!<(_ _)>

  • piyo2000
  • ベストアンサー率49% (144/293)
回答No.4

#3さんと同じ解釈で、かつ連番のように規則性のあるものを定数っぽく定義したいなら、Collectionオブジェクトを使用するという手もあります。 もちろん、ベタで定数定義を書くという手もありますが・・・ (秀丸などのマクロを使って一気に書く) 配列は簡単に扱える反面、#3さんが >絶対途中で書き換えない配列を宣言 とおっしゃっているように、書き換えることが容易で バグの温床になりやすいですね。 逆に頻繁に書き換えるなら配列のほうが有用です。 Collectionオブジェクトなら、キーを指定してAddしてしまえば、そのキーに対応する値を変えるにはRemoveしてAddしなおす、という作業が必要になりますから、「どこかで書き換えられているかも」という不安は減るはずです。 Classを作成しProperty Getのみ設定して、読み取り専用プロパティを作成する、という手法も(数が少ない&名前に規則性が無いなら)有用です。 いずれにしても、もう少し質問は具体的なほうがいいと思います(^^;

m2ario
質問者

お礼

お礼が遅くなってしまってすみません! また、質問の内容の説明が足りなくて申し訳ありませんでした。 Collectionオブジェクト、・・調べたのですが、恥ずかしながら難しくて完璧には理解できませんでした(^^;でも私が作ろうとしているものに活用できそうでした! 何にしても、勉強不足なのでもっと勉強します。 アドバイスありがとうございました!<(_ _)>

  • taocat
  • ベストアンサー率61% (191/310)
回答No.2

こんにちは。 >定数で大量のデータを格納する時 これだけでは一番肝心なことが分りませんね。 データをどこに格納するのか、ということです。 ●連番を配列に格納する場合 ---------------------------------------- Sub Test()  Dim myNumber(500)  Dim N As Integer  For N = 1 To 500    myNumber(N) = N  Next N End Sub -------------------------------------- ●連番をSheet1のA列1行目から格納する場合 -------------------------------------- Sub Test2()  Dim N As Integer  For N = 1 To 500    Sheets("Sheet1").Cells(N, "A").value = N  Next N End Sub -------------------------------------- 以上です。

m2ario
質問者

お礼

お礼が遅くなってしまってすみません! また、質問の内容の説明が足りなくて申し訳ありませんでしたm(_ _)m 定数、変数に関して、まだまだ勉強不足なので、もっと勉強してきます。 回答ありがとうございました!<(_ _)>

  • JeanneNet
  • ベストアンサー率48% (100/208)
回答No.1

こんにちは、じゃんぬねっと です。 素直に Enum を使いましょう。

m2ario
質問者

お礼

お礼が遅くなってしまってすみません! EnumとはC言語の列挙型というものでしょうか? お恥ずかしいですが、C言語すら分からないので、もうちょっと勉強してきます・・・ アドバイスありがとうございましたm(_ _)m

関連するQ&A