読者です 読者をやめる 読者になる 読者になる

asaworks

自分の技術備忘録と雑談

【ExcelVBA】ExcelにてADOを使用してSQLを使用する

f:id:asa-works:20161107230811p:plain

ExcelでADO接続する

    
接続定義のメモ

  With cn
    .Provider = "Microsoft.ACE.OLEDB.12.0"'------------①
    .Properties("Extended Properties") = "Excel 12.0;HDR=No;IMEX=1"'--②
    .Open ThisWorkbook.FullName
  End With

①Provider ProviderはProvider for Microsoft Jet を指定する。 Excel 2003までの形式は8.0、Excel2007形式には12.0 ②接続プロパティ ▼Excel 12.0 ISAMバージョンを記載。 Jetと同様で2003以前の形式の場合は8.0,、2007形式の場合は12.0 ▼HDR=No HDR=Yes No 1行目をヘッダーとするならYESに。ヘッダーが無い場合はNOに。 以降のSQL文でヘッダー無しの場合は「A列、B列、C列」を順に「F1,F2,F3・・・」とする。 ▼IMEX=1 IMEXを指定しない場合、文字と数字のどちらが多いかを判断し、 自動でデータ型が解釈されるらしい。 数字が多かった場合、数字解釈されない文字列はNULLとなってしまう模様。 1としておくとデータ型が全て文字列として処理されるらしい。 以降、SQLをセットしてレコードセットへ読み込み、別シートへ書き出す処理を行う。 このへんはAccessでADOを使用する際と同様の処理になる。 SQL文のメモ シート、セルの指定→FROM [Sheet1$A1:C100]・・・このようにSheet名の後ろに「$」をつける。 セル指定の無い場合は[Sheet1$」でよい。 レコードセットの値を別シートへ貼り付けの例
ここでのシート、セルの指定は普通に。↓ Sheet2.Cells(1, 1).CopyFromRecordset rs


Accessで処理すればいいじゃん。って・・・
内情により、Excelになってしまうことが多々あります。。。