【VBA】二次元可変配列の要素数を変更する(最終次元、1次元)
<機能>
(1)2次元可変配列を定義します
(2)2次元可変配列の最大次元(2次元目)の要素数を変更します
(3)2次元可変配列の1次元目の要素数を変更します
・配列のデータを添付配列にコピー
・2次元配列を再定義
・添付配列のデータを2次元配列に戻す
・追加した要素にデータをセット
<動作検証&開発環境>
Microsoft Office 2016
<使い方>
適当なところにソースを張り付けてください
二次元可変配列を使ってみる() を呼び出すとサンプルを開始します
<実行イメージ>
最上部の表は配列の初期状態(要素数:3×4)
真ん中の表は最終次元をPreserveキーワードで拡張(要素数:3×5)
最下部の表は1次元目を拡張(要素数:5×5)
'********************************************
'2次元可変配列を定義して要素を拡張する
'(1)Preserveキーワードで最終次元の要素を拡張
'(2)1次元の要素を拡張する
' →添付配列にデータをコピーしてから配列を初期化後拡張
'********************************************
Sub 二次元可変配列を使ってみる()
Dim strArray() As String
Dim gyo As Long
Dim i As Integer, j As Integer
gyo = 1
'2次元可変配列を定義して要素を拡張する
'(1)Preserveキーワードで最終次元の要素を拡張
'(2)1次元の要素を拡張する
' →添付配列にデータをコピーしてから配列を初期化後拡張
'********************************************
Sub 二次元可変配列を使ってみる()
Dim strArray() As String
Dim gyo As Long
Dim i As Integer, j As Integer
gyo = 1
'//シートを初期化
Cells.Select
Selection.Clear
Selection.ColumnWidth = 15
Selection.RowHeight = 20
Selection.Font.Name = "MS ゴシック"
Selection.Font.Size = 10
Range("A1").Select
Cells.Select
Selection.Clear
Selection.ColumnWidth = 15
Selection.RowHeight = 20
Selection.Font.Name = "MS ゴシック"
Selection.Font.Size = 10
Range("A1").Select
'//2次元配列の要素数を定義(要素数3×4)
ReDim strArray(2, 3)
ReDim strArray(2, 3)
'//2次元配列にテストデータをセット
strArray(0, 0) = "氏名"
strArray(0, 1) = "所属支店名"
strArray(0, 2) = "性別"
strArray(0, 3) = "出身"
strArray(0, 0) = "氏名"
strArray(0, 1) = "所属支店名"
strArray(0, 2) = "性別"
strArray(0, 3) = "出身"
strArray(1, 0) = "山田 太郎"
strArray(1, 1) = "新宿"
strArray(1, 2) = "男"
strArray(1, 3) = "鹿児島県"
strArray(1, 1) = "新宿"
strArray(1, 2) = "男"
strArray(1, 3) = "鹿児島県"
strArray(2, 0) = "佐藤 花子"
strArray(2, 1) = "渋谷"
strArray(2, 2) = "女"
strArray(2, 3) = "東京都"
strArray(2, 1) = "渋谷"
strArray(2, 2) = "女"
strArray(2, 3) = "東京都"
'//2次元配列の情報をシートに出力
二次元配列をシートに出力 strArray, gyo
'//カレント行を更新
gyo = gyo + (UBound(strArray, 1) + 1)
二次元配列をシートに出力 strArray, gyo
'//カレント行を更新
gyo = gyo + (UBound(strArray, 1) + 1)
'//配列の2次元目の要素を1つ拡張(要素数3×5)
'//Uboundの第2引数で最大インデックスを取得する次元を指定
'//指定しない場合は全ての次元のなかで最大要素数が返ります
'//Ubound関数の詳細はDeveloperNetwork参照
ReDim Preserve strArray(2, UBound(strArray, 2) + 1)
'//Uboundの第2引数で最大インデックスを取得する次元を指定
'//指定しない場合は全ての次元のなかで最大要素数が返ります
'//Ubound関数の詳細はDeveloperNetwork参照
ReDim Preserve strArray(2, UBound(strArray, 2) + 1)
'//拡張された2次元目の要素にテストデータをセット
strArray(0, UBound(strArray, 2)) = "所属部署"
strArray(1, UBound(strArray, 2)) = "営業部"
strArray(2, UBound(strArray, 2)) = "総務部"
strArray(0, UBound(strArray, 2)) = "所属部署"
strArray(1, UBound(strArray, 2)) = "営業部"
strArray(2, UBound(strArray, 2)) = "総務部"
'//2行あける
gyo = gyo + 2
gyo = gyo + 2
'//2次元配列の情報をシートに再出力
二次元配列をシートに出力 strArray, gyo
'//カレント行を更新
gyo = gyo + (UBound(strArray, 1) + 1)
二次元配列をシートに出力 strArray, gyo
'//カレント行を更新
gyo = gyo + (UBound(strArray, 1) + 1)
'//配列の1次元目の要素を2つ拡張してみる
'//VBAで拡張出来るのは最終次元のみ(本サンプルでは2次元目)
'//一旦添付配列にコピーしてから配列を初期化して拡張する
Dim tmpArray() As String
tmpArray = strArray
'//VBAで拡張出来るのは最終次元のみ(本サンプルでは2次元目)
'//一旦添付配列にコピーしてから配列を初期化して拡張する
Dim tmpArray() As String
tmpArray = strArray
'//配列の要素数を再定義(要素数5×5)
ReDim strArray(UBound(tmpArray, 1) + 2, UBound(tmpArray, 2))
ReDim strArray(UBound(tmpArray, 1) + 2, UBound(tmpArray, 2))
'//データをコピー
For i = 0 To UBound(tmpArray, 1)
For j = 0 To UBound(tmpArray, 2)
strArray(i, j) = tmpArray(i, j)
Next
Next
For i = 0 To UBound(tmpArray, 1)
For j = 0 To UBound(tmpArray, 2)
strArray(i, j) = tmpArray(i, j)
Next
Next
'//拡張した配列の1次元目の要素にテストデータをセット
strArray(3, 0) = "鈴木 一郎"
strArray(3, 1) = "渋谷"
strArray(3, 2) = "男"
strArray(3, 3) = "神奈川県"
strArray(3, 4) = "情報システム部"
strArray(3, 0) = "鈴木 一郎"
strArray(3, 1) = "渋谷"
strArray(3, 2) = "男"
strArray(3, 3) = "神奈川県"
strArray(3, 4) = "情報システム部"
strArray(4, 0) = "西島 洋子"
strArray(4, 1) = "東京"
strArray(4, 2) = "女"
strArray(4, 3) = "東京都"
strArray(4, 4) = "経理部"
strArray(4, 1) = "東京"
strArray(4, 2) = "女"
strArray(4, 3) = "東京都"
strArray(4, 4) = "経理部"
'//2行あける
gyo = gyo + 2
gyo = gyo + 2
'//2次元配列の情報をシートに再出力
二次元配列をシートに出力 strArray, gyo
End Sub
二次元配列をシートに出力 strArray, gyo
End Sub
'********************************************
'指定配列のデータをシートに出力する
'strArray : 配列名
'stgyo : 出力開始行
'********************************************
Sub 二次元配列をシートに出力(ByRef strArray() As String, _
ByVal stgyo As Integer)
Dim i As Integer, j As Integer
'指定配列のデータをシートに出力する
'strArray : 配列名
'stgyo : 出力開始行
'********************************************
Sub 二次元配列をシートに出力(ByRef strArray() As String, _
ByVal stgyo As Integer)
Dim i As Integer, j As Integer
For i = 0 To UBound(strArray, 1)
For j = 0 To UBound(strArray, 2)
Cells(stgyo + i, (j + 1)) = strArray(i, j)
Next
Next
End Sub
For j = 0 To UBound(strArray, 2)
Cells(stgyo + i, (j + 1)) = strArray(i, j)
Next
Next
End Sub
よろしければポチッと押してください