たうたう

主にIT系/ギター/旅行/映画等

VBAの疑問解消DAY

VBAについて思うこと
 
プログラミングの初歩の初歩だけど、な~んとなく疑問に思うことを今日はずっと調べてた。仕事中に気になったことをメモしているんです。
 
open explicit
open explicitを頭に書けってよく言われるけど、宣言されてない変数が使えないことの何がそんなに嬉しいの?って思ってた。
 
下記URLをもとに 実験してみた。
 

f:id:vrest72l9:20161031002856p:image

 なるほど、わかった!
赤丸のように変数addressをAddresと間違えて書いてしまってもエラーにならない!
しかも新しく別の変数として認識される。。怖っ!!!!
 
 
あと、実行してみるとわかるが、最後青丸の変数cntが表示されるのだが、件数が出ない。
これは単純に数値型だと認識されてないから計算がされていない??

f:id:vrest72l9:20161031002852p:image 

これは今後も引き続き忘れないようにしよう。
 
ということで、Open explicitを使わない危険性が十分わかった!!!
 
 
変数宣言と変数定義って違い有るの?
この両者は包括関係にある。
宣言のなかにある定義。
宣言は識別子の属性を指定する。
定義はメモリ領域を確保する宣言。
int a; ←これは変数定義
extern int a; ←これは変数(extern)宣言
 
ひとつ賢くなった
 
Thisworkbook と AcitveWorkbook の違いは??
ThisWorkbookはそのマクロが存在するブック
ActiveWorkbookは現在選択されているブックになります
あれ、でもマクロが標準モジュールにあったら、そのマクロが現在進行形で動いているシートってことでよいのかな??
 
 
セル単体じゃなくて指定した範囲でチェック処理(入力チェックとか)ってできるの?
WorksheetFunction.CountAと言うものを使えばできる!!!
まぁ、この場合、レンジ指定して、その中でデータの個数を返すというものだけど、これチェックに使えるじゃんね!(下記ユーザ定義関数に示す)

f:id:vrest72l9:20161031002900p:image

 ちなみにWorksheetFunctionというのはワークシート関数をマクロでも使うときに呼び出すプロパティだ。
正確にはapplicationオブジェクトのWorksheetFunctionプロパティ。
 
 
アルファベットのカウントアップはどうやってやるの?
こんなんでできる!
この例だとAからFまでFor文でくりかえしていけばよい。これでA1形式も対応できる。

f:id:vrest72l9:20161031002903p:image

 
VBA正規表現使えるの??
結論。使えた。VBScriptというオブジェクトを使う。
IE5が無いと使えないらしい。
けど、自分のパソコンはIE5があるかどうかわからないんだけど使えた。

f:id:vrest72l9:20161031002906p:image

セルに田中~~子を混ぜてみた。

f:id:vrest72l9:20161031002910p:image

 

おぉ、でた!

f:id:vrest72l9:20161031002909p:image

これ便利だよな~~。excelの関数に頼らなくてもいいんだもんね。しかもわかっている人なら共感?できるし、手短にかける。
 
 
メモリ開放する必要あるのか?
プロシージャ内で宣言したものは、そのプロシージャが終了した時点で開放される。
だからプロシージャレベルの変数は開放する必要はない、と考える。
ここで開放について議論がなされているが、色んな意見が有るようだ。
プロシージャレベルだとしない人が多い、モジュールレベルだとする人がちらほらいる印象。自分が調べた限りだと。
プロシージャレベルでもsetしているオブジェクトは開放する人もいる。。
 
あとは全般言えることだけど、小さいシステムだと全く要らないけど、大規模だと考えていかないといけないよな~~など。。
 
 
 
おーわり