Excel VBA で CSVファイル を SQL Server に登録してみる
環境はWin10 Pro x64 + Excel2013 x32 + SQL Server 2016 Express x64
使用したデータはこちら郵便番号検索の17ISHIKA.CSV。
使用したテーブルはこちら
検索してみると native driver 使ってる例が多いんだけど、odbcで試してみる
CSVのバリデーションチェックは どういうのがいいんだろうなぁ・・・
Connection.CursorLocation = adUseClient の記述がないと Recordset.RecordCount = -1 に固定となること位かな?
メモなので 必要な部分のみ抜き出し(transaction 位 書けとも思うが)
Dim adoCon As ADODB.Connection Dim adoRst As ADODB.Recordset Dim vAry As Variant Dim host As String Dim user As String Dim pass As String Dim conn As String Dim strSQL As String Dim fd As Integer Dim strLine As String Dim fName As String host = "SQLSVODBC32" 'コンパネから odbc 32bit で設定 user = "userName" pass = "passwd" fName = "/path/to\17ISHIKA.CSV" fd = FreeFile conn = "DSN=" & host & ";UID=" & user & ";PWD=" & pass Open fName For Input As #fd Set adoCon = New ADODB.Connection adoCon.ConnectionString = conn adoCon.CursorLocation = adUseClient Call adoCon.Open strSQL = "TRUNCATE TABLE POSTAL" Call adoCon.Execute(strSQL, 0) While Not EOF(fd) Line Input #fd, strLine strLine = Replace(strLine, """", "") vAry = Split(strLine, ",") strSQL = "INSERT INTO POSTAL (POSTAL, CITY, ADRLINE1) VALUES " strSQL = strSQL & "('" & Trim(vAry(2)) & "','" & Trim(vAry(7)) & "','" & Trim(vAry(8)) & "')" Call adoCon.Execute(strSQL, 0) Wend adoCon.Close Set adoCon = Nothing Close #fd