閲覧いただきありがとうございます!
Excel VBA関連で出品しているさべろくと申します。
今回は使えるシーンは限られているけど、知っておくと助かるそんなテクニックについて書いていこうと思います。
一応上級者向けと銘打っておりますが、初心者の方も知っておくと後々使える機会もあるかと思いますので是非ご覧ください。
唐突ですが、VBAは古い言語です。初出は1993年ですので、29年前からある言語となります。
そのため、Python等と比べると色々用意されている関数が少ないです。
例えば配列の中身をソートさせるにもPythonならsortと書けばできるのにVBAでは自分で実装してあげる必要があります。
そのように既存に用意されている便利なものを使うのではなく、自作するというシーンがExcel VBAで物を作っていると度々あります。
これがまたプログラミングの根本的な部分に触れる機会になってExcel VBAの楽しいところなのですが、難しいところでもあります。
歴史の長い言語で元からある記事に加えて、昨今のプログラミングブームもあり、Excel VBAの記事も増えてきていることから、例えば先ほど挙げたソートの例なら「excel vba 配列 ソート」とかで検索すればヒットするのでそこまで苦労はないでしょう。
ですが、経験上まだ完璧かというと少し足りないなと感じています。
例えば、数学の組み合わせの問題というのがあります。
10個の色付きボールから4個選んだときの組み合わせを列挙せよ、といった問題です。
この場合「excel vba 組み合わせ 列挙」とかで調べるとしましょう。
調べると組み合わせを算出する関数を紹介している記事などがヒットして、
OKと言いたいところなんですが、解説が全然なくてどうやって解いているのかが不明といった事態に陥ります(コード読めばいい話ですがアルゴリズムをコードから解析するのは結構手間です。。。)。
上級者向けと書いてある理由なんですが、上級者は作れれば良いのではなく、例えば速度に拘ったりとかするべきであると考えています。
そのため、この組み合わせの例であれば、どういったアルゴリズム(解き方)で解いていて、それは最適であると言えるのかどうかも記事を見ながら検討する必要があるでしょう。
そこで自分で考えて最適なアルゴリズムで作ってやろうと思うでしょうか?
その気概は素晴らしいものだと思いますが、車輪の再発明です。
既存に素晴らしい技術がある場合は、再発明はやめましょう。
では本題です。
車輪の再発明を避けて、既存の素晴らしいアルゴリズムで解くにはどうすればいいでしょうか?
Excel VBAでそんな素晴らしい記事に出会えればそれでOKです。
しかし、出会えないこともしばしばあります。
そんなときに覚えて欲しいテクニックとして、
「C言語で調べる」
というのがあります。
C言語は1972年にできたプログラミング言語で50年の歴史を持ちます。
VBAより更に古い言語でデフォルトでは便利な関数などほとんどなく全て自作する必要がある世界です。
C言語の世界はよりプログラミングらしいと言いますか、アルゴリズムを大事にしている印象があります。
色々な人が一つの問題に対して、こうやって解いた方が効率的だよ、こっちの方がいいよ、など様々な意見があり、C言語の解説ページはアルゴリズム的に洗練されているページが多いイメージです(もちろんExcel VBAにも素晴らしページはあります)。
そのため、例えば先ほどの組み合わせの例なら、「C言語 組み合わせ 列挙」と調べてみてください。
Excel VBAで調べてみた結果とC言語で調べてみた結果のページを見比べてみてください。
勿論C言語のページもコードのみ載っていて解説がないといったこともあるのですが、経験上良いページに出会う確率は高いと思っています。
後は、英語にアレルギーがない方なら英語ページを検索するのもいいでしょう。
その際にもExcel VBAで検索するのではなく、C言語で検索した方がヒットする記事は多くなると思います。
C言語は分からないという方もアルゴリズムを解説しているページを見て、どういう風に解くのかを知ることは為になると思います。
Excel VBAで調べて出てこなければ、C言語で調べる。
利用するシーンは少ないかと思いますが、いざという時は思い出してみてください。
この記事が誰かのお役に立てれば幸いです。
普段Excel VBAに関する相談などを請け負っております。
困ったことがあればお声がけください。
お読みいただきありがとうございました<(_ _)>