VBAの疑問解消DAY
VBAについて思うこと
プログラミングの初歩の初歩だけど、な~んとなく疑問に思うことを今日はずっと調べてた。仕事中に気になったことをメモしているんです。
open explicit
open explicitを頭に書けってよく言われるけど、宣言されてない変数が使えないことの何がそんなに嬉しいの?って思ってた。
下記URLをもとに 実験してみた。
なるほど、わかった!
赤丸のように変数addressをAddresと間違えて書いてしまってもエラーにならない!
しかも新しく別の変数として認識される。。怖っ!!!!
あと、実行してみるとわかるが、最後青丸の変数cntが表示されるのだが、件数が出ない。
これは単純に数値型だと認識されてないから計算がされていない??
これは今後も引き続き忘れないようにしよう。
ということで、Open explicitを使わない危険性が十分わかった!!!
変数宣言と変数定義って違い有るの?
この両者は包括関係にある。
宣言のなかにある定義。
宣言は識別子の属性を指定する。
定義はメモリ領域を確保する宣言。
例
int a; ←これは変数定義
extern int a; ←これは変数(extern)宣言
ひとつ賢くなった
Thisworkbook と AcitveWorkbook の違いは??
ThisWorkbookはそのマクロが存在するブック
ActiveWorkbookは現在選択されているブックになります
あれ、でもマクロが標準モジュールにあったら、そのマクロが現在進行形で動いているシートってことでよいのかな??
セル単体じゃなくて指定した範囲でチェック処理(入力チェックとか)ってできるの?
WorksheetFunction.CountAと言うものを使えばできる!!!
まぁ、この場合、レンジ指定して、その中でデータの個数を返すというものだけど、これチェックに使えるじゃんね!(下記ユーザ定義関数に示す)
ちなみにWorksheetFunctionというのはワークシート関数をマクロでも使うときに呼び出すプロパティだ。
正確にはapplicationオブジェクトのWorksheetFunctionプロパティ。
アルファベットのカウントアップはどうやってやるの?
こんなんでできる!
この例だとAからFまでFor文でくりかえしていけばよい。これでA1形式も対応できる。
結論。使えた。VBScriptというオブジェクトを使う。
IE5が無いと使えないらしい。
けど、自分のパソコンはIE5があるかどうかわからないんだけど使えた。
セルに田中~~子を混ぜてみた。
これ便利だよな~~。excelの関数に頼らなくてもいいんだもんね。しかもわかっている人なら共感?できるし、手短にかける。
メモリ開放する必要あるのか?
プロシージャ内で宣言したものは、そのプロシージャが終了した時点で開放される。
だからプロシージャレベルの変数は開放する必要はない、と考える。
ここで開放について議論がなされているが、色んな意見が有るようだ。
プロシージャレベルだとしない人が多い、モジュールレベルだとする人がちらほらいる印象。自分が調べた限りだと。
プロシージャレベルでもsetしているオブジェクトは開放する人もいる。。
あとは全般言えることだけど、小さいシステムだと全く要らないけど、大規模だと考えていかないといけないよな~~など。。
おーわり