フィールドのデータ型を反映させる
ユーザー定義関数「getDataType」を利用して転記先に書式を設定する
Sub getDataTypeを使用して書式設定() Dim myCon As New ADODB.Connection, myRS As New ADODB.Recordset, FileName As String Dim myTbl As String, myRng As Range, i As Integer '接続先のファイル、取込元テーブル、取込先を指定 FileName = ThisWorkbook.Path & "\mdb\2-sampleDB.mdb" myTbl = "伝票一覧" Set myRng = ThisWorkbook.Worksheets(1).Range("A1") myCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName myRS.Open myTbl, myCon 'データを転記 myRng.Offset(1).CopyFromRecordset myRS For i = 0 To myRS.Fields.Count - 1 'フィールド見出しを転記 myRng.Offset(0, i) = myRS.Fields(i).Name '書式設定 Range(myRng.Offset(0, i), myRng.Offset(0, i).End(xlDown)) _ .NumberFormatLocal = getDataType(myRS.Fields(i).Type) Next '列幅調整 myRng.CurrentRegion.EntireColumn.AutoFit myRS.Close: Set myRS = Nothing myCon.Close: Set myCon = Nothing End Sub
Typeプロパティの値を変換するユーザー定義関数「getDataType」
Function getDataType(tmpLng As Long) As String Dim tmpStr As String '受け取った定数に応じた書式を文字列で設定 Select Case tmpLng Case adSmallInt: tmpStr = "0" Case adInteger: tmpStr = "0" Case adCurrency: tmpStr = "\#,##0;\-#,##0" Case adDate: tmpStr = "[$-411]ggge.m.d;@" Case adBoolean: tmpStr = "G/標準" Case adVarWChar: tmpStr = "@" Case Else: tmpStr = "G/標準" End Select '書式設定を文字列として返す getDataType = tmpStr End Function
任意のフィールドのデータ型は、FieldオブジェクトのTypeプロパティを使用する。
Typeプロパティに関しては、こちらを参照。
Excelに書式を転記するには、Typeプロパティの値をExcelでの書式設定を行うNumberFormatLocalプロパティに指定できる値に変換する