前提
VBAでPostgreSQLのテーブル「t_社員マスタ」にインポートするCSVファイルを出力するマクロを作っています。
該当のソースコード
VBA
1Sub writeCSV() 2 Dim ws As Worksheet 3 Dim maxrow As Long 4 Dim fileNo As Integer 5 Dim wrow As Long 6 Dim wcol As Long 7 Dim i As Long 8 Dim val As String 9 Dim out_line As String 10 Const stCol = 1 11 Const enCol = 144 12 Dim arrVal(enCol - stCol) As String 13 Set ws = Worksheets("Sheet1") 14 maxrow = ws.Cells(Rows.Count, 1).End(xlUp).Row 15 fileNo = FreeFile 16 17 Application.ScreenUpdating = False 18 19 ' ---------------------------- 20 ' ファイルの出力処理 21 ' ---------------------------- 22 Dim myFileName, fileName, fileDateNm As String 23 24 ' ファイル名を作成する 25 fileDateNm = Replace(CStr(Date), "/", "") 26 fileName = "社員マスタ更新データ_" & fileDateNm 27 ' ダイアログ表示 28 myFileName = Application.GetSaveAsFilename(InitialFileName:=fileName, FileFilter:="CSV ファイル (*.csv),*.csv") 29 ' キャンセルなら終了 30 If myFileName = "False" Then 31 Exit Sub 32 End If 33 ' 保存 34 Open myFileName For Output As #fileNo 35 For wrow = 3 To maxrow 36 i = 0 37 For wcol = stCol To enCol 38 '1データ取得 39 val = ws.Cells(wrow, wcol).Value 40 'データをダブルクオートでくくり、配列へ格納 41 arrVal(i) = wrap_data(val) 42 i = i + 1 43 Next 44 'カンマで連結 45 out_line = Join(arrVal, ",") 46 Print #fileNo, out_line 47 Next 48 Close #fileNo 49 50 MsgBox ("CSVファイルを「Shft_JIS」で出力しました。レコード部分のみ出力しています。") 51 52 Application.ScreenUpdating = True 53End Sub 54 55'入力文字列をダブルクオートでくくる 56Private Function wrap_data(ByVal val As String) As String 57 wrap_data = """" & val & """" 58End Function
発生している問題・エラーメッセージ
上記コードで「Shft_JIS」形式のCSVが出来ましたが、SQL上でCOPYコマンドを実行したところ、以下のエラーメッセージが出ました。
COPY t_社員マスタ FROM '/public/csv/社員マスタ更新データ_20230206.csv' CSV ERROR: 符号化方式"UTF8"で無効なバイトシーケンスです: 0x8d CONTEXT: t_社員マスタ_マクロテストのCOPY。行番号 1
実現したいこと
UTF-8でないと受付ないという意味だと思うので、上記コードを書き換えて「utf-8」形式のCSVを出力させたいです。
試したこと
下記URLを参考にし、コードを作成し直そうと思っています。
サンプルプログラムでは、ADODB.Streamオブジェクトを
- 生成
- 文字コード設定
- オープン
- 1行ずつ文字列を流し込む
- CSVに保存
- クローズ
という流れで作成するイメージは理解できましたが、元のコードで既に「Open myFileName」とオープンを宣言してしまっています。
Openをどのように書き直せば、UFF-8に設定できるようになるでしょうか?
あるいは、他に参考になるURLなどがあれば教えていただければ幸いです。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
PC:Windows11
ソフト:Microsoft365 Excel
参考URL:エクセルVBAで文字コードUTF-8のCSVファイルを書き出す方法
0 コメント