
【やりたいこと】
下記「検討1」の「これのa1,a2,a3の数字を変数にしてループ処理したい。」です。
【検討した内容】
Sub 検討1()
Dim a1() As Variant
Dim a2() As Variant
Dim a3() As Variant
Dim i As Long
i = 5
ReDim a1(i, 2)
i = 8
ReDim a2(i, 3)
i = 6
ReDim a3(i, 4)
End Sub
→これのa1,a2,a3の数字を変数にしてループ処理したい。
Sub 検討2()
Dim a() As Variant
Dim i As Long
Dim j As Long
ReDim a(8, 4, 3)
End Sub
→この対応でも別途処理を加えればやりたいことが達成されるのだが、あくまでも知りたいのは変数名に変数をとり入れられないかということ。
Sub 検討3()
Dim a(3) As Variant
Dim i As Long
Dim j As Long
For j = 1 To 3
a(j) = Sheets(j).Cells(1, 1).CurrentRegion
Debug.Print UBound(a(j), 1)
Next
End Sub
→この場合はそれぞれのuboundが取れることを確認済み
この方法を使用してやりたいことを無理やり達成は可能であるが、本来の機能でできないものか?
【動作環境】
OS 名:Microsoft Windows 10 Pro
OS バージョン:10.0.16299 N/A ビルド 16299
OS 製造元:Microsoft Corporation
プロセッサ:Intel64 Family 6 Model 42 Stepping 7 GenuineIntel ~2400 Mhz
BIOS バージョン:TOSHIBA Version 2.20 , 2012/06/22
物理メモリの合計:3,988 MB
Excel バージョン:14.0.7192.5000(32ビット) Microsoft Office Standard 2010の一部
以上、よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
ご回答ありがとうございます。
いま試せる環境にないのですが、理解できました。
この使用方法の発想がありませんでした。
明日試してみたいと思います!
No.4
- 回答日時:
変数名に変数をってのがわかりませんけど、何となく『ジャグ配列』とか『配列の配列』と言うものを使われては良いのかな?と言う気がします。
VBであればListクラスにDictionaryクラスを与えてやれば、Listクラスのインデックス毎にDictionaryクラスが存在する事で固定化されない値の保持が出来るんですけど。
VBAでそれをやろうとするなら、.NETのArrayListクラスとVBSのDictionaryオブジェクトの組み合わせになるのかな?
それともArrayListクラスとVariant型を組み合わせるのか?
私の理解が間違っているかもですけどね。
ちょっとPCが逝ってしまいサンプルコード化が困難ですのでごめんなさい。
ご回答ありがとうございます。
No.3の方のリンクにジャグ配列の話がありますね。
明日試してみたいと思います。
ありがとうございます!
No.2
- 回答日時:
こんにちは
回答ではありませんが・・・
プログラム言語そのものも人が作っているものです。
例えば配列という概念は、複数の変数に対して同様の処理を行うのに有効ですし、それだけでなく、数学的な行列や多次元との整合も取れるので、大抵の言語に組み込まれている概念といえます。
『あればとても便利』という概念(機能)であれば、その言語に取り入られていると思いますが、ご質問のような機能を持った言語は(多分)ないのではないでしょうか?
・・という事実からして、できないと不便だと感じている人はほとんどいないということと想像できます。
それでも、その言語を利用して、様々な優秀な機能を持ったプログラムが数多く作成されていると言えます。
No.1
- 回答日時:
出来ないと思います。
そのために「検討2」の方法が用意されているわけですから…ところで、なぜ変数名を変更しないといけないか教えていただけますか?
ご回答ありがとうございます。
検討3を例に回答させていただきます。
a(i)(j,k)という記述が作成できると
For i = 1 to 3
For j = 1 to Ubound(a(i),1)
Next
Next i
という記述が可能になります。
例1の数値を借りますと、
Ubound(a(1),1)=5
Ubound(a(2),1)=8
Ubound(a(3),1)=6
となります。
検討2ですと
For i = 1 to 3
For j = 1 to Ubound(a,1)
Next
Next i
と書くと、Ubound(a,1)が8で固定されてしまい、
Ubound(a,1)の代わりに別途上限の情報をもった変数を使用するか、空白になったらForを抜けるという処理が必要になります。
やりたいことができると、こういうプラスαの処理が不要になり記述が減ります。
検討3の取得方法ではやりたことができるため、初めからこういうのを作れないかと思い質問させていただきました。
a(i)(j,k)の形でなくても、上記のようにプラスαの処理なくできる記述方法があればぜひご教示くださいませm(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
VBAで変数の数/変数名を動的に変化させる
その他(プログラミング・Web制作)
-
Excel-vba 文字列と変数を連結して更に変数として扱いたい
その他(プログラミング・Web制作)
-
-
4
配列をループでたくさん宣言したいのですが、配列名や変数名を変数で宣言することはできませんか?
Visual Basic(VBA)
-
5
変数を動的に作るには?
Visual Basic(VBA)
-
6
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
7
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
8
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
9
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
10
UserForm1.Showでエラーになります。
工学
-
11
変数名の取得
Visual Basic(VBA)
-
12
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
13
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
14
全ての変数を一気にリセットする方法はありますか?
PowerPoint(パワーポイント)
-
15
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
16
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
17
VBA public変数はどのようなことをしたら解放されますか?
Visual Basic(VBA)
-
18
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
19
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
20
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
Dir関数で読み取り順を操作でき...
-
Segmentation Fault (メモリ制限?)
-
VBScriptでCSVファイルを読み出...
-
定数配列の書き方
-
構造体配列の特定のメンバーをF...
-
C#で作成したdllをVBScriptで使...
-
DBから取得した値を配列へ代入する
-
VB6のメモリ解放に関して
-
エクセルでXY座標に並べられた...
-
複数のtextboxの処理を一括で行...
-
COBOLの基本的な事なので...
-
Redim とEraseの違いは?
-
レコードセットの中身を配列に...
-
mpiによる多次元配列の送受信
-
CheckBoxの配列化
-
VBAのワークシート関数で配列の...
-
EXCEL VBA 配列デー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
配列の中の最大値とそのインデ...
-
エクセルでXY座標に並べられた...
-
Dir関数で読み取り順を操作でき...
-
配列のペースト出力結果の書式...
-
COBOLの基本的な事なので...
-
複数のtextboxの処理を一括で行...
-
構造体配列の特定のメンバーをF...
-
大量の変数を定義するにはどう...
-
CheckBoxの配列化
-
Excelのメモリ(配列)の上限は2G...
-
VB6のメモリ解放に関して
-
ReDim PreserveよりもReDimが遅い
-
Excel2010のinputboxで複数デー...
-
定数配列の書き方
-
コンボボックスのインデックス...
-
EXCELを使って、アクセスログを...
-
レコードセットの中身を配列に...
おすすめ情報
No.3のTacosan様回答のおかげでループ処理が可能になりました。
ジャグ配列というのを今回初めてしりました。
ほかの方もご回答ありがとうございました。
Sub 検討4()
Dim a(3) As Variant
Dim b As Variant
Dim i As Long
For i = 1 To 3
If i = 1 Then
ReDim b(5, 2)
ElseIf i = 2 Then
ReDim b(8, 3)
Else
ReDim b(6, 4)
End If
a(i) = b
Next
End Sub