2011-02-02
VBAで新規ワークシートにCSVファイルを読み込む
やりたいこと
- 俗にいう、売上管理ってやつ。手作業大変なのでマクロ化
- 33個のCSVファイルを読み込み、新規ワークシートに挿入する
- それぞれの読み込んだデータにマクロ(見た目の整形と数式を適応する)を実行
- 毎月使います。
やり方
プログラムを組んで、頑張って読み込み変数に入れて利用しようとしていた。
しかーし、そんな事をする必要がはなかった!
下記の作業をマクロで記録する。
- 「外部データの取り込み」を利用する
- Excel 2007 なら、「データ」のリボン→「テキストファイル」をクリック。
- 目的のCSVファイルを選択し、区切り文字を「カンマ」にする。
- 最後にデータを返す先を「新規ワークシート」にする。
おお、ワークシートにCSVファイルが読み込まれた。
これがやりたかった。
33回やる。
VBAを開いてコードをコピペする。
本当はループで回す方がいいに決まっているけど、やっつけマクロなのでそんなことは気にしない。
開発のリボンからVisualBasicをクリックし、開発環境っぽい画面に映る。
(開発のリボンがない場合は、OfficeメニューからExcelのオプション→開発タブをリボンに表示する、にチェックを入れることで表示される)
それっぽい処理をコピーして貼り付ける。
要件:それぞれのCSVを読み込んでワークシートに追加したい。
ActiveSheet.QueryTables.Add(Connection:= _
“TEXT;C:\Documents and Settings\Administrator\My Documents\売上01.csv”, _
Destination:=Range(“$A$1″))
ってとこの「売上01.csv」を「売上02.csv」、「売上03.csv」・・・・「売上33.csv」とかに置換してコピペ。
おお、できた
マクロを実行すると、CSVファイルがワークシートに追加されている。
後は、それぞれのワークシートに目的のマクロを適応していく。
コーディング不要!楽してマクロ!
ファイルの名前とパスは毎回合わせる必要があるが、ここは設定より規約!(キリッを重んじる!
ライフハック!!(キリッ
これは、しばしばバイトに遅刻する私が、店長の役に立って遅刻を見逃してもらうためのライフハックです!
拡張予定
さすがに、ファイル名をコード内でリテラルにするのは雑魚過ぎる。
「設定」ワークシートを作り、そこに読み込むファイル名を記述できるようにしたい。
それは、いつかやる!
とりあえず今日出勤してすぐやらないといけないから、これでやり過ごす!
追記
拡張しました。
- 「設定」のシートを作り、そこのセルに「読み込むのファイル」を記述する
- Rangeとかでそれらのセルのデータを読み込み、配列に格納。
- for文で、その配列を展開しながらファイルを読み込み、シートに落とす。
- シート名を適切な名前に変更
- 印刷プロパティの設定、改ページ位置の設定など。
- 3のforループに戻る。
- 終わり。
- このマクロを実行するための「ボタン」を作成する。
ここまで自動化すれば、かなり楽チンだし、パソコン詳しくない人でもボタン一発!
今回覚えたこと
- 全部の処理をいちいちVBAプログラムで手打ちでコーディングするのはめんどくさいし、できない。
- 「マクロの記憶」でExcelに目的の動作をコード化(Subプロシージャ)させる。
- それを、SubプロシージャからFunctionプロシージャに置き換える。Functionプロージャじゃないと、Subプロシージャから呼び出すことができない。SubプロシージャからSubプロシージャを呼び出すことができない為。
- 後は用途に合わせてFunctionを改造。そしてSubからFunctionに値を投げて実行。Function化したほうがコードがすっきりするのと、目的の処理を一か所にまとめる事が出来るので楽。(後で変更があった時、一つのFunctionの変更のみで、すべてに変更がかかる。まぁ、逆に影響度が大きくなるから気をつけないといけないではある。多分DRY原則のこと)
- 多分だけど、引数なしのFunctionプロシージャでも引数を指定しなくてはいけない。ので、Functionプロシージャはダミーの引数を用意し、SubプロシージャからFunctionプロシージャを呼び出すときもダミーの引数を投げる。
- 嘘、functinoプロシージャは引数省略できるみたい
- いつもやってるプログラミングとは違う言語だけど、こういう事がしたい!こういうコードを書きたい!⇒ググって逆引きやリファレンスを読む⇒VBAではこうやるのか・・・⇒コーディング。という、「プログラミング」という意味では、あまり変わらないなぁと思った。関数化とか配列とかfor文とか、どの言語でも普遍的に使う概念とパターンはしっかり押さえておくべきだな!とか思った。
- 21 http://www.google.co.jp/search?q=Galaxy+S+テザリング&hl=ja&client=firefox-a&hs=WTx&rls=org.mozilla:ja:official&prmd=ivns&ei=cVBJTeqZAdCPcbCGrNML&start=10&sa=N
- 5 http://www.google.co.jp/search?q=テザリング galaxy&btnG=検索&hl=ja&client=firefox-a&hs=joL&rls=org.mozilla:ja:official&sa=2
- 3 http://search.yahoo.co.jp/search?p=galaxy+s+テザリング&aq=-1&ei=UTF-8&xargs=12KPjg1uhSvIGmmvmnN-mZDrDaoAtP0cHwsd5sCpIIXYZL8wZsWPV9aOGQxZ5tTphv-wzWzVqkz_ZFOfCPkNq6Ig..&pstart=3&fr=aaplpd&b=11
- 3 http://webcache.googleusercontent.com/search?hl=ja&rlz=1G1GGLQ_JAJP272&q=cache:Lvi7DTh09GkJ:http://d.hatena.ne.jp/ariteku/20110110/1294678924+galaxy+s+テザリング&ct=clnk
- 3 http://www.google.co.jp/search?hl=ja&lr=lang_ja&tbs=lr:lang_1ja&q=wifi+tether+galaxy&aq=4&aqi=g6g-m4&aql=&oq=wifi+tether+
- 3 http://www.google.co.jp/search?q=galaxys+テザリング&hl=ja&prmd=ivns&ei=OPtMTeTiNIGycY69xfsF&start=10&sa=N
- 3 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=配列+JSON+日本語&num=50
- 2 http://docomo.ne.jp/cp/as-rslt.cgi?pno=1&key=テキストファイルをExcelで開くには&sid=000
- 2 http://hb.afl.rakuten.co.jp/hsc/0cf81f78.5d025d04.0cf81f77.0d6bc773/
- 2 http://search.yahoo.co.jp/search?p=キーボードの入力がおかしい&tid=top_ga1_sa&ei=UTF-8&pstart=1&fr=top_ga1_sa&b=11


