可変CSVを読み込みたい:VBA
CSVを読み込んでみる
出席率を取りたい
出席管理システムを用いて、生徒の出席データを取ったとする。
もちろん、生徒により参加した授業回数、授業数は異なるのである。
縦に各授業のデータが並ぶ。これは問題ない。
問題は横。横がばらつくのだ。
変わらないもの
それは、タイトルである。つまり、一行目である。
ここのデータがどの位か、さえ拾えればよいのである。
さ~て、ネットと相談である。
CSV取り込み、出るわ出るわ。
速度を考えると、ReDimという関数を使いこなす必要があるみたい。
まあ、想定されるサイズベタ打ちでもいい気がするが、
少し勉強してみたいので、やってみよう。
CSV読取自体は、Line Inputしていくので良いみたい。
最後、セルに代入するときに偉い時間がかかるらしい。
その辺りを考慮して進めてみる。
まず見出しだけ拾う。
具体的には、ファイルオープンして、
一行目だけ取って、”,”でSplitして、UBoundしてみる。
それで得られたのが横の行数n。
注意したいのは、横の行は「0から始まる」ので、ずれる。
正直、こんなことしなくても、処理時間に大差ないので不要な気がする。いくら授業があるといっても、MAX52週な訳で、横軸はMAX200行程度で収まることは分かるし。まあ、練習だ。
その後は、ありふれたCSV読み込みを行う。
代入作業は一回で
問題はこの作業らしい。
ここを高速化するには、Rangeで範囲取って、一度に代入するほうが圧倒的に良いらしい。ふーん。
Range.Resize(X,X)=Bてきな感じで。
フォーマットが足りない
出来たはいいが、フォーマットが崩れている。
ゼロから始まるデータ行が、お決まりの数値変換されている。
RangeのNumberFormatLocalを”@”にセット。
上手くいった^^
速度は?
2000行のレコードで試したところ、約7秒。十分。扱うデータはあっても10000かそこらのはず。