Excel シートの内容を CSV ファイルにコピペしたい場合があります。
CSV ファイルというのは「*.csv」という形式で表されるデータ形式で、見た目上は普通の Excel シートと変わりません。
CSVファイルの一例↓
CSV ファイルの主な用途は「システム間のデータの受け渡し」です。
・ある会計ソフトのデータを CSV ファイルにエクスポート後に加工して別の会計ソフトにインポートする
・販売管理システムのデータを CSV ファイルにエクスポート後に加工して会計ソフトにインポートする
というように、
・システムからのエクスポート(データの出力)
・システムへのインポート(データの入力)
に使うことができるのが CSV ファイルなのです。
データをCSVファイル化することによって、システムからシステムにデータの受け渡しができるということです。
さて、Excel シートで編集したデータを別のシステムにインポートするためには、インポートできるようなデータの並びにして CSV ファイルにコピペすることによってCSVファイル化します。
今日は「Excel VBA(マクロ)を使って Excel シートの内容を CSV ファイルにコピペする方法」についてお話しします。
1、Excel ファイルとは別にCSVファイルを準備する
次のような Excel シートの「Sheet1」があったとします。
ある会計ソフトに仕訳データをインポートするためにデータを上記 Excel シートの並びにする必要があるものとします。
さて、会計ソフトにインポートできるようにするためには、この Excel シートを CSV 形式にしなければなりません。
そのようなマクロ(Excel VBA)を作りたいと思います。
準備としてまず空の CSV ファイル作っておきます。ファイル名は「テスト.csv」とします。
2、Excel シートの内容を CSV ファイルにコピペする方法
実行する操作
Excel シートに組み込んだマクロで以下の操作を実行します。
①CSV ファイル「テスト.csv」を開く
②Excel シートの所定の範囲をコピー
③CSV ファイルに貼り付け(「値」の形式で貼り付け)
④CSV ファイル「テスト.csv」を閉じる
③では形式を選択して貼り付けで「値」として貼り付けるようにしています。
仮に元のExcel シートの一部のセルに数式が入っている場合、普通に貼り付けるだけだと上手くいかない場合があるため、数式や書式などは無視して「値」のみをコピペするようにします。
プログラミングコード
Excel VBA のコードを以下に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
Sub Copy_To_CSV_File() Dim CSV_File_Name 'CSVファイルの名前' Dim Book_Name 'ファイルの名前' Application.DisplayAlerts = False '警告やメッセージを表示しないようにする' CSV_File_Name = ThisWorkbook.Path & "\テスト.csv" '絶対パスでCSVファイル名を指定' 'CSVファイルが存在しない場合の処理' If Dir(CSV_File_Name) = "" Then MsgBox "「テスト.csv」が存在しません。" Exit Sub Else End If Workbooks.Open (CSV_File_Name) 'CSVファイルを開く' Book_Name = ActiveWorkbook.Name ActiveSheet.Range("A1:ZZ1000").ClearContents 'CSVファイルの所定の範囲をクリアする' ThisWorkbook.Worksheets("Sheet1").Range("A1:ZZ1000").Copy 'ExcelファイルのSheet1のA1~ZZ1000までの範囲をコピー' ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValues 'CSVファイルのセルA1に「値」の形式で貼り付け' Workbooks(Book_Name).Close SaveChanges:=True 'CSVファイルを閉じる' Application.DisplayAlerts = True '警告やメッセージを表示するようにする' End Sub |
コード説明
変数の定義
1 2 |
Dim CSV_File_Name Dim Book_Name |
CSV_File_Name はCSVファイルの名前です。
Book_Name はワークブック(ファイル)の名前です。
警告・メッセージの設定
1 |
Application.DisplayAlerts = False |
Application.DisplayAlerts プロパティは警告やメッセージを表示の有無を設定します。
=True としたの場合 警告やメッセージを表示する
=False としたの場合 警告やメッセージを表示しない
後々ファイルを開いたり閉じたりするので、=True とすることで上書き保存可否の確認のメッセージなどが出ないようにしておきます。
(一番最後に =False として元に戻しています。)
絶対パスでCSVファイル名を指定
1 |
CSV_File_Name = ThisWorkbook.Path & "\テスト.csv" |
ThisWorkbook はこのマクロが設定されているワークシートを表し、ThisWorkbook.Path と記述することでこの CSVファイルが入っているフォルダの絶対パスを表します。
さらに後ろにこの CSV ファイルの名前を付けて ThisWorkbook.Path & “\テスト.csv” とすることによって CSVファイル名を絶対パスで指定しています。
そして、それを変数 CSV_File_Name に格納しています。
CSVファイルが存在しない場合の処理
1 2 3 4 5 |
If Dir(CSV_File_Name) = "" Then MsgBox "「テスト.csv」が存在しません。" Exit Sub Else End If |
Dir 関数はファイルの存在の有無を調べる関数で Dir(ファイル名)のように記述します。
ファイル名は絶対パスで指定しなければなりません。
引数となるファイルが存在する場合は ファイル名
存在しない場合は ””(空白)
が戻り値となります。
なお、少々ややこしいですが戻り値のファイル名は絶対パスではありません(「テスト.csv」のように文字通りファイル名のみとなります)。
先ほど絶対パスで指定したファイル名 CSV_File_Name の有無を確認するためには Dir(CSV_File_Name) と記述します。
ここでは、もし CSV_File_Name が存在しない場合は “「テスト.csv」が存在しません。” というコメント付きのメッセージボックスを表示させて終了します。
「テスト.csv」を Excel シートと同じフォルダの中に準備していない場合には、次に進めないようになっているわけですね。
CSV ファイル「テスト.csv」を開き中身をクリアする
1 2 3 4 |
Workbooks.Open (CSV_File_Name) Book_Name = ActiveWorkbook.Name ActiveSheet.Range("A1:ZZ1000").ClearContents |
Workbooks.Open (CSV_File_Name) で CSV_File_Name というファイル名のファイル(テスト.csv)を開きます。
Book_Name = ActiveWorkbook.Name
は変数 Book_Name に今アクティブになっているワークブックの名前(すなわち開いたばかりの「テスト.csv」)を入れ込みます。
ActiveSheet.Range(“A1:ZZ1000”).ClearContents
はアクティブなシートのセルA1~ZZ1000 を書式設定を残したままをクリア(消去)します。
Excel シートの所定の範囲をコピーしてCSV ファイルに貼り付け(「値」の形式で貼り付け)
1 2 |
ThisWorkbook.Worksheets("Sheet1").Range("A1:ZZ1000").Copy ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValues |
ExcelファイルのSheet1のセルA1~ZZ1000までの範囲をCSVファイルにコピーして、CSVファイルのセルA1に「値」の形式で貼り付けます。
Copy メソッドは指定した範囲をコピーします。
PasteSpecial メソッドは指定した範囲に、形式を選択して貼り付けをします。
PasteSpecial Paste:=xlPasteValues と記述することで「値」の形式で張り付けることになります。
CSV ファイル「テスト.csv」を閉じる
1 |
Workbooks(Book_Name).Close SaveChanges:=True |
Close メソッドは指定したファイルを閉じます。
SaveChanges:=True と後ろに記述することで、ワークブックに変更があった場合に保存することを指示しています。
3、まとめ
いわゆる CSV化は会計事務所でデータを扱う際にはとても仕様頻度が高いです。
Excel シートのデータをCSV化する手っ取り早い方法は、今日説明したように「Excel シートのデータを空のCSV ファイルにコピペする」ことです。
今日のプログラミングコードは、Excel シート内のコピーするセルの範囲を変更しさえすれば他のケースにも使うことができますので、活用して頂ければと思います。