可変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かそこらのはず。

VBAvba

Posted by PC_training