CSVファイルをExcel VBAで扱う(4)新規作成したCSVファイルに内容を書き込みする

Excel マクロ、VBA

スポンサーリンク

はじめに

今回の記事のExcelマクロについて、サンプルファイルを用意しました。
※今回のマクロを組み込んだExcelファイルを、こちらのフォルダに保存してあります。
「CSVファイル修正マクロ.xlsm」ファイルを開いてマクロを有効にする
→「実行」ボタンを押して、「テスト用CSV」フォルダ中のサンプルCSVファイルを全て選択して開くと、動作確認できます。

CSVファイルなどのテキストファイルをExcel VBAで扱う(内容を読み取る、書き込む)方法について、記事を書いてきた。

CSVファイルをExcel VBAで扱う(3)新規作成したCSVファイルに内容を書き込みする

2019年9月9日

CSVファイルをExcel VBAで扱う(2)CSVファイルの内容を読み込んで処理する

2019年9月2日

CSVファイルをExcel VBAで扱う(1)新規作成したCSVファイルに内容を書き込みする

2019年9月1日

さてCSVファイルというのは、カンマ文字で区切られたテキストファイルのことだけど、通常はカンマで区切られた項目数が各行で一定になっている。

たとえば下の例なら、各項目を
,,生年月日,都道府県,電話番号
の順でカンマで区切って、各行の項目数が5個で一定になっている。

谷野,聡美,1976/12/19,兵庫県,080-0608-0695
末永,文一,1961/8/28,岐阜県,090-4144-1812
金澤,揚子,1979/11/1,青森県,080-7267-7926
山之内,英明,1982/12/19,熊本県,090-7050-8296
浜田,友香,1980/7/17,高知県,090-9782-2847

そして私がCSVファイルを扱うときは、特定の列の項目に加工を施したいということが多い。

たとえば上記の例なら、4列目の項目「都道府県」の末尾に「出身」という文字を加えて

谷野,聡美,1976/12/19,兵庫県出身,080-0608-0695
末永,文一,1961/8/28,岐阜県出身,090-4144-1812
金澤,揚子,1979/11/1,青森県出身,080-7267-7926
山之内,英明,1982/12/19,熊本県出身,090-7050-8296

と書き換えたCSVにしてしまいたいという感じだ。

縦に何十行もある複雑なCSVファイルなんかでは、たったこれだけのことが意外に難しい。

ソースコード

そこで今回は、これまでの記事で扱ったことの組み合わせで、
(1)CSVファイルをInputで読み込み用に開き、Line Inputで1行ずつ読み込む
(2)CSVファイルをOutputで書き込み用に開き、Printで書き込む

と、読み込みと書き込みを一連の流れで実施して、CSVファイルの4列目の項目の末尾に「出身」という文字を加える処理を実施するマクロを書いてみた。

解説

今回はそこそこ長いソースコードなので、CSVファイルを開く処理について、fncCSVOpenというプロセス(Function)に別途分けてみた。こういうやり方については、こちらを参照。

Excel VBA 処理実行前にチェックを通すソースコードの記入方法例

2018年4月13日

テキストファイルを開くに当たっては、ファイルの空き番号というやつ取得しないといけなくて、通常は#1として取得すれば良い。
しかし今回は、読み込み用と書き込み用の2つを同時に開くので、#1・#2の2つを割り当てた。

Joinで1次元配列の中身を結合した文字を作成

また今回は、Joinという処理を使っている。
このJoinは、配列(正確には1次元配列)の中身を、区切り文字を指定して結合するものだ。

今回、arrCommaSplitという配列の、4個目の項目の末尾に「出身」という文字を追加する修正を施したわけだが、それにより配列arrCommaSplitは次のような感じになる。

arrCommaSplit(0)= “”
arrCommaSplit(1)= “谷野”
arrCommaSplit(2)= “聡美”
arrCommaSplit(3)= “1976/12/19”
arrCommaSplit(4)= “兵庫県出身”
arrCommaSplit(5)= “080-0608-0695”

これだけなら配列arrCommaSplitは、「谷野」とか「兵庫県出身」とかいう要素を個別に含んでいるだけの代物だ。

CSVファイルに書き込むに当たってこれら個別の要素を、カンマ文字を媒介として繋げた文字列にしないといけない。つまり
var = Join(arrCommaSplit, “,“)
という処理で、配列arrCommaSplitの各要素をカンマ文字「,」で繋ぎ合わせた

谷野,聡美,1976/12/19,兵庫県出身,080-0608-0695
という1行の文字列が作られるわけだ。

そしてそれを、Print によって書き込み用CSVファイルに書き込んでいる。

スポンサーリンク