0
1
背景、状況
VBAでボタンをクリックするとエクセルからCSVに出力するマクロを作っています。
マクロの作成依頼者からは以下の要望を含めてコードを書くように依頼されました。
- PostgreSQLにデータをインポートできるCSVを出力
- CSVの文字コードは全て「Shft_JIS」
- SQLの文字データ型は全て「character」
- 全てのセル値をダブルクオートで囲んで出力
- Openステートメントでファイルを開く
- Printステートメントでデータ入力処理を行う
該当のソースコード
VBA
1Public Sub CSV出力() 2 Dim ws As Worksheet 3 Dim maxrow As Long 4 Dim csvFile As String 5 Dim fileNo As Integer 6 Dim wrow As Long 7 Dim wcol As Long 8 Dim i As Long 9 Dim val As String 10 Dim out_line As String 11 Const stCol = 1 12 Const enCol = 144 13 Dim arrVal(enCol - stCol) As String 14 15 csvFile = ActiveWorkbook.Path & "sample.csv" 16 17 Set ws = Worksheets("Sheet1") 18 maxrow = ws.Cells(Rows.Count, 1).End(xlUp).Row 19 fileNo = FreeFile 20 Open csvFile For Output As #fileNo 21 For wrow = 3 To maxrow 22 i = 0 23 For wcol = stCol To enCol 24 '1データ取得 25 val = ws.Cells(wrow, wcol).Value 26 'データをダブルクオートでくくり、配列へ格納 27 arrVal(i) = wrap_data(val) 28 i = i + 1 29 Next 30 'カンマで連結 31 out_line = Join(arrVal, ",") 32 Print #fileNo, out_line 33 Next 34 Close #fileNo 35 36 MsgBox ("CSVファイルを「Shft_JIS」で出力しました。レコード部分のみ出力しています。") 37End Sub 38 39'入力文字列をダブルクオートでくくる 40Private Function wrap_data(ByVal val As String) As String 41 wrap_data = """" & val & """" 42End Function
知りたいこと
依頼者にコードのレビューを実施したところ、「データを配列へ格納する」手順は良いが、これだけだと、「ただ格納しているだけでSQLに入れられるように書き込みができていない」、という指摘を受けました。
上記のマクロでCSV自体は問題なく出力できており、解決策を求めているわけでは無いので、Q&Aではなく、意見交換とさせていただきました。
入力処理に関して皆さんはどう書いているかご意見いただけると幸いです。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
PC:Windows11
ソフト:Microsoft365 Excel
回答2件