こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【VBA】 動的な変数(定数)の指定

こちらの識者の方々にはいつもお世話になっています。
VBAの質問です。

環境は下記になります。
OS=windowsXP SP3
Office=Excel2003(11.8347.8403) SP3

タイトルが正確にやりたいことを表現できているのかいささか疑問なので補足します。

Sub test1()

 Dim oDict As Object
 Dim i As String
 Const Dest01 As String = "C:\aaa\"

 i = "01"
 Set oDict = CreateObject("Scripting.Dictionary")
 oDict(i) = "Dest" & i
 MsgBox oDict(i)

 Set oDict = Nothing

End Sub

上記のようなコードで、msgboxで ”C:\aaa\”という文字列を返してほしいのですが、"Dest01"の文字列が返ってきます。
上記ではDest01しか指定していませんが、実際のコードではDest80ぐらいまで定数があり、いずれの定数のフォルダも共通性がない状態になっています。
これをFor next文でiをまわして、Dest01から順番に保存していきたい。というのがやりたいことです。


上記のような場合、どのようなコードが適していますでしょうか。
Dictionaryオブジェクトについては、必ず使いたいわけではありません。
質問に不備不足等ございましたらご指摘ください。
ご面倒お掛けしますがよろしくお願いします。

投稿日時 - 2013-10-12 15:49:03

QNo.8302576

困ってます

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

質問の意味が読めないですが、どうやら定数を呼び出したいということらしいのですが、「定数」の使い方を勘違いされているようです。

そのようなループとかのコードを書き、"Scripting.Dictionary"のそのオブジェクトを使って、格納させようとしながら、初歩的な文法を間違えてしまっているのは、どうしたものでしょう。

それから、"Scripting.Dictionary"を使うのが好きな人はいますが、適材適所というものがありますから、今回のような場合は、VBAでは、配列に格納して十分だと思います。

今回のように、格納するデータ数が多くなると、管理しにくいので、Excelでは、ワークシートを利用するということになります。

参考例:
シートには、
A1~A10に、
C:\aaa\
C:\bbb\
などと入れます。データの秘匿性が高い時は、隠しシート(プロパティのVisibleでVeryHiddenを手動で設定してください。)

'//
Sub Test2()
 Dim myRng As Range
 Dim i As Long
 Dim aDest As Variant '配列
 Set myRng = Range("A1:A10") '予めシートのA列に、定数を入れておく
 ReDim aDest(myRng.Rows.Count - 1)
 For i = 0 To UBound(aDest)
  If myRng(i + 1) <> "" Then
   aDest(i) = myRng(i + 1).Value
  End If
 Next i
 
 MsgBox aDest(0)
End Sub
'//

なお、質問の意図を間違えていましたら、どうぞ無視して構いません。

投稿日時 - 2013-10-12 18:51:11

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

動的にという意味はわからないではないが、本当にやりたいことは
Dest01, Dest02.......Dest80 に定数(例: ”c:\aaa”)が入っていてそれを。。。ですよね。
もともとDest01.......にどのように定数を入れるつもりなんでしょうか?
for文で回さずに直に配列にいれればよいのでは?

投稿日時 - 2013-10-13 08:06:27

お礼

ご回答ありがとうございます。
仰る通りよくよく考えればconstで定数を宣言するのであれば、配列で宣言してしまえば済む話でした。
ありがとうございました。

投稿日時 - 2013-10-27 14:02:41

あなたにオススメの質問