【エクセルVBA初心者用】手軽にCSVデータを作る

エクセルでCSVデータを作るときに、エクセル標準の機能だけでCSVデータを作るときには、次のような手順で操作をする必要があります。

  • CSV化したいシートを表示
  • 「名前を付けて保存」でCSVデータとして保存
  • (エクセルをいったん閉じる)

実際に、この操作をしてみるとわかりますが、この処理は、意外に手間がかかります。

さらに、この手順で作成したCSVファイルは、作成されたファイルの拡張子が「.csv」となってしまうため、そのままでは使いにくい場合もあります。

たとえば、弥生会計に仕訳データをインポートする場合、インポート画面の初期状態では、拡張子が「.txt」のファイルしか表示されません。そのため、「.csv」のファイルを読み込むためには、いったん「すべてのファイルを表示する」操作をしてからでないと読み込むことができません。そうかといって、毎回、拡張子を「.txt」に変更するのも面倒です。

そこで、今回は、VBAでマクロを作ってCSVデータを作る方法を紹介します。VBAでCSVファイルを出力するようにすれば、手間なく、好きな拡張子でファイルを作成することができるようになります。


今回作るプログラムの概要

今回は、「csv」シートのデータをCSVデータとして出力します。

また、エクセルファイルと同じ場所に、同じ名前で、拡張子を「.txt」にしてファイルを作成します。たとえば、元々のファイルが「C:¥excel¥data.xlsm」であれば、CSVファイルを「C:¥excel¥data.txt」という名前で保存します。

エクセルの標準機能を自動実行するマクロを作る

VBAを使ってCSVファイルを作る方法には、いろいろあります。ここでは、できるだけエクセルの標準機能を使ってCSVファイルを作る方法を紹介します。

なお、きめ細かい処理をしたい場合には、すべての処理をVBAで行うようにしましょう。その方法は、下記ページで解説しています。

標準モジュールに入力するVBAのプログラム

それでは、実際にプログラムを入力してみます。

下記のプログラムを標準モジュールに入力してください。

Sub CSVシートをCSV形式で保存()
  Const EXT = ".txt"  '拡張子
  Const SHEET = "csv" 'CSV化するシートのシート名
  
  Dim FSO As Object
  Set FSO = CreateObject("Scripting.FileSystemObject")
  
  Dim iWb As Workbook    '起動元のブック ※あらかじめ保存しておく必要あり
  Set iWb = ThisWorkbook
   
  iWb.Worksheets(SHEET).Copy
  
  Dim oWb As Workbook    'コピー先のブック
  Set oWb = ActiveWorkbook
  
  Application.DisplayAlerts = False
  oWb.SaveAs iWb.Path & "¥" & FSO.GetBaseName(iWb.Name) & EXT, FileFormat:=xlCSV, local:=True
  Application.DisplayAlerts = True
    
  oWb.Close
  
  iWb.Activate
  
  MsgBox "ファイルを保存しました"
End Sub

このプログラム(マクロ)を実行すると、csvシートの内容がCSVファイルとして保存されます。

なお、一回も保存したことがないエクセルファイルで、このプログラムを実行するとエラーが出ます。このプログラムを実行する前に、一度はエクセルファイルを保存しておいてください。

プログラムの解説

それでは、プログラムの中身を解説していきます。

定数宣言

  Const EXT = ".txt"  '拡張子
  Const SHEET = "csv" 'CSV化するシートのシート名

このプログラムで使う定数を宣言しています。出力するときの拡張子や、出力対象となるシート名を変えたいときには、ここを変えましょう。

FileSystemObjectの宣言

  Dim FSO As Object
  Set FSO = CreateObject("Scripting.FileSystemObject")

FileSystemObjectオブジェクトを使うための文です。後で、ファイル名から拡張子を取り除くときに使います。

起動元ブックを変数「iWB」に格納

  Dim iWb As Workbook    '起動元のブック ※あらかじめ保存しておく必要あり
  Set iWb = ThisWorkbook

今回、起動元ブック(=このマクロが入っているブック=ThisWorkbook)を変数「iWB」にセットしています。

以降、「iWB」を起動元ブックの別名として使うことができます。

iWBという変数名は「input Workbook」のイメージで命名しています。

「CSV」シートをコピーして、別ブックを作成する

  iWb.Worksheets(SHEET).Copy

「iWB」の「Worksheets(SHEET)」を「Copy」して、別ブックを作成します。

