前提
VBAでボタンをクリックするとエクセルからCSVに出力するマクロを作っています。
該当のソースコード
CSV出力するコードです。
シート1行目にA1セルにシートのタイトル、2行目に表のタイトル行があります。
3行目から下のみを出力します。
VBA
1Sub CSV出力_詳細指定() 2 Dim Filename As String 3 Filename = Mid(ActiveWorkbook.Name, 1, InStrRev(ActiveWorkbook.Name, ".") - 1) & EXT 4 5 Dim Filepath As String 6 Filepath = ActiveWorkbook.Path & "\" & Filename 7 8 Call csv.Output(TargetSheet:=ActiveSheet, Filepath:=Filepath, _ 9 StartRow:=3, StartCol:=1, _ 10 WithQuoteCols:="1,2", _ 11 Charset:="utf-8") 12 13 MsgBox Filepath & "にCSVファイルを、文字コード「UTF-8」で出力しました。" & Chr(13) _ 14 & "3行目から下のみ出力しています。" & Chr(13) 15End Sub
実現したいこと
上のコードでは、対象範囲の1列目と2列目をダブルクオーテーションで囲んで出力させますが、実際の表は50列まであるので、より広い範囲の列の値を「" "」で囲んで出力させたいです。
試したこと
5列目くらいまでの少ない範囲であれば
WithQuoteCols:="1,2,3,4,5",
と書けば良いですが、50までいちいち書くのは少し大変です。
省略の仕方を調べても見当たらなかったのですが、やはり面倒でも書くべきでしょうか。
なるべく少ないコードで書ける方法があれば、アドバイスいただけると幸いです。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
PC:Windows11
ソフト:Microsoft365 Excel
csv.Outputの中身は?
それを改造すれば良いのでは?
> Call csv.Output(TargetSheet:=ActiveSheet, Filepath:=Filepath, _
> StartRow:=3, StartCol:=1, _
> WithQuoteCols:="1,2", _
> Charset:="utf-8")
https://www.excelspeedup.com/csvsyuturyoku/
上記の記事で紹介されている(ダウンロードしたマクロ有効ブックに保存されている)
マクロを使用されている、ということでしょうか。
> 対象範囲の1列目と2列目をダブルクオーテーションで囲んで出力させますが、
> 実際の表は50列まであるので、より広い範囲の列の値を「" "」で囲んで出力させたい
> 50までいちいち書くのは少し大変です。
csv モジュールのコードを改変して範囲指定を簡略化できるようにするか、
引数 WithQuoteCols に渡す文字列(列番号リスト)をコードによって生成する
ようになさればよろしいでしょうけど、いずれにせよ For 文の使用が必須となるはず。
コメントありがとうございます。
csv.Outputの内容が不足していました。
そうです、そちらのサイトで紹介されているマクロを使用しました。

回答1件
あなたの回答
tips
プレビュー