エクセルマクロ・VBA達人養成塾 小川です。
エクセルマクロ・VBAはプログラミング言語です。
「言語」なんですね。
ということで。
英語学習なんかと同じです。
VBAを使いこなせるようになるためには、ある程度、自分の中に「空でも言える」ようなフレーズが定着していることが必須です。
例えば。
「英語なんて、チンプンカンプン」と言いながらその都度ヒーヒ言いながら辞書を引いている人と、
TOEIC900点、英検1級を持っている人とを比べてみましょう。
TOEIC900点、英検1級を持っている人にとっては、
例えば、同じ「John has all the skills to achieve his goals.」
という一文を覚えるにしても、より簡単です。
自分で書くにしても、脳にほとんど負担はかかりません。
だから、ますます正確な仕事を大量にこなせて、上達も早くなるんですね。
英語の場合であれば、、こういうのをスラスラマスターできる人は、
「SVO」とか「SVOC」とか、そういう基本的な構文パターンをしっかりマスターしています。
身にしみて覚えています。
上記のものなら、「SVO」だけ取り出すと
「John has skiils」
です。あとは、それをさらにゴチャゴチャと解説しただけ。
僕は、高校の頃の英語の成績は赤点スレスレでした。
その一方、一時期必死こいて勉強したことがあるので、今では、TOEIC 935点、英検1級を持っています。
なので実感しますが、こういう基本的なところがきちんと身についているかそうでないかというのは、自分が英語で話すにしても書くにしても、エラい差を生じます。
エクセルVBAでも同様です。
VBAのフレーズ、たとえば
Dim ku ku = InStr(Range("C2").Value, "区") '[0] Range("F2").Value = Left(Range("C2").Value, ku) '[1] Range("G2").Value = Mid(Range("C2").Value, ku + 1) '[2]
という一文の、[1], [2] について考えてみましまょう。
まずは、[1]の左辺。
Range(“F2”).Value
これは、「オブジェクト.プロパティ」という、超基本の組み合わせセットです。
これで、「セルF2の値」と言っています。
ここでの区切り文字は、「ピリオド」。
基本の知識として知っている人にとっては、何でもないことです。
次に、[1]の右辺。
Left(Range(“C2”).Value, ku)
これは、「関数(引数1, 引数2)」という、これまた超基本の組み合わせセットです。
ここでの区切り文字は、「カンマ」。
基本の知識として知っている人にとっては、何でもないことです。
そして、「関数」と「引数1」、「引数2」のそれぞれが
「Left」、「Range(“C2”).Value」、「ku」
になっただけ。
なんだ。簡単じゃない ヾ(´ー`)ノ
あとは、「Range(“C2”).Value」が何を指しているのか考えます。
これは、さっきの「Range(“F2”).Value」が何を言わんとしているのか理解できる人なら、分かりますね。
「ku」に何が入っているかは、上からソースを追っかけていけば分かります。
[0]のところで、「InStr(Range(“C2”).Value, “区”)」の結果が入っています。
(具体的にそれが何を言わんとしているかの説明は今回は省略。
さっきの「Left(Range(“C2”).Value, ku)」についての解説で書いたことを元にして、考えてみてください)
さて、そのとき。
Left(Range(“C2”).Value, ku)
の話に戻るんですが。
初期の間違いで、こういう風に書く人が、よくいるんですね。
Left(Range(“C2”).Value. ku)
分かります?
「関数(引数1, 引数2)」の、「引数1」と「引数2」との区切りが「カンマ」ではなく、「ピリオド」になってしまっています。
こういうミスをしてしまう人。
どうしてやってしまうのかというと。(もっと言うと、どうしてそのとき自力で解決できないのかというと)
「関数(引数1, 引数2)」
で、ここでの区切り文字は、「カンマ」ということを、身にしみて覚えられていないからです。
基本の知識として知っている人にとっては、何でもないことです。
引数の区切りは、「ピリオド」ではありません。「カンマ」です。
こういうのは、身にしみて覚えてください。
そして、こういうのを身にしみて覚えられると、
Range(“G2”).Value = Mid(Range(“C2”).Value, ku + 1) ‘[2]
のようなフレーズも、それほど違和感なく理解できます。
なんだ。「引数2」が、さっきは「ku」だったのが、今回は、「ku + 1」になっただけじゃないか、と。
それもこれも、
「関数(引数1, 引数2)」
という基本の形をすっかりマスターしているかどうかがすべてです。
英語でも、「SVOO」とか「SVO」とか、構文の形に基本のパターンがあります。
エクセルVBAでも
○オブジェクト・プロパティの指定
○変数の宣言
○文字列の結合
○関数の記述
○クラスの定義、インスタンスの生成
とかのときに出てくるフレーズの骨格は、すべてパターンでして。
このパターンが脳内で定着しているかどうかが、次にマクロを書くときの書きやすさ、トラブル回避をする能力に直結します。
スラスラ書けないものがあるようでしたら、こういうところから改善していってください。