【やりたいこと】
下記「検討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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) excelvbaのwithについて 4 2022/12/19 16:51
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
このQ&Aを見た人はこんなQ&Aも見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
2024年に成し遂げたこと
今年も残すところわずか。 皆さんが今年達成したことを教えていただきたいです。 どんな小さなものでも構いません。
-
自分の通っていた小学校のあるある
進学したり大人になってから、「あれって自分の小学校だけだったのかな」と思うことありますよね。 逆に「他の小学校ってそんなことするの!?」と思ったり。 そんな「自分の通っていた小学校」のあるあるを教えてください!
-
【選手権お題その2】この漫画の2コマ目を考えてください
サッカーのワンシーンを切り取った1コマ目。果たして2コマ目にはどんな展開になるのか教えてください。
-
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
VBAで変数の数/変数名を動的に変化させる
その他(プログラミング・Web制作)
-
Excel-vba 文字列と変数を連結して更に変数として扱いたい
その他(プログラミング・Web制作)
-
-
4
配列をループでたくさん宣言したいのですが、配列名や変数名を変数で宣言することはできませんか?
Visual Basic(VBA)
-
5
変数を動的に作るには?
Visual Basic(VBA)
-
6
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
7
変数名の取得
Visual Basic(VBA)
-
8
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
9
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
10
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
11
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
12
UserForm1.Showでエラーになります。
工学
-
13
全ての変数を一気にリセットする方法はありますか?
PowerPoint(パワーポイント)
-
14
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
15
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
16
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
17
VBA ユーザーフォームのChangeイベントを停止したい
Access(アクセス)
-
18
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
19
文字列を変数名として扱う方法
Visual Basic(VBA)
-
20
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
構造体配列の特定のメンバーをF...
-
エクセルでXY座標に並べられた...
-
エクセル(VBA)の空白配列の削除...
-
VB.NETにて、構造体へデータを...
-
Dir関数で読み取り順を操作でき...
-
OutOfMemoryExceptionの回避策...
-
グラフの「項目軸ラベルに使用...
-
VBA Dowhile 判断条件に動的配...
-
DBから取得した値を配列へ代入する
-
Excel VBA マクロ ブロック崩し...
-
配列の要素がすべてカラかどう...
-
Redim とEraseの違いは?
-
配列の中の最大値とそのインデ...
-
VB.NETの配列にExcelから読み込...
-
2次元配列の初期値
-
テキストボックの文字を一行ず...
-
vba フィルター 複数条件 3つ以...
-
VBA 桁数が混在するソート
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
エクセルでXY座標に並べられた...
-
C#でbyte配列から画像を表示さ...
-
vba フィルター 複数条件 3つ以...
-
Dir関数で読み取り順を操作でき...
-
配列のペースト出力結果の書式...
-
COBOLの基本的な事なので...
-
構造体配列の特定のメンバーをF...
-
配列の中の最大値とそのインデ...
-
コンボボックスのインデックス...
-
エクセルの列一括書き込み
-
Redim とEraseの違いは?
-
大量の変数を定義するにはどう...
-
定数配列の書き方
-
レコードセットの中身を配列に...
-
Excel2010のinputboxで複数デー...
-
Segmentation Fault (メモリ制限?)
-
DBから取得した値を配列へ代入する
-
VB.NETの配列にExcelから読み込...
-
VBAで配列引数を値渡しできない...
おすすめ情報
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