ダウンロード(自由設定のCSVファイル出力)このページではJavaScriptを使用しています。スクリプトが無効に設定されているとメニュー等が表示されません。他の業務システムに引き渡す目的でCSV形式ファイルを作成することは多いと思います。システム間の受け渡し用のCSV形式ファイルは仕様が単一ではありません。インタフェースの仕様に合った形式や項目数で保存されるとは限らないということを知っておく必要があります。近年では「Excelから保存させたCSV」というものがCSV形式ファイルとして「市民権」を得てきているようです。会計や勤怠・給与など企業ではクラウドサービスを利用するケースが増えていますが、マスタデータなどでCSV形式ファイルが用いられます。できるだけ汎用的なものを用意しておいて、繰り返しの利用にも対応できるようにしようというのがこのページの目的です。処理部分をクラス化させて分離しました。元々は処理パラメータと実際の処理が同じモジュール上に置かれていたのですが、処理部分をクラスに分離させ「ブラックボックス」として利用できるようにしました。在来のものはセル内改行に対応していませんでしたが、これにも対応しました。列ごとの細かい指定を行なう形式のものと、極力マクロ側の判定に任せる形式のものの2種類を提供しています。テストデータを見てみます。(この画像をクリックすると、このページのサンプルがダウンロードができます。)この画像か下の「ダウンロード」ボタンからダウンロードし解凍していただいた中に「CSVTEST.xlsx」があります。手始めはこれを元にCSV形式ファイルを作成してみます。ご覧のようにB列はセル内改行があったり、文字列中にカンマやダブルクォーテーションがあったりします。マクロを使わずにCSV形式ファイルに保存する方法で内容を確認してみます。(*.csv)」の形式を選択して保存させて下さい。(Excel2016以降では「カンマ区切り」が「コンマ区切り」の表記に変わっています)CSV形式ファイルができたらExcelではなく「メモ帳」かテキストエディタで開いてみて下さい。Excelが作成したCSV形式ファイルはこんな感じです。全体でカンマの数が統一されており、データがある最大列数に依存します。セル内のダブルクォーテーションは2つ連記に変更されています。システム間の受け渡しはExcelでの受け取りを目的にしているのではないので、結果の中間確認はExcelではなく「メモ帳」かテキストエディタで行なって下さい。先に「WriteCSVFile5.xlsm」を試してみます。解凍した2つのマクロブックのうち「WriteCSVFile5.xlsm」を試してみます。マクロの起動方法は2つとも同じで、起動ボタン等は用意していません。CSV形式に変換する元となるワークブック(このサンプルでは「CSVTEST.xlsx」)をアクティブにした状態でマクロ「WriteCSVFile5.xlsm!WRITE_CSV_TEST」を起動します。次にCSV形式ファイルのファイル名と保存場所を指定するダイアログが表示されます。「CSVTEST1.csv」だったので「CSVTEST2.csv」としてみました。これで「保存」ボタンをクリックするとCSV形式ファイルが保存されます。エラーがなければこのように完了メッセージが表示されます。ものと全く同じ内容でした。「WriteCSVFile5.xlsm」のソースコードです。「Module1」です。これはサンプルであり、利用シーンに応じて変更していただく必要があります。クラス側の紹介は一番最後にします。"CSV出力させるワークシートをアクティブにした状態で起動して下さい。クラス側の処理結果を行なっています。最初の「アクティブシートチェック」です。次の点線で挟まれた範囲がCSV形式ファイルの出力ファイル名の指定部分です。マクロブックのフォルダをデフォルトにして「名前を付けて保存」ダイアログを表示させます。「名前を付けて保存」ダイアログの動作後に元に戻しています。その後が実際のCSVファイル出力クラスの呼び出し部分になります。実際のCSVファイル出力処理「WriteCsvFile5」の前にパラメータ要素の8項目をプロパティでセットしています。このうち「出力CSVファイル名(prpFilename)」以外は処理上で固定的な要素と考えられるので以下のようにモジュール定数としています。ワークシート側の項目カラム数です。0の時は先頭行の項目数で自動判定されます。先頭行が「見出し」であれば見出し項目数で決定されます。見出しがない場合は先頭行の項目数は右寄りの項目がブランクかどうかでブレるので0ではなく項目数を指定して下さい。ワークシート側の見出しを含む読み出し先頭行です。「見出し」をCSV側に出力するかどうか及び見出し行数は別項目で指定できるので単に読み出し先頭行として指定して下さい。ワークシート側の読み出し先頭カラムです。実際にCSV側に出力するセル範囲の左に余分な列がある場合は値を変更することでこれを避けることができます。ワークシート側の見出し行数です。ワークシート側でデータ最終行を判定するカラムを指定します。値がある列番号を指定して下さい。見出し行をCSV側に出力するかどうかの指定です。CSV側の文字コードをUNICODEにするかの指定です。特定のワークシートを指定することが可能で、Optionの第2引数(blnAppend)にTrueをセットすれば追加モードで出力されるようになっています。次は「WriteCSVFile4.xlsm」です。パラメータは細かく指定できるようになっています。先に「Module1」を紹介します。"CSV出力させるワークシートをアクティブにした状態で起動して下さい。>>----------------------------------------出力CSVファイル名については前項目と同じなので、それ以外のプロパティ項目を説明します。ワークシート側の項目カラム数です。0の時は先頭行の項目数で自動判定されます。先頭行が「見出し」であれば見出し項目数で決定されます。見出しがない場合は先頭行の項目数は右寄りの項目がブランクかどうかでブレるので0ではなく項目数を指定して下さい。ワークシート側の見出しを含む読み出し先頭行です。「見出し」をCSV側に出力するかどうか及び見出し行数は別項目で指定できるので単に読み出し先頭行として指定して下さい。ワークシート側の読み出し先頭カラムです。実際にCSV側に出力するセル範囲の左に余分な列がある場合は値を変更することでこれを避けることができます。ワークシート側の見出し行数です。ワークシート側でデータ最終行を判定するカラムを指定します。値がある列番号を指定して下さい。見出し行をCSV側に出力するかどうかの指定です。出力有無だけでなく「どのように出力するか」を以下の中から指定します。CSV側の文字コードをUNICODEにするかの指定です。カラム単位編集方法指定カラムごとのCSV側への編集方法の指定です。スケール状の文字列で指定します。0=セパレータのみ1=数値(ブランク、非数値はゼロ出力)2=文字列(「"」囲い:無条件)3=文字列(「"」囲い:ブランクを除く)4=文字列(「'」囲い:無条件)5=文字列(「'」囲い:ブランクを除く)6=日付(「#」囲い:ブランクを除く)7=日付(「"」囲い:ブランクを除く)8=自動判定(セル内改行、「"」、「,」有りは「"」囲い)9=自動判定(セル内改行、「'」、「,」有りは「'」囲い)細かい指定ができますが、反面、指定を誤ると誤動作に繋がるので充分にテストを行なってご利用下さい。ファイル名指定や複数シートでの動作については前項と同じです。「WriteCSVFile5.xlsm」のクラス側のソースコードです。この中身まで理解しようとするような学習目的の方のためにクラス側のソースコードを紹介します。>>----------------------------------------「WriteCSVFile4.xlsm」のクラス側のソースコードです。>>----------------------------------------←WriteCSVFile5.zip(65KB)。