この文を理解するためには、以下の3つのポイントを押さえましょう。

1. 「iWB」→「起動元ブック」

「iWB」は、「起動元ブック」を表しています。

2. 「SHEET」→「"csv"」

このプログラムの2行目で、定数SHEETには「csv」という値を入れています。

ですから、「Worksheets(SHEET)」は「Worksheets("csv")」、つまり「CSV」シートを表すことになります。

3. 引数なしのCopyメソッド=別ブックへのコピー

Copyメソッドは、引数を指定しない場合には、指定したシートを別ブックにコピーする意味になります。

つまり、この文は、「起動元ブック」の「csvシート」を「別ブックにコピー」するという意味になります。

コピー先のワークブックを変数「oWB」に格納

  Dim oWb As Workbook    'コピー先のブック
  Set oWb = ActiveWorkbook

先ほどの、Copyメソッドを使うと、シートがコピーされた後、「コピー先のシート」がアクティブな状態になります

そこで、変数oWBに現在アクティブなブック(ActiveWorkbook)を入れることで、コピー先のワークブックを変数oWBにセットすることができます。

以降、「oWB」を、コピー先のブックの「別名」として使うことができます。

「oWB」という変数名は「output Workbook」のイメージで命名しています。

コピー先のワークブックをCSV形式で保存

  Application.DisplayAlerts = False
  oWb.SaveAs iWb.Path & "¥" & FSO.GetBaseName(iWb.Name) & EXT, FileFormat:=xlCSV, local:=True
  Application.DisplayAlerts = True

17行目の「oWB.SaveAs」の行で、コピー先のWorkbookを「名前を付けて保存」する処理をしています。

ただし、それだけだと、各種警告メッセージが表示されて邪魔です。

そこで、16行目の「Application.DisplayAlerts = False」で警告メッセージを表示させないようにして、18行目の「Application.DisplayAlerts = True」で、元に戻します

17行目の「oWB.SaveAs」の引数は、次のように指定をしています。

保存するファイル名

保存するファイル名は「iWb.Path & "¥" & FSO.GetBaseName(iWb.Name) & EXT」で表されます。

たとえば、元々のファイルが「C:¥excel¥data.xlsm」という名前だった場合、先ほどの式は、次の4つを結合した結果になります

式の計算結果 補足
iWb.Path C:¥Excel 起動元ブックのファイルパス(=格納されているフォルダ)
"¥" ¥  
FSO.GetBaseName(iWb.Name) data ファイル名「data.xlsm」の「.」以降を取り除いた部分
EXT .txt 1行目で定義した定数EXTの内容
計算結果 C:¥Excel¥data.txt
その他の引数
引数 意味
FileFormat:=xlCSV CSVファイルとして出力する
local:=True 日付データを、正しい書式(yyyy/mm/dd形式)でCSVデータに出力します
※これを指定しない場合、日付の形式が変わってしまいます。

コピー先のワークブックを閉じる

  oWb.Close

コピー先のワークブックを閉じます。

元のワークブックを表示する

  iWb.Activate

元のワークブックを表示します。

処理終了のメッセージを表示する

  MsgBox "ファイルを保存しました"

メッセージボックスに「ファイルを保存しました」と表示します。

マクロを実行する

上記マクロを実行すると、csvシートの内容がCSVファイルに保存されます。

さらに、このマクロをショートカットキーに割り当てると、キー操作だけで、マクロが起動できるようになります。たとえば、Ctrl+Shift+Zに、このマクロを割り当てれば、Ctrl+Shift+Zを押すだけでCSVファイルを出力することができます

ショートカットキーを割り当てる手順は、下記ページをご覧ください。

まとめ

マクロを使うことで、面倒なCSV出力作業を、ボタン1つでできるようにになります。

まずは、この記事のような、手軽な方法で自動化をしてみてください。

エクセル基礎講座 「無料」動画マニュアル

「経理事務のためのエクセル基礎講座(初級編)」(動画マニュアル 総収録時間162分)を無料プレゼント中です!

このマニュアルで解説していることを一通り学べば、経理事務を行う上で最低限必要となる知識が得られます。

ご登録者の方には、合わせて、公認会計士が実体験を通して身に付けたエクセルを使う技をメールにてお伝えしていきます!

無料動画講座 登録フォーム

※ご登録頂いたメールアドレスに、エクセルを使いこなすための情報を配信するメールセミナー「エクセル倍速講座」も合わせて配信させていただきます。