エクセルマクロ・VBA達人養成塾 小川です。
http://www.exvba.com/vb/index.php
今日は、よくあるご質問への簡単な答えを。
ということで、お答え。
簡単に言うと、セルに関数を埋め込むマクロを作るより、マクロ内で計算し、その結果をセルに書き込むほうが楽で簡単だからです。
セルに手入力で関数を書き込むことと比べても、そのあとのメンテナンス性等を考慮すると、マクロで書いたほうがよいですね。
一例を挙げてみる。
セルB2~B11に、以下のように、氏名の情報が入っているとします。
そして、C列、D列に、苗字と名前を記入するとする。
上記の例では、苗字と名前の間には、半角スペースが入っているとしよう。
そうすると、関数で処理をすると、こんな感じ。
セルC2に入れる関数式: =LEFT(B2,FIND(” “,B2))
セルD2に入れる関数式: =MID(B2,FIND(” “,B2)+1,100)
上記の式をコピーすることになる。
VBAで同様の処理をしようとするなら、こんな感じ↓
これだけだと、手間としては、関数のほうが少ない。
しかし、こんなキレイなデータばかりの世の中ではない。
例えば、こんな感じ。以下の例では、B列の値の前後に余計なスペースが入っている。
すると、関数だと、さっき作った関数を加工して…。
セルC2に入れる関数式: =LEFT(TRIM(B2),FIND(” “,TRIM(B2)))
セルD2に入れる関数式: =MID(TRIM(B2),FIND(” “,TRIM(B2))+1,100)
ややこしく、なってきた。
VBAで同様の追加実装をしようとするなら、こんな感じ↓
メンテナンス性が高い。
さらに、氏名の間にある区切り文字が、半角スペースとは限らない。
例えば、「半角スペース」、「全角スペース」、「/」のいずれかの可能性があるとしよう。
そうすると、関数だと、さっき作った関数を加工して…。
セルC2に入れる関数式: =LEFT(SUBSTITUTE(SUBSTITUTE(TRIM(B2),”/”,” “),” ”,” “),FIND(” “,SUBSTITUTE(SUBSTITUTE(TRIM(B2),”/”,” “),” ”,” “)))
セルD2に入れる関数式: =MID(SUBSTITUTE(SUBSTITUTE(TRIM(B2),”/”,” “),” ”,” “),FIND(” “,SUBSTITUTE(SUBSTITUTE(TRIM(B2),”/”,” “),” ”,” “))+1,100)
こんなの、さくさく作れる人に出会ってみたい。
僕でも苦労する。
他人に引き渡したら、その他人はもう二度とこのエクセルファイルをメンテナンスしようとはしないだろう。
ところが、VBAで同様の追加実装をしようとするなら、こんな感じ↓。
メンテナンス性も高い。
例えば、このあと、上司から「関数の仕様を変更してくれ」等々言われたときのことを考えて欲しい。
VBAを使えない「関数職人」みたいな人は、セルに横書きされた複雑な文字列を目をこらして読み解きにかかるか、上司に文句を言うか、同僚に文句を言うかだろう。
だが、VBAなら、コードが縦書きされているので、どこをどうなおせばよいか分かりやすい。
本当に「エクセルが得意」と言いたければ、VBAの知識はやはり必須だろう。
ちなみに、上記のstep3くらいのマクロを自在に書けるようになるくらいは、達人養成塾の「エクセルマクロ・VBA速習コース」受講後の当然到達しているスキルレベル ヾ(´ー`)ノ