VBAサンプル集CSVの出力(書き出し)方法
シート内容をCSV出力(書き出し)する方法です。CSVの読込は、VBAでのCSVの扱い方まとめ こちらを参照して下さい。以下では、2通りの方法を紹介します。エクセルの機能をそのまま利用します ※csv出力時日付がm/d/yyyyになってしまう場合の対処 日付がm/d/yyyyになってしまう場合に、yyyy/m/dに…
'不要な先頭の行列を削除します。 If Not rngStart Is Nothing Then If rngStart.Row > 1 Then Range(Rows(1), Rows(rngStart.Row - 1)).Delete End If If rngStart.Column > 1 Then Range(Columns(1), Columns(rngStart.Column - 1)).Delete End If End If
ActiveWorkbook.SaveAs Filename:=varFile, FileFormat:=xlCSV, CreateBackup:=False ActiveWindow.Close
MsgBox ("CSV出力しました。" & vbLf & vbLf & varFile) End Sub
※csv出力時日付がm/d/yyyyになってしまう場合の対処日付がm/d/yyyyになってしまう場合に、yyyy/m/dにする場合には、 ・SaveAsの引数に、Local:=Trueを追加 ・表示形式は「*2012/3/14」のような*付き以外書式を選択 「*2012/3/14」になっているとm/d/yyyyになってしまいます。
引数で、ワークシートと開始セルを指定できるようにしています。 これにより、どのシートからも使えるようになります。 Application.GetSaveAsFilename保存ファイルを選択するダイアログを表示します。 シート名+「.csv」を初期のファイル名にしています。 拡張子は、csvのみ指定しています。 開始セルより上の行、左の列は削除して、CSVに出力されないようにしています。 処理の流れは、
保存ファイルの選択 ↓ シートの新規ブックへのコピー ↓ 不要な行列の削除 ↓ 名前を付けて保存しかし、これでは、いろいろ不都合な場合があります。 他システム、特にDB等へアップロードする場合には、このままでは出来ない事があるのです。 例えば、日付は、表示形式のままの文字列で出力されてしまいます。 また数値もカンマ付の場合は、"12,345"のように、文字列として出力されます。 CSV出力前に、当該シートの書式を全て直してから行えばよいのですが、 書式の変更も面倒なら、また元に戻す必要があり、何かと不都合です。
このような場合は、直接CSVを出力するようにします。 直接CSVを出力varFile = Application.GetSaveAsFilename(InitialFileName:=sht.Name & ".csv", _ FileFilter:="CSVファイル(*.csv),*.csv", _ FilterIndex:=1, _ Title:="保存ファイルの指定") If varFile = False Then Exit Sub End If
'開始行列、終了行列を取得 If rngStart Is Nothing Then lngRowMin = 1 lngColMin = 1 Else lngRowMin = rngStart.Row lngColMin = rngStart.Column End If With rngStart.CurrentRegion lngRowMax = .Item(.Count).Row lngColMax = .Item(.Count).Column End With
Set TS = FSO.CreateTextFile(Filename:=varFile, Overwrite:=True)
For i = lngRowMin To lngRowMax TS.WriteLine CSV_EditRec(sht, i, lngColMin, lngColMax) Next
TS.Close Set TS = Nothing Set FSO = Nothing
※参照設定をしています。「ツール」→「参照設定」に、「Microsoft Scripting Runtime」にチェックを付けてください。 FileSystemObjectの詳細については以下を参照してください。 第119回.ファイルシステムオブジェクト(FileSystemObject)|VBA入門
・FileSystemObjectオブジェクトの使用方法 ・FileSystemObjectオブジェクトのプロパティとメソッド ・FileSystemObjectオブジェクトのメソッドの戻り値 ・FileSystemObjectオブジェクトの使用例 ・FileSystemObjectオブジェクトの関連記事と実践例
FileSystemObjectを使用していますが、昔からある、 Open ファイル For Output As # 1 こちらでも良いです。 処理内容は単純です。 要は、Function CSV_EditRec この内容だけでしょう。 セルの値を判定し、データ内容によって、編集処理を分けています。 ここでは、数値、日付、「"」や「,」を含む文字列、その他、の4通りです。
日付の場合は、「-」の入った電話番号が日付判定される場合があるので、除外しています。 「CSV_EditRec」での編集は、CSVの使い道により、変更を加える必要があります。 例えば、日付は、「#2011/05/17#」のようにする必要がある場合もでてくるでしょう。
いずれにせよ、上記モジュールはかなり汎用的に作成してありますので、 コピペで、いろいろ使い回しが可能だと思います。 本サイトにあるCSV関連記事一覧 VBAでのCSVの扱い方まとめ・本サイトにあるCSV関連記事一覧 ・CSVの読込方法 ・CSVの読み込み方法(改) ・CSVの読み込み方法(改の改) ・CSVの読み込み方法(ジャグ配列) ・CSVの読み込み方法(ジャグ配列)(改) ・CSVの出力(書き出し)方法 ・UTF-8でCSVの読み書き(ADODB.Stream) ・ADOでCSVの読み込み(SQL)
CSVの読込方法・もっとも簡単かつ良くあるCSV読み込みVBAコード ・「,」「"」に対応したCSV読み込みVBAコード ・CSVをExcelブックとして開くVBA ・クエリーテーブルを使ったCSV読み込みVBAコード ・その他のCSV読み込み方法
CSVの読み込み方法(改) CSVの読み込み方法(改の改) ・CSVの形式について ・CSV読み込みVBAコード ・配列を使ってシートにまとめて出力する場合 ・QueryTablesを使ったCSV読み込みVBAコード ・本サイトにあるCSV関連記事一覧 CSVの読み込み方法(ジャグ配列) ・CSVの読み込み方法(改の改)での予告 ・CSV読み込みでのジャグ配列の使いどころ ・CSV読み込みVBAコード:ジャグ配列バージョン ・最後に ・本サイトにあるCSV関連記事一覧 CSVの読み込み方法(ジャグ配列)(改) ・CSV読み込みVBAコード:CSVの読み込み方法(ジャグ配列)(改) ・CSVの読み込み方法(ジャグ配列)(改)の使用例 ・本サイトにあるCSV関連記事一覧 CSVの出力(書き出し)方法 ・エクセルの機能をそのまま利用します ・直接CSVを出力 ・本サイトにあるCSV関連記事一覧 UTF-8でCSVの読み書き(ADODB.Stream) ・アクティブシートの内容をUTF-8でCSV出力します ・UTF-8のCSVを読込、シートに出力します ・ADODB.Streamのメソッドとプロパティ ・本サイトにあるCSV関連記事一覧 ADOでCSVの読み込み(SQL)・CSVテストデータ ・ADOでCSV読込のVBA ・ADO使用時の注意点 ・ADOレコードセットをCSV出力 ・ADOでTSVの読み込み ・ADOでCSVの読み込みについて ・本サイトにあるCSV関連記事一覧
※UTF-8に対応している記事と対応していない記事があります。 同じテーマ「マクロVBAサンプル集」の記事 新着記事 NEW ・・・新着記事一覧を見る アクセスランキング ・・・ ランキング一覧を見る このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。 掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。 本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。 This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.