vba裏技,技,論理 - 変数
変数に熟達するとvbaを書くのが楽になる。変数は適切に設定しなければならないとされているが、どうもそうではない。決まったやり方だけではなく、論理的でさえあれば、どのように処理してもいい。
一般的には下記のように書く。
Dim ppp as Long
ppp=selection.value
ここで「ppp」は変数の名前で、「long」は変数の形だ。しかしこのように適正な書き方をしなければ変数という制度を利用できないかと言えばそうではない。
ここは単に
ppp=selection.value
と書けばそれで不具合が生じることはない。折角あるvbaの機能を使わなくては勿体ない。
その代わりにコーディングの前に
Public ppp as variant
と書いておけば、main procedure だけではなく、sub-procedureやsub sub-procedureでも宣言が有効になる。「variant」という全ての形を代表する変数形を利用させてもらえば、この変数の形は何だろうといちいち考える必要なない。これは「プログラムの組み方」の項で述べた通りだ。
変数の名前は憶えやすいものがいいに決まっている。上記の「ppp」などと書けば後で何のことか分からなくなり、違う手順を踏んで確認しなければならないことになる。
だから例えば「v売上額」などと名前を付ければいい。
Public v売上額 as variant
は分かりやすい。できるだけ日本語で変数名を書けばいい。日本語は表意文字だから一目で意味を解することができる。その点英語は表音文字だから日本人にとっては一目で意味を取れない。日本語は数少ない表意文字を利用して成立している言葉だ。この貴重な財宝を捨ててはいけない。
但し、vbaは米国で生まれたプログラム言語であるので、日本語は「絵」として認識されるので、全角で処理しなければならない点も不便だが、それは仕方がない。発明者のやり方を尊重する。時には有効に作用しない場合がある。
変数は多用されることが多い。だから覚えやすいようにするのだが、入力が面倒である。従って「r」などを「row」を表す変数として、混用すればよりvbaがより書きやすくなる。
r=selection.row
と手間でも書いておけば、後で却って手間を省いてくれる。
変数の使い方に下記のようなのがある。
cells.find(“連番”).offset(1).select
rbase=selection.row
r=selection.row
do
if cells(r, 3).value=”リンゴ” then
cells(rbase, 4).value=”美味しい”
exit do
end if
selection.offset(1).select
if selection.value=”” then
exit do
end if
loop
何故そうするかと言えば、もし「rbase=selection.row」としておかなければ、最初の「if cells(r, 3).value=”リンゴ”」が成立した時に「連番」と書いてあるセルのoffset(1)に戻って
Cells.find(“連番”).offset(, 4).value=”美味しい”と書かなければならない。この煩わしさを回避ためにrbase=selection.row と r=selection.rowと同じrowの変数を二つ書いておき、rは本当の変数のように変化していくが、rbaseは変化させない効力を持たせる。
勿論これ以外に書き方は種々あれだろうが、変数の使用の一例として考えておけば一つの有効な手段になる。
ところで変数の設定には二つの方法がある。それはしかし恣意的に選択できない。
r=v売上額は
正式には
Let r=v売上額 と書くのだが、「let」は省略してもいいので、
r=v売上額 とだけ書けばいいのだ。
しかしこの方法は変数がvalue即ち値である場合r=selection.rowなど数値で表すことがができることだけに有効で、
例えばどこかのcelllを変数にする場合は
Set 規定セル = selection
と「set」を前に書き、これは省略できない。
一般的にvbaでは一番よく使われる条件などは省略できるように構成されている。これは利用すると便利だ。そういう意味でvbaは超高級言語とも言える。
上記のrbase=cells.find(“連番”).offset(1).rowのletも省略できるし、findの中の「what:=」も省略可能だ。
明日に続く
酒巻 修平