2011年3月10日木曜日

エクセル VBA

3/9 (水) 雨のちくもり
 
指導者の一人である D 先生から難しい注文を受けたことは以前に書いた。
http://anesthmemorandum.blogspot.com/2011/02/blog-post_23.html
自分としては時間ばかりかかって実りの少ないことはしたくなかったので、その注文を思い直してくれるように説得した。
 
そしたら今度は仕事量はずいぶん少なくなったものの、また別の困難な作業を仰せつかった。
エクセルのファイルの中からあるデータについて、退院時のものをピックアップせよとのことである。
 
自分としては退院時のものは必要ないと思っていたのだが、どうしてもそれが必要らしい。
何か深い考えがあってのことかもしれないと思い、とりあえず拾い上げることにした。
 
しかし言うのは簡単だが、実際にやるとなると単純に拾い上げるだけでもおそらく数時間以上はかかることになってしまう。
患者によってデータを拾うタイミングが異なるため、退院時のデータがワークシート上の同じ列上にはなく、あっちへ飛んだりこっちへ飛んだりしているのだ。
考えただけで、気が遠くなりそうな作業である。
 
それで久々にエクセル VBA を活用することにした。
とは言っても構文の類はすっかり忘れてしまったので、以前使ったのを思い出すだけで30分ぐらいかかってしまったが・・・。
 
一人の患者のデータが一つの行の上に納まっており、各患者で一番右側のデータを拾い上げるには、End プロパティが使えるようだ。
http://msdn.microsoft.com/ja-jp/library/cc409244.aspx
 
一番上の患者の一番右側のセルをアクティブにし、そこから xlToLeft を使うことで右端から見た時の最初のデータを拾い上げることができる。
あとはそれをコピーして、適当なセルにペーストする。
 
さらに For ~ Next ステートメントを組み合わせることによって、全ての患者について同じ作業を繰り返すことができるというわけだ。
http://msdn.microsoft.com/en-us/library/5z06z1kb.aspx
 
さらにワークシートの行を3つおきに2つずつ削除しようとしたが、こちらはどうもうまくいかず、3行おきに別のシートへコピー&ペーストすることでお茶をにごさざるをえなかった。
コンンピュータの達人への道のりは険しいことを改めて自覚したが、まあ目的は達したので今日のところはよしとしたい。
 

0 件のコメント:

コメントを投稿