Visual Basic for Applicationsを活用する [情報処理]
「二万件のデータ、取り込みをお願いします。明日の昼までに。」
はいはいと請け負ったのはいいのですが。
システムの仕様で一回のデータ取り込み件数が50件までという制限があるため、入手したレコードを50件ごとに分割していくと、
20000 ÷ 50 = 400 で、400個のファイルになります。
エクセル上の表を50行ずつのCSVファイルに吐き出させるようなプログラムを作れば、何もすることはありませんが、そんなことをしている時間も予算もない。
手作業で、ヘッダーをつけて、小分けにして、CSVに吐き出させる? 400個も? いやだなぁ・・
そこで、思いついたのがVBA/マクロの活用。
エクセルなどマイクロソフト・オフィス製品にはVisual Basic for Applicationsと呼ばれるプログラム言語の開発環境がついています。
この言語を使えば、オフィス上で行う作業の繰り返しなどを自動化することができます。1990年代、松本空港の近くの工場の倉庫で在庫管理や生産管理の仕事をしていたころ、私が活用できる自動化のツールといえば、このVBAでした。
そのときの経験を思い出して、VBAを久々に活用してみようかと。
今日のところは、参考文献もないし、コーディングの作法も思い出せずにかなり苦戦しました。
わからない箇所は、インターネット上のサイトをあちこち検索しながら、マクロの自動記録を使ってエクセルに記録させたコードを、少しずつ修正して、どうにか思ったような動作をさせることができました。
トータル3時間くらいかかりましたが、無事に約400個のCSVファイルが出来上がりました。
うち2時間くらいは、コーディングとデバッグ(バグ取り)に費やしました。
主要なプログラムは:
ヘッダーを見つけて50行下に挿入するプログラム。
50行単位でレコードをワークシートに分割するプログラム。
各シートをCSVに吐き出すプログラム。
の三つです。
プログラミング、けっこう面白いですよ。
皆さんも余裕があったら試してみてください。
Excelなどは触ったこともありません。
by Silvermac (2014-01-08 05:55)
なんと流石です。
ぼくだったら、手作業人海戦術でしょうね。
by 駅員3 (2014-01-08 07:17)
???????????(@@;)))
参りました(笑)
by 獏 (2014-01-08 07:41)
VBA!2000年くらいに使ってたような記憶が・・・
懐かしいです☆
by お茶屋 (2014-01-08 10:51)
仕事でエクセルはしょっちゅう使うのですが、
私は稚拙なレベルなもので・・・^^;
by 銀狼 (2014-01-08 18:36)
前会社にいたとき、VBA少々と関数を使ってデータベースを構築しましたね。
by なんだかなぁ〜!! 横 濱男 (2014-01-08 21:06)
なんだかなぁ! 横 濱男 さん、
銀狼 さん、
甘党大王 さん、
sugoimono さん、
お茶屋 さん、
tsun さん、
Tomie さん、
獏 さん、
駅員3 さん、
やってみよう♪ さん、
Silvermac さん、
世界のアイドル さん、
ryo1216 さん、
こんばんは、
ご訪問ありがとうございます。
☆ Silvermac さん、
そうでしたか。たてよこの表計算をさせるには非常に便利ですよ(^_^)
☆ 駅員3 さん、
いえいえ・・
たしかに人海戦術が一番確実だとは思います。
プログラミングが短時間でモノになるという保証はどこにもないですものね(^^ゞ
☆ 獏 さん、
失礼しました!!
☆ お茶屋 さん、
懐かしいでしょう(^_^)
データベースの勉強もやりたいと思っているのです(^_^)
☆ 銀狼 さん、
いやいやいや、それだけエクセルを使われていれば素養は十分でしょう!!
☆ なんだかなぁ?!! 横 濱男 さん、
さすがです!!
私はかなり忘れております!!(^_^)
by Azumino_Kaku (2014-01-08 22:34)
ばくなら、システムのプログラムを'=50'で、スキャンしてから、パッチを当てて、読込ませます。データチェックしてからOKならば、システムプログラムを元に戻しておきます。このほうが、合理的じゃあ、ありませんか?
by thaler (2014-01-08 22:52)
☆ thaler さん、
たしかにおっしゃるように、取り込み側を直すのが一番早いのです。
今回は取り込み側が外部(クラウド)で、いじることができませんでした。
そういう制約があったため、データ側をいじりました。
by Azumino_Kaku (2014-01-08 23:11)