初心者のためのExcelマクロ超入門(絶対できるVBA開発)

マクロがまったくわからない人のためにエクセルマクロやVBAについてできるだけわかりやすく書いています。Twitter:@shuhhohhey

初心者のためのExcel エクセルマクロVBA入門-実践基礎:CSVファイルの読み込み(取り込み)

CSV読み込みは面倒。しかし、頻繁に使う。


記事にするのすげーめんどいので実は避けていたんですが、そろそろやりますかね・・・プログラミングを勉強すればマクロでこんなことまでできてしまいます。すごいでしょ?的なことでもありますが、実は非常によく使うテクニックです。これは1度作ったら、保存しておいて、クラス化してずっと使いまわすようにした方がいいくらいです。


だって、毎回書くの面倒くさいから。長いので連載ものです。何回になるかもわからんw


CSV取り込みはほんとに非常によくあります。用途としてですね。大体の発注データとか、在庫データとか、そういうのは決まってCSVファイルです。

( ゚д゚)?CSVファイルってよく聞くけど・・・

CSVファイル(Comma-Separated Values)カンマ区切り


CSVファイルの定義は非常にシンプルです。そしてシンプルがゆえに非常に取込で苦労します。CSVファイルは表題の通り、カンマで区切られたデータのことです。改行までを1区切りとして、これを1レコードとしています。CSVである定義は非常にシンプルです。

ファイルは1つ以上のレコードからなる。レコードは改行(CRLF、U+000D U+000A)で区切られる。
最後のレコードの後には改行はあってもなくてもいい。
レコードは1つ以上の同じ個数のフィールドからなる。
フィールドはコンマ「,」(U+002C) で区切られる。
最後のフィールドの後にはコンマは付けない。


昔は、同じ個数のフィールドからなる。ってのがなくてもCSVとしていましたが、2005年くらいに正式に決まりました。ですが、本当にこれだけなので、現在CSVファイルには実にさまざまな形が乱立しています。

例1:普通のパターン

1,山田,太郎,東京
2,鈴木,二郎,大阪
3,田中,,名古屋

歯抜けでも、カンマで区切ることで、フィールド数は保たれています。


例2:""で区切られるパターン

"001","山田","太郎","東京"
"002","鈴木","二郎","大阪"
"003","田中","","名古屋"


例3:''で区切られるパターン

'001','山田','太郎','東京'
'002','鈴木','二郎','大阪'
'003','田中','','名古屋'


例4:文字だけ""で区切られるパターン

1,"山田","太郎","東京"
2,"鈴木","二郎","大阪"
3,"田中","","名古屋"


例5:""で区切られるけど改行含んでるパターン

"001","山田","太郎","東京","これからどうぞ
よろしくお願いします"
"002","鈴木","二郎","大阪","これからどうぞ
よろしくお願いします"
"003","田中","","名古屋","これからどうぞ
よろしくお願いします"


例6:Lf改行含んでるパターン

001,山田,太郎,東京,これからどうぞ Lf
よろしくお願いします
002,鈴木,二郎,大阪,これからどうぞ Lf
よろしくお願いします
003,田中,,名古屋,これからどうぞ Lf
よろしくお願いします


例7:""で区切られてるがカンマ含むパターン

"001","山田","太郎","東京","これからどうぞ,よろしくお願いします"
"002","鈴木","二郎","大阪","これからどうぞ,よろしくお願いします"
"003","田中","","名古屋","これからどうぞ,よろしくお願いします"


ざっと考えただけでも、これだけあります。もはや・・・ですね。CSVファイルがどれだけ「あいまいな」ものなのか?ということがわかるかと思います。ぶっちゃけ""で区切られてもなく0001とかあーー!ってくらい面倒くさいです。さらにこれらのパターンの合わせ技ももちろんあります。

CSVファイルの仕様を決めよう!


したがって、CSVファイルで取込をしたいという場合、まずそのCSVファイルがどんな形式を持ったCSVファイルなのか?ということを理解する必要があります。この時に押さえたいポイントがあります。

  • ""や''で括られているのか?いないのか?それは全部?文字列だけ?
  • 改行を含むフィールドがあるのか?ないのか?
  • カンマを含むフィールドがあるのか?ないのか?

これくらいをまず確認する必要があります。金額のデータなんてそれこそ・・・カンマのオンパレード・・・なんてことありませんか?(普通はExcelの書式で付けるのでデータ自体にカンマはつかないのですが稀にあります…)


このようにして、CSVファイルの形式を「固定する」ということを行います。そうしないと読み込みができません。こういった取り込むためにファイルの形式を固定したり、読み込みのための仕組みを考えることを

仕様を決定する。


と言います。ここで仕様を決めておけば、仕様と違うファイルが来た時には、ちゃんと「仕様と違うファイルなので読めません」ということができるのです。


マクロVBAの話に行く前で終わってもうた・・・次回から実際にシンプルなものを読み込んでみます。それまでにファイルパスについて書いた記事があるのでそちらもチェックしておくと良いと思うよ。


ファイルパスについて

ファイルを開くなんて、基礎の基礎なので以前の記事見ておいてね。実践基礎で説明はしません。当たり前のように出てくるので、覚悟しておいてくださいw


今日はここまで!


かしこ