
こんにちは、
VBAの二次元配列で1つ目の箱を増やしたいのですがどのようにすればよいのでしょうか?
ReDimの代わりになる方法を探してsub_t_expensesというのを作り
そっちに移してから、またt_expensesに移し替える?方法も考えたのですが結局どう組めばいいかわからず。
例
dim t_expenses (1, 1) As String
t_expenses(0, 0) = 2019
t_expenses(0, 1) = 01
t_expenses(1, 0) = 2019
t_expenses(1, 1) = 02
....処理の途中で箱を増やしたい
....Redim t_expenses (2, 1) できないですが・・・
t_expenses(2, 0) = 2020
t_expenses(2, 1) = 01
No.2ベストアンサー
- 回答日時:
こんにちは
通常の多次元配列ではなく、Variant型で「配列の配列」にすれば可能です。
引数の記述が ary(i, j) ではなく ary(i)(j) のようになるのと、取り扱いがそれなりに面倒なのを許容できればですが…
詳しくは「ジャグ配列」などで検索してみてください。
以下でごく簡単なテストをしてみました。
Dim ary()
For i = 0 To 2
ReDim Preserve ary(i)
k = i * 100
ary(i) = Array(k + 0, k + 1, k + 2)
Next i
' 以下は、確認のための出力
For i = 0 To UBound(ary)
For j = 0 To UBound(ary(i))
Cells(i + 1, j + 1).Value = ary(i)(j)
Next j
Next i
No.8
- 回答日時:
個人的な意見ですが No.3 のようにすれば出来ますが、毎回毎回拡張するのではとても非効率です。
起動時にその日の拡張予定分まで一気に広げておいて作業した方が良いと思いますけど…何か問題があるのでしょうか?No.7
- 回答日時:
めぐみん_さんへ
その前の「a_tmp = t_expenses」で「a_tmp」に退避しています。
Variant 型の変数に配列を代入すると要素数など丸々コピーされる事を利用しています。
「ReDim t_expenses(2, 1)」で消されたものを
-------------------------------------------------------
For i = 0 To 1
For j = 0 To 1
t_expenses(i, j) = a_tmp(i, j)
Next
Next
-------------------------------------------------------
で退避していたものだけを代入し直しています。
No.6
- 回答日時:
GooUserラック さんへ
>ReDim t_expenses(2, 1)
こちらですと要素数の範囲は広げられますが、既に入っていたはずの要素にあるデータは初期化されませんでしょうか?
No.5
- 回答日時:
No.3 の補足
「For i = 0 To 1」「For j = 0 To 1」の「1」の意味の説明が無かったですね?
下図のように変更前の「ReDim」の値を入力すれば良いのです。
御存知だとは思いますが「dim t_expenses (1, 1) As String」だと「ReDim」で拡張出来ません。

No.4
- 回答日時:
No.1です。
いえ書き方も理解もキチンと出来てますよ。
ReDim Preserve によって要素数を増やせるのは一番後ろになる(今回は二次)ものですから、増やしたいなら
(0,0)
(1,0)
(0,1)
(1,1)
(0,2)
(1,2)
となるように代入していくと言う事です。(前回省きすぎたかな)
Sub aa()
Dim st() As String
Dim i As Integer
ReDim st(1, 0)
For i = 0 To 5
st(0, i) = CStr(i * 2)
st(1, i) = CStr(i * 5)
ReDim Preserve st(1, 0 To UBound(st, 2) + 1)
Next
For i = 0 To 5
Debug.Print st(0, i) & " : " & st(1, i)
Next
End Sub
0 : 0
2 : 5
4 : 10
6 : 15
8 : 20
10 : 25
書き出す際には、UBound(st,2) を使うと一番後ろは代入してないので、 UBound(st,2) - 1 にした方が良いかもです。
No.3
- 回答日時:
以下みたいな事でしょうか?
Dim t_expenses() As String
Dim a_tmp As Variant
Dim i As Long, j As Long
ReDim t_expenses(1, 1)
t_expenses(0, 0) = "2019"
t_expenses(0, 1) = "01"
t_expenses(1, 0) = "2019"
t_expenses(1, 1) = "02"
a_tmp = t_expenses
ReDim t_expenses(2, 1)
For i = 0 To 1
For j = 0 To 1
t_expenses(i, j) = a_tmp(i, j)
Next
Next
Set a_tmp = Nothing
t_expenses(2, 0) = "2020"
t_expenses(2, 1) = "01"
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 「オンラインコースを提供している教育機関は、教室棟の建設費や暖房、清掃、メンテナンスの費用を払う必要 2 2023/02/21 13:53
- Visual Basic(VBA) ExcelVBAで質問です。離れた二次元配列を一つにしたい 4 2022/07/26 19:06
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
- Excel(エクセル) エクセルVBA、ファイル名をセルの値で保存の方法を教えてください。 おそれいります。こちらで数々のエ 6 2023/06/30 22:17
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Excel(エクセル) VBA カゥントで数値の範囲を規制 1 2022/05/20 06:20
- Excel(エクセル) VBAのエラーが直せません 4 2023/06/12 22:10
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】並び替えの範囲が、...
-
エクセルのVBAコードと数式につ...
-
エクセルのマクロについて教え...
-
エクセルの改行について
-
【VBA】 結合セルに複数画像と...
-
vbsでのwebフォームへの入力制限?
-
算術演算子「¥」の意味について
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
Vba セルの4辺について罫線が有...
-
vb.net(vs2022)のtextboxのデザ...
-
ダブルクリックで貼り付けた画...
-
VBAの「To」という語句について
-
VBAでユーザーフォームを指定回...
-
VBAでCOPYを繰り返すと、処理が...
-
【マクロ】変数を使った、文字...
-
エクセルのVBAコードについて教...
-
ワードの図形にマクロを登録で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
【マクロ】並び替えの範囲が、...
-
エクセルの改行について
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
VBAでCOPYを繰り返すと、処理が...
-
VBA ユーザーフォーム ボタンク...
-
エクセルのVBAコードと数式につ...
-
エクセルのVBAコードについて教...
-
[VB.net] ボタン(Flat)のEnable...
-
【マクロ】変数を使った、文字...
-
改行文字「vbCrLf」とは
-
質問58753 このコードでうまく...
-
【マクロ】シートの変数へ入れ...
-
ワードの図形にマクロを登録で...
-
算術演算子「¥」の意味について
おすすめ情報