変わりゆく数 〜変数定義〜
おそらくVBAを習得するにあたって、最初の難関がこの変数定義ですかね。
【説明:変数とは】
変数とは、そのまんま、変わる数です。
舐めてんのか、とか言わないでください。今から説明します。
例えば、A1セルに"こんにちは"と入力する時を想像してください。
この時、入力対象のセルは、何行目でしょうか。
当然答えは1行目ですよね。では、C5セルの時はどうでしょう。これも簡単、5行目ですよね。
というように、その場面場面に応じて変動するものの事を変数と言います。先の例で言えば、変数とはつまり行番号の事ですね。列番号にも同じことが言えます。
日常生活の中で言えば、時間とか、日付とかもそうですね。とにかく変数とは、
1つに固定されていることのないもの
の事です。
ここで、「数値」ではなく「もの」と書いたのは、実は結構重要です。
例えば、今までの記事では"VBA日記"という文字列を特定のセルに入力してきましたが、
仕事をする上で、"VBA日記"と入力する事しかない
ということは、100%ありえませんよね。壊れかけのラジオだってもう少しバリエーションあります。
そう、つまり、変数という名前に惑わされがちですが、文字列などの数値以外ものも変数なのです。
なので、先の例で言えば"こんにちは"という文字列も、場面場面で内容を変えたい時は変数なのです。
【説明:変数定義】
VBA上で変数を使えるようにするには、変数を宣言(定義)します。
以下は、"入力文字"という名前の変数を宣言するマクロです。
Dim 入力文字
入力文字 = "VBA日記"
Dim が、今から変数を使いますよーという合図になります。その後に変数の名前を入れます。変数の名前は、好きに決められます。ただし、一部の記号は使えません。変数名がダメな時はエラーになるので、その時は名前を調整してください。
で、変数に何かを代入する時は、=を使います。
また、代入する値を変えたい場合は、再度変数に別の値を代入すれば上書きされます。
Dim 入力文字
入力文字 = "VBA日記"
~入力文字が"VBA日記"の間の処理~
入力文字 = "こんにちは"
~入力文字が"こんにちは"の間の処理~
こんな具合ですね。
変数宣言は、使用する変数につき一回でいいので、Dimは複数書かなくていいです。というより、Dimを何回も書くとエクセルから「同じ変数もう聞いたよ?忘れたの?バカなの?」とツッコミが入りますので気をつけましょう。
実は変数定義には型指定とか色々奥深い側面がありますが、今回は割愛。
【実践】
今回は少しだけ役に立つかもしれない実践。
以下の場面を想定します。
- 毎日業務日誌を書かなければならない
- 業務日誌には「記入日付」と「○/○の業務報告をします」という定型文を入力しなければならない
毎日の業務日誌、面倒ですねぇ。しかも日付と定型文を手入力……Why Japanese people!!ですね。
マクロを実行するだけで、日付と定型文が入力されたら、楽ですね。
というわけでこんなマクロを組んでみました。
sub 日付、定型文入力()
Dim hiduke , bun '日付と文
hiduke = "=TODAY()"
Range("A2") = hiduke '日付を入力するセル番地を指定
bun = Range("A2").Value & "の業務報告をします"
Range("B3") = bun
end sub
A2セルが日付を入力するセル、B3セルが定型文のセルと想定してます。
.Valueの部分は今まで紹介していませんが、まあそのうち。今はそういうもんと思ってください。
大して複雑な処理をするわけではありませんが、皆さん秒数を想像してください。
- 今日の日付を確認(3秒)
- A2セルに日付を入力(1秒)
- B3セルに日付を含めた定型文を入力(6秒)
PC操作に慣れててもこんなもんじゃないですかね。当然、10秒くらい大したことないよ、と思うことでしょう。しかし、それが毎日です。週5勤務×4週間×12ヶ月で計算すると、1年で40分削減になります。ではこれが、1回1分かかるならどうでしょうか。5分の作業なら…と考えてみてください。
業務の改善は、この10秒の積み重ねです。
初めはこう行った単純かつ細かいことから、徐々に複雑で時間のかかる操作を自動化・高速化していくことを考えていくことになります。
というわけで、今回はここまで。