プチIT化 PR

【Excel】CSVファイル出力のやり方と簡単マクロサンプル

記事内に商品プロモーションを含む場合があります。
当サイトは、アフィリエイト広告を利用しています。

こんにちは、わたあめです。Excelのデータをcsv形式で出力したいという時ありますよね?!今日はその方法についての記事です。

  • ExcelのCSV出力の仕方を知りたい
  • 項目に囲い文字(”:ダブルコーテーション)を指定して出力したい
  • 区切り文字(カンマ(,)やタブ)を指定して出力したい

という事を行いたい方向けの記事です。Excelのcsvエクスポート機能では、囲い文字や区切り文字は指定できないので、VBAマクロで指定する方法を紹介しています。もちろんサンプルマクロも用意していますよ!

それでは、いってみましょう。

Excelのエクスポート機能でCSV出力

CSV出力手順

一番簡単な方法としては、Excelのエクスポート機能を利用することです。手順は以下です。

  1. [ファイル]>[エクスポート]を順にクリック
  2. [ファイルの種類の変更]>[csv(カンマ区切り)(*.csv)]をダブルクリック
  3. 保存したいフォルダを選択>[ファイル名]にファイル名を指定>[保存]ボタンをクリック

これで、csv出力できたかと思います!

CSVエクスポート時のメッセージについて

Excelの機能を利用する時に以下のメッセージが出る事があります。

選択したファイルの種類は複数のシートを含むブックをサポートしていません

このメッセージは簡単に言うと、「Excelでは複数シート扱えるけど、csvでは複数は無理だよ!」と言う意味です。csv形式で出力するときは1シートしか出力できないので、現在選択されているシートしか出力されません。出力したいシートを選択してエクスポートを実施するようにすればOKです。

CSV(カンマ区切り)として保存する場合、ブックの一部の機能が失われる可能性があります。

このメッセージは簡単に言うと、「csvはカンマ区切りのテキストデータなので、Excelのリッチな機能はエクスポートできないよ!」という意味です。データだけなので例えば、セルに付けた塗りつぶしの色や罫線、フィルタ設定等はエクスポートできません。色情報などExcel独自の機能を残したい場合は、Excel形式で保存してくださいね!

CSVエクスポート機能の問題点

Excelが用意しているエクスポート機能でCSV出力するのは手軽で便利なのですが、少し問題があります。それは…!

  • 項目データひとつひとつにダブルクォーテーションを付けることが出来ない
  • 改行コードを指定することが出来ない

という問題が挙げられます。細かく指定してエクスポートする事が出来ないのです。細かく設定を行うためには、VBAマクロを利用します!次章に記載していきます。

ExcelでCSVを出力するVBAマクロサンプル

Excelの表をcsv形式で別ファイルに出力するマクロサンプルを説明していきます。今回例に使用するデータは以下のような表です。

早速サンプルコードを載せます。

Sub exportCSV()

'===================================
' CSVを出力するマクロサンプル
'===================================

' 変数定義
Dim ws As Worksheet
Dim filePath As String
Dim maxRow, maxCol As Integer
Dim i, j As Integer
Dim tmpStr As String
Dim spr, enc, lineCd As String

' 変数設定
Set ws = Workbooks("Book1").Sheets("Sheet1") ' ブックとシート名
filePath = "C:\Users\*****\Desktop\export.csv" 'ファイルパス
tmpStr = "" ' 一時的文字列の初期化
spr = "," ' 区切り:「","」(カンマ) / 「vbTab」(タブ)
enc = """" ' 囲い文字:「""""」(ダブルクォーテーション) / 「""」(囲い無し)

' 表の最終行を取得(セルA1起点)
maxRow = ws.Range("A1").End(xlDown).Row

' 表の最終列を取得(セルA1起点)
maxCol = ws.Range("A1").End(xlToRight).Column

' ファイル作成
Open filePath For Output As #1
For i = 1 To maxRow
tmpStr = ""

For j = 1 To maxCol
tmpStr = tmpStr & """" & Worksheets("Sheet1").Cells(i, j).Value & """"
If j <> maxCol Then
tmpStr = tmpStr & spr
End If

Next

Print #1, tmpStr & vbLf; '改行コード:「vbLf;」(LF) / 「」(CRLF)※&以降を消去
Next
Close #1

End Sub

' 変数設定の部分に設定値がまとまっているので(改行コード以外)その部分を環境に合わせて変更すればOKです。各項目の設定値については以下です。

wsエクスポートの元データとなるExcelファイルのブック名とシート名を設定します。例ではBook1のSheet1を指定しています。
filePathcsvファイルの出力先を指定します。今回はデスクトップに"export.csv"というファイル名で出力する設定にしています。"*****"部分はユーザ名となるので、環境に合わせてご設定くださいね。
spr区切り文字を指定します。カンマで区切りたい時はspr = ","と記載し、タブで区切りたい時はspr = vbTabと記載します。
enc囲い文字を指定します。ダブルクォーテーションの時はenc = """"と記載し、囲い文字なしの時はenc = ""と記載します。

改行(LFかCRLF)については、変数に設定することが上手くいかなかったので、Print文の所で指定しています。以下のように書き換えてください。

CRLFPrint #1, tmpStr
LFPrint #1, tmpStr & vbLf;

さいごに

いかがだったでしょうか!VBAはExcelの画面操作から出来ない操作が出来たりするので奥深いなと改めて思った瞬間でした!この記事が少しでもお役に立てていれば幸いです。それでは、また!