↑
--/--/-- (--) カテゴリー: スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
新しい記事を書く事で広告が消せます。
(記事編集) http://nadesocha.blog.fc2.com/?overture" target="_new
--/--/-- | Comment (-) | ホーム | ↑ ページ先頭へ ↑ | ↑
2013/01/01 (火) カテゴリー: Excel
動的配列を使えば、配列の要素数が増減しても、配列を再定義することで対応できます。
しかし、二次元配列の場合は少し面倒なことがあります。それは、要素数を変更できるのは2次元目だという点です。
そこで、二次元配列の1次元目の要素数を変更する関数を作成しました。
解説は気が向いたらここに追記します。
ArraySampleの実行結果

しかし、二次元配列の場合は少し面倒なことがあります。それは、要素数を変更できるのは2次元目だという点です。
そこで、二次元配列の1次元目の要素数を変更する関数を作成しました。
解説は気が向いたらここに追記します。
Option Explicit
Public Sub ArraySample()
Dim myArray As Variant, addArray As Variant
Dim idx_i As Long, idx_j As Long
ReDim myArray(9, 4) '10行5列の2次元配列を宣言
For idx_i = 0 To 9
For idx_j = 0 To 4
'配列に適当なデータを設定
myArray(idx_i, idx_j) = idx_i * 10 + idx_j
Next idx_j
Next idx_i
'5行目にデータを追加
ReDim addArray(4)
For idx_i = 0 To 4
addArray(idx_i) = idx_i + 1000
Next idx_i
Array_Add myArray, addArray, 5
'8行目のデータを削除
Array_Del myArray, 8
'結果をシートに出力
Range(Cells(1, 1), Cells(UBound(myArray, 1) + 1, _
UBound(myArray, 2) + 1)) = myArray
End Sub
Public Sub Array_Add(ByRef inArray As Variant, _
ByVal inValue As Variant, Optional ByVal inRow As Variant)
Dim tmpArray As Variant
Dim idx_tmp As Long
Dim idx_i As Long, idx_j As Long
'inRowは挿入位置
If IsMissing(inRow) Then inRow = UBound(inArray, 1) + 1
'現在の配列内容をコピー
tmpArray = inArray
'配列を再定義
ReDim inArray(UBound(inArray, 1) + 1, UBound(inArray, 2)) '1行追加
'tmpArrayの内容を戻す
idx_tmp = LBound(tmpArray, 1)
For idx_i = LBound(inArray, 1) To UBound(inArray, 1)
If idx_i = inRow Then
'挿入位置にデータを追加
For idx_j = LBound(inValue) To UBound(inValue)
inArray(idx_i, idx_j) = inValue(idx_j)
Next idx_j
Else
'挿入位置でなければそのまま戻す
For idx_j = LBound(tmpArray, 2) To UBound(tmpArray, 2)
inArray(idx_i, idx_j) = tmpArray(idx_tmp, idx_j)
Next idx_j
idx_tmp = idx_tmp + 1
End If
Next idx_i
End Sub
Public Sub Array_Del(ByRef inArray As Variant, _
Optional ByVal inRow As Variant)
Dim tmpArray As Variant
Dim idx_tmp As Long
Dim idx_i As Long, idx_j As Long
'inRowは削除位置
If IsMissing(inRow) Then inRow = UBound(inArray, 1)
'現在の配列内容をコピー
tmpArray = inArray
'配列を再定義
ReDim inArray(UBound(inArray, 1) - 1, UBound(inArray, 2)) '1行削除
'tmpArrayの内容を戻す
idx_tmp = LBound(tmpArray, 1)
For idx_i = LBound(tmpArray, 1) To UBound(tmpArray, 1)
If idx_i <> inRow Then
'削除位置でなければそのまま戻す
For idx_j = LBound(tmpArray, 2) To UBound(tmpArray, 2)
inArray(idx_tmp, idx_j) = tmpArray(idx_i, idx_j)
Next idx_j
idx_tmp = idx_tmp + 1
End If
Next idx_i
End Sub
ArraySampleの実行結果
- 関連記事
- Excel VBA 構造体を使った二次元配列 (01/31)
- ExcelVBA 二次元配列の行数を動的に変更する (01/01)
- エクセルでデータの最終行や最右列などを調べる (04/30)
FC2スレッドテーマ : プログラミング (ジャンル : コンピュータ)
(記事編集) http://nadesocha.blog.fc2.com/blog-entry-164.html
2013/01/01 | Comment (0) | Trackback (0) | ホーム | ↑ ページ先頭へ ↑ |コメント:を投稿する 記事: ExcelVBA 二次元配列の行数を動的に変更する
お気軽にコメント:をぞうぞ。非公開 (管理人のみ閲覧可能なコメント:) にしたい場合には、ロック にチェックを入れてください。
Comment