会計税務ソフトや IT 機器でデータを CSV 入出力ができるか否かは重要です。
データをCSV 出力できれば、そのデータを Excel シート上に取り込んで使うことができます。
今日は、選択した CSV ファイルの中身を Excel シート上に取り込むマクロ(Excel VBA)を実例を示しながら紹介します。
1、CSV 出力したデータの使い方
実例として、「科目コードと科目名」のデータが入った CSVファイルを選択して Excel シートに取り込んで使う場合を考えてみます。
シート上に入力した科目コードから科目名を検索できるようにします。
シート設計
Excel シート上に「メイン画面」と「CSVデータ取込み」の2つのシートがあります。
「メイン画面」シートはこのように↓なっています。
黄色の「CSVデータ取込み」ボタンをクリックすればマクロが実行して、CSVファイルを選択できます。
そして選択した CSV ファイルがもう一つの「CSVデータ取込み」シートに取り込まれます。
「CSVデータ取込み」シートは何も取り込んでいない状態では白紙です↓
取り込むとズラッとデータが入ってきます↓
さて、「メイン画面」シートのセル「D8」には以下の数式を埋め込んであります。
「=VLOOKUP(D7,CSVデータ取込み!$A$8:$B$300,2)」
VLOOKUP 関数を用いて、入力した科目コードに該当する科目名を「CSVデータ取込み」シートの該当する箇所から検索しているわけですね。
具体的には、「メイン画面」シートのセル「D7」に入力した科目コードと一致する値を「CSVデータ取込み」シートのセル「A8~B300」の範囲の一番左側の列(A列)から調べ出して、該当する行の左から2列目(B列)の科目名を抽出しています。
VLOOKUP 関数の使い方については、これまでに何度か記事にしているので参考にして下さい。
さて、「メイン画面」シートのセル「D7」に試しに「612」と入力してみると、該当する科目名「売上高」がセル「D8」に表示されることが分かります。
会社ごとのデータ
このように会社ごとの「科目コードと科目名」のデータがあり、対象となる会社を変える場合には「CSVデータ取込み」ボタンを押して該当する会社の CSVファイルを選択してデータを読み込んで使う前提のものです。
CSVデータがあれば、まずそれを Excel に取り込んで後は自由に使うことができます。
今回のようにVLOOKUP 関数を使って必要な情報を抽出することもできますし、他にもデータを加工して使うことも考えれるでしょう。
2、CSV ファイルを開いてシートの中に取り込むマクロ(Excel VBA)
プログラミングコード
「メイン画面」シートの「CSVデータ取込み」ボタンに組み込んである、CSV ファイルを開いてシートの中に取り込むマクロのプログラミングコードを以下に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Sub Csv_Import() Dim A_Sheet 'Excelファイルのシート名を入れ込む変数' Dim Csv_Import_File 'Excelファイルに取り込むCSVファイルの名前を入れ込む変数' A_Sheet = ActiveSheet.Name '現在アクティブなシート名を変数 A_Sheet に入れ込む' Csv_Import_File = Application.GetOpenFilename("CSVファイル,*.csv") 'CSVファイルを選択する' If Csv_Import_File = "False" Then Exit Sub 'キャンセルなら終了' ThisWorkbook.Sheets("CSVデータ取込み").Range("A1:ZZ100000").ClearContents '「CSVデータ取込み」シートのセル「A1~ZZ100000」をクリアする' With Workbooks.Open(Csv_Import_File) .Sheets(1).Cells.Copy ThisWorkbook.Sheets("CSVデータ取込み").Range("A1") '全てのデータをこのブックの「CSVデータ取込み」シートにコピー' .Close 'CSVファイルを閉じる' End With Worksheets(A_Sheet).Activate 'A_Sheet という名前のシートをアクティブにする' End Sub |
コード説明
さて、上記のプロシージャについて説明しますね。
変数の定義
1 2 |
Dim A_Sheet Dim Csv_Import_File |
この部分↑では、シート名を入れ込む変数を定義しています。
●「A_Sheet」はExcelファイルのシート名を入れ込む変数
●「Csv_Import_File」は Excelファイルに取り込むCSVファイルの名前を入れ込む変数
です。
シート名の読み込み
1 |
A_Sheet = ActiveSheet.Name |
ここでは、変数「A_Sheet」に今アクティブになっている(操作している)シートの名前を入れ込んでいます。
このマクロは「メイン画面」シート上で実行されるので、変数「A_Sheet」には「メイン画面」という名前が入ります。
CSVファイルの読み込み
1 2 |
Csv_Import_File = Application.GetOpenFilename("CSVファイル,*.csv") If Csv_Import_File = "False" Then Exit Sub |
さて、今回のコードの重要なポイントはこの部分↑です。
「Csv_Import_File = Application.GetOpenFilename(“CSVファイル,*.csv”)」
この部分↑は、Application オブジェクトの GetOpenFilename メソッドにより指定したタイプのファイルを選択できるようになります。
GetOpenFilename メソッドは Application.GetOpenFilename(“コメント,ファイル種類“)のように記述します。
「Application.GetOpenFilename(“CSVファイル,*.csv”)」と記述すれば
●コメントは「CSVファイル」
●ファイル種類は「CSV」
ということになります。
コメントの部分は何を書いても問題ありませんが、ファイル種類の部分は取り込みたいファイルの種類をきっちり指定しなければなりません。
CSV であれば「*.csv」
TXT であれば「*.txt」
のように書きます。
「Csv_Import_File = Application.GetOpenFilename(“CSVファイル,*.csv”)」
と記述することで、選択した CSVファイルを変数「Csv_Import_File」に取り込みます。
マクロを実行すると次のような画面が出てきて、CSVファイルのみを選択できるようになります。
先ほどの、コメントとファイル種類はウインドウの右下に表示されます。
「If Csv_Import_File = “False” Then Exit Sub」
この部分↑は変数 Csv_Import_File に何も取り込まれなかった場合にプロシージャから出るようにしています。
つまり、CSV ファイルを選択するウインドウが出た際にキャンセルボタンを押すとマクロを終了するということですね。
CSVファイルのデータを Excel シートにコピペ
1 2 3 4 5 6 7 8 |
ThisWorkbook.Sheets("CSVデータ取込み").Range("A1:ZZ100000").ClearContents With Workbooks.Open(Csv_Import_File) .Sheets(1).Cells.Copy ThisWorkbook.Sheets("CSVデータ取込み").Range("A1") .Close End With Worksheets(A_Sheet).Activate |
「ThisWorkbook.Sheets(“CSVデータ取込み”).Range(“A1:ZZ100000”).ClearContents」
ここでは、このワークブックの「CSVデータ取込み」シートのセル「A1~ZZ100000」の範囲の文字を削除しています。
ThisWorkbook とはマクロが組み込まれているワークブックを示します。
ClearContents メソッドは指定した範囲の数式と文字を削除します。
With Workbooks.Open(Csv_Import_File)
.Sheets(1).Cells.Copy ThisWorkbook.Sheets(“CSVデータ取込み”).Range(“A1”)
.Close
End With
ここでは名前が「Csv_Import_File」のファイル(選択した CSV ファイル)を開いて、そのファイルの1つ目のシートのすべてのセルをコピーして、このワークブックの「CSVデータ取込み」シートに張り付けています。
「Workbooks.Open(Csv_Import_File)」の Open メソッドによって指定したファイルを開きます。
With Workbooks.Open(Csv_Import_File) ~ End With の間には「Csv_Import_File」というファイルを開いた状態で行う処理を記述します。
「.Sheets(1).Cells.Copy ThisWorkbook.Sheets(“CSVデータ取込み”).Range(“A1”) 」
「.Sheets(1).Cells.Copy」の部分は開いた CSV ファイルのシートのすべてのセルをコピーすることを意味します。
「ThisWorkbook.Sheets(“CSVデータ取込み”).Range(“A1”)」の部分で、コピーしたデータをこのワークブックの「CSVデータ取込み」シートに張り付けることを指示しています。
「.Close」のでは開いた「Csv_Import_File」ファイル(CSV ファイル)を閉じています。
「Worksheets(A_Sheet).Activate」
ここでは「A_Sheet」という名前のワークシートをアクティブ(操作対象)にしています。
これにより処理が終わった後に「メイン画面」シートが開いた状態になります。
3、指定したフォルダからファイルを選択して開く方法
なお、上記で CSV ファイルを選択する際に開くフォルダはマクロを実行する毎に異なるので、ファイルを探すのが面倒くさい場合があります。
いつも同じフォルダ内のファイルを使っている場合などには、開くフォルダを指定したいですよね。
●毎回同じフォルダを開く方法
●前回取り込んだファイルと同じフォルダを開く方法
について、以下の記事で紹介させて頂きますので参考にして頂ければと覆います。
4、まとめ
マクロ(Excel VBA)で CSV ファイルを開いてシートの中に取り込む方法を説明しました。
税務会計ソフトや IT 機器から CSV データ出力をすることさえできれば、後はそのデータを Excel に取り込んで自由に使うことができます。
まずは CSV データを取り込む過程が必要なので、同様の用途がある方はこの方法を試してみて下さい。