
こんにちは、
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ランキング
-
バイナリデータの操作
-
perlで配列の要素が空なのを知...
-
VBAのautofilter、criteriaの配...
-
リストボックスに縦スクロール...
-
エクセルVBAでTransposeの不思議
-
マクロ Publicでの配列定義
-
Dim flag(4) as boolean で配列...
-
クラスに配列を渡す方法
-
二次元配列のインデックスについて
-
Strawberry Perl for Windows ...
-
VBScript 配列
-
プロシージャとは
-
Perl実行時のメモリ不足について
-
VBAでスロットを作る
-
ActivePerl がハングアップ
-
COBOLから呼ばれる時
-
画面を強制的に再描画させる方法
-
範囲指定したセルを1つずつ飛...
-
Null判定がきかない
-
VBA:For構文のエラー、対策教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのautofilter、criteriaの配...
-
クラスに配列を渡す方法
-
二次元配列のインデックスについて
-
文字の整列(printf)
-
Dim flag(4) as boolean で配列...
-
マクロ Publicでの配列定義
-
エクセルVBAでTransposeの不思議
-
複数の配列の全ての組み合わせ...
-
Excel VBA ユーザーフォームの...
-
リストボックスに縦スクロール...
-
バイナリデータの検索(VB.NET2008)
-
可変長配列を、動的確保した固...
-
Strawberry Perl for Windows ...
-
perlで配列の要素が空なのを知...
-
if文条件式で配列を使用したい
-
VBScript 配列
-
VBA 二次元配列の1つ目を増...
-
二次元配列における要素数のは...
-
配列の各要素に文字列結合
-
Powershell $変数 = @()の空配...
おすすめ情報