注目の投稿

技術Note一覧

このブログのメインコンテンツである技術Noteの一覧

2016/12/18

vbaまとめ

研修で使ったのでメモ

・誰のパソコンでも使える
この手軽さはかなり評価されるべき

・(自分の中で)噂の列挙型使ってみた
これは強力
http://www.aerith.net/design/enum-j.html


・実行すごく早い気がする
実行速度ももちろんだし,コンパイルもいつしてる?って感じ
あとworksheetfunctionの有能感がすごい
二重for文書きたくないときはworksheetfunctionをまず見る.

・variant型便利
あまりよくないと思いつつも,困ったらVariantという風潮が根強い

・Range型は必ずどこかのセルと対応するのが厄介
計算は基本的にセル範囲をRange型で取ってきて,Variant型に代入.そしてデータを加工したら最後にシートのどこか(Range)に書き込むのが良い.
この方法だと計算過程をいちいちセルに書き込まなくていいから高速(書き込み時間+Excelがセルを評価する時間削減)
しかもセルを計算過程の数字で汚さないからいい感じ.

・Range型の可能性は無限大
あるセルを変化させると関係セルが再計算される仕様がリアクティブプログラミング的.シリアル通信も頑張ればできるっぽいし、実はロボット制御とか糞やりやすい説が浮上しつつある

・クラスコンストラクタに引数渡せない
factory的な関数作ることで対応しないといけない.これだけは本当に対応してほしい

・継承できない
別に使わないけどさ
内部のクラスはバンバン継承してるから羨ましい

・関数を引数に渡せない
mapとかfilterみたいなことをしたいときに不便かも.

・関数の引数は実は全部参照渡し
途中まで値渡しと勘違いしてた
たまたま詰まなかった。良かった

・コンパイルエラーがひたすら分かりにくい
キレそう

・activesheetの呪い
ただ単にCells(~~)とかRange(~~)とか書くと,ActiveWorkbook.Activesheet.Cells(~~)の省略と解釈される.
だから油断すると,開いてるシートを変えたり,別のエクセルファイルを開いたりしたときに挙動が変わる.
省略せずにブックとシート名を指定してやるのが精神衛生上良い.

・Initializeのタイミングが勘違いしやすい
formが画面上に生成される度に呼ばれるのではなく,formのメソッドが呼ばれたときに一回だけ呼ばれる(from.show以外のメソッドが呼ばれて画面上にform表示されてなくても呼ばれる).formを開く度に呼び出したいならonActiveみたいなやつ推奨