失敗談というより、普通の話です。


プログラマならともかく、仕事の片手間でやってる身としては、

単純処理が多いと、VBA書くか手作業しようか迷うことが多々あります。

迷うのは、処理頻度が少ないだろうと思う場合です。特に今回限りとか。

素人VBA書く時間で、処理が終わるんじゃないかと。

当然、自動マクロも多用します。しかし条件判断をしてくれないのが残念です。


過去の経験では(といっても実績2,3回ですが)、書いて、何度か使って、お蔵入りでした。その作業が終わると不要になるので。。。でも、VBAにしておけば、やり方変えてもう一回とか修正が楽なので、結果的には作って正解でした。


僕のVBAの使い方はあくまで自分の作業効率アップで、他人には配布しません。

なので寿命も短いのだと思います。

使用期間が短いと、尚更にVBA作成時間を問われます。ちょっと使って終わりなのだから、作成時間は取れません。必要な機能を持たせてさっさと作る能力が必要になってきます。



引渡しの通過儀礼
レベル1 ByVal? ByRef? 何それ?
レベル2 引渡しなんぞ使わん!スコープ変えて宣言だ!
レベル3 え~~~~?デフォルトってByRef だったの?マジで?

名前からして解りにくい。値渡し、参照渡し、どっちがどっちだ?
下記の説明が分かり易いです。。。。と参照URLを書くつもりでしたが、見つからないので自分で書きました。

値渡しは、値つまりデータをコピーして引渡します。コピー済なので受取側で値を変えても、引渡し元は変わりません。一方、参照渡しは値ではなく値が入っているアドレスを引き渡します。「ここのアドレスに入ってるから参照してね」と。受取側でそれを見る(参照する)のです。受取側で値を変えると、それは参照したアドレスのデータを変えるので、そのアドレスは引渡側でも見るので、引渡側のデータも変わってしまいます。

参照渡しは、日常業務でもありがちですよね。

値渡し
受取側「○○のデータいくつだっけ?」
引渡側「35です」
受取側「値が更新されて36になったそうだから、36使おう」
引渡側のデータはいつまでも35のまま。

参照渡し
受取側「○○のデータいくつだっけ?」
引渡側「サーバのファイルに入ってるから、参照して」
受取側「値が更新されて36になったそうだから、ファイルの値を訂正しとこう」

「訂正してくれてありがとう」かも知れないし
「勝手に変えんなボケ!」かも知れないし
検索でここに飛ばされたあなた、間違ってます。
下記プロシージャは動作しません。理由は分かりますか?

Sub test()
ActiveWorksheet.Copy
End sub

ここまで露骨に書けば分かると思いますが、フツーやるでしょ?
ワークシート以外のシートなんて使ったことないし。Sheetの項目でちょろっと出るだけでしょ。
3時間迷いましたよ。


正解
ActiveSheet