どうも。
葬送のフリーエンです。
皆さんは、VBAをご存じだろうか?
Excelに標準でついてくる言語のひとつで、マクロとも呼ばれていたりする言語です。
VBAのいいところは開発環境の構築が、ExcelやWordなどのOffice製品のみで完結するため、
Office製品がインストールされている環境(PC)であれば、ほぼ使える。
VBAの歴史は長く、古来より情報は公開され、いろいろなコードもまた生成されてきたコンニチ。
そんな無駄遣いにされたコードたちを送る...
それでは、本題に入ります。
まず、はじめにExcelの真骨頂は、データベースを扱いやすく設計されていることでしょう。
方眼紙の線がそれを物語っています。
このVBA関数TableDataFormatは、指定されたExcelのテーブルからデータを配列に変換して返す役割を持っています。
入力パラメータとしてselectedTableを受け取り、これは操作対象のワークシートとテーブル名に使用されます。この関数はString型の2次元配列を返します。
コードの動作
この関数はselectedTableを引数として受け取ります。
対象のワークシート(ws)とテーブル(tbl)を特定します。
テーブルの行数と列数に基づき、items配列のサイズを再定義します。
二重ループを使用して、テーブルの全てのデータを読み取り、items配列に格納します。
完成した配列を関数の出力として返します。
Function TableDataFormat(selectedTable As String) As String()
Dim items() As String
Dim ws As Worksheet
Dim tbl As ListObject
Dim i As Long, j As Long
On Error GoTo ErrorHandler
Set ws = ThisWorkbook.Sheets(selectedTable)
Set tbl = ws.ListObjects(selectedTable)
If tbl Is Nothing Then Err.Raise Number:=vbObjectError + 513, Description:="Table not found."
ReDim items(0 To tbl.ListRows.Count - 1, 0 To tbl.ListColumns.Count - 1)
For i = 0 To tbl.ListRows.Count - 1
For j = 0 To tbl.ListColumns.Count - 1
items(i, j) = tbl.DataBodyRange.Cells(i + 1, j + 1).Value
Next j
Next i
TableDataFormat = items
Exit Function
ErrorHandler:
TableDataFormat = Nothing
MsgBox "Error: " & Err.Description
End Function
使用方法: TableDataFormat関数
TableDataFormat関数は、引数としてExcelのテーブル名を受け取ります。このテーブル名は、ワークシート上で定義されたテーブルの名前である必要があります。
例
ExcelにSalesDataという名前のテーブルがある場合、次のように関数を呼び出すことができます。
VBAエディター内で新しいサブルーチンを作成するか、即時ウィンドウを使用します。
次のコードを実行して関数をテストします。
Sub TestTableDataFormat()
Dim output As Variant
output = TableDataFormat("SalesData")
' 出力結果をデバッグウィンドウに表示
Dim i As Long, j As Long
For i = LBound(output, 1) To UBound(output, 1)
For j = LBound(output, 2) To UBound(output, 2)
Debug.Print output(i, j)
Next j
Next i
End Sub