<Sheet to Array> 「シート」を「配列」へ
「シート」を「配列」に入れるプロシージャです。
'*****************************************************
'* 「シート」を「配列」に入れるプロシージャ(2次元配列保証)
'* SheetName:シート名前
'* myArray:出力される配列(参照渡し)
'* RejectRw=1 とすると頭の1行目を除いた表が配列に入る
'* 1セル・1行・1列でも常に 2次元配列
'*****************************************************
Sub sheet_to_array(ByVal SheetName As String, ByRef myArray As Variant, Optional RejectRw As Long = 0)
Dim ws As Worksheet
Dim Target As Range
Dim r As Long, c As Long
Dim i As Long, j As Long
Dim v As Variant
Set ws = Worksheets(SheetName)
Set Target = ws.UsedRange
' RejectRw が指定されていれば最初の行数を除外
If Target.Rows.Count > RejectRw And RejectRw > 0 Then
Set Target = Target.Resize(Target.Rows.Count - RejectRw).Offset(RejectRw)
End If
' 範囲が空の場合は1x1の配列にする
If Target.Cells.Count = 0 Then
ReDim myArray(1 To 1, 1 To 1)
myArray(1, 1) = ""
Exit Sub
End If
' 値を取得
v = Target.Value
' 1セルだけの場合
If Target.Cells.Count = 1 Then
ReDim myArray(1 To 1, 1 To 1)
myArray(1, 1) = v
Exit Sub
End If
' 複数セルの場合だが、1行または1列で1次元配列になっている場合
If Target.Rows.Count = 1 Or Target.Columns.Count = 1 Then
r = Target.Rows.Count
c = Target.Columns.Count
ReDim myArray(1 To r, 1 To c)
For i = 1 To r
For j = 1 To c
myArray(i, j) = Target.Cells(i, j).Value
Next j
Next i
Exit Sub
End If
' 通常の複数行・複数列
myArray = v
End Sub「SheetName」のシートの使用しているすべてのセルを、配列にいれています。見出しなど、1行目が不要の場合は、「RejectRw=1」としてください。
このプロシージャの特徴、どのようなシートでも2次元配列に入ります。
- 1セルでも常に 2 次元配列
myArray(1,1)に値が入る
- 1行だけ / 1列だけでも 2 次元配列
- 1行 × N列 →
(1 To 1, 1 To N) - N行 × 1列 →
(1 To N, 1 To 1)
- 1行 × N列 →
- 複数行・複数列の場合
- Excelの
Range.Valueをそのまま配列化
- Excelの
- RejectRw によるヘッダー行除外対応
- 先頭行を除外して配列に格納可能
- 空シートの場合も 1×1 配列を返す
- エラーを防ぐため空文字を格納
使用例は、次です。
Dim arr() As Variant
' シートを配列に入れる、テストプロシージャ。
Private Sub test、シートを配列に入れる()
' (SheetName, ByRef arr, Optional RejectRw = 0)
Call sheet_to_array("TEST", arr)
End Sub以下のような「TEST」シートで、これを実行すると、

「arr」の中は、以下の通りです。

「RejectRw=1」の使用例です。
Dim arr() As Variant
' シートを配列に入れる、テストプロシージャ、見出しを除く。
Private Sub test、シートを配列に入れる1()
' (SheetName, ByRef arr, Optional RejectRw = 0)
Call sheet_to_array("TEST", arr, 1)
End Subこれを実行すると、「arr」の中は、以下の通りです。1行目の見出しを除いたデータが配列に入ります。



“<Sheet to Array> 「シート」を「配列」へ” に対して6件のコメントがあります。