ExcelVBAで外部アプリ操作やクラスモジュールのコードが見つからない問題の考察

SEやプログラマーの方たちがシステムを実装している時は、すぐに「こういった動作をさせたい」コードを思い浮かぶ人もいるでしょうし、そうじゃない人もいるでしょう。

 

では、すぐに求めているコードが思い浮かばない人たちはどのようにしてコーディングしていくのでしょうか。

 

いろんな辞書的な本を職場に持ち込んで調べながら仕事を進める人もいるでしょうし、インターネットでシステムにさせたい「動作」やその「言語」を検索欄に入力して調べる人もいるでしょう。

 

他にも何らかの方法があるとは思いますが、何となく多くの人がやっていそうな方法を記述してみました。

 

ここまで数ヶ月間システムをつくるためにプログラミングをしていて気づいたのは、辞書を調べてもインターネットで調べても求めているコードが意外と「見つからない」という現実です。

 

今回はこのことについて思ったことを書いていってみます。

自分が調べた範囲での辞書やインターネット上での情報からの現状

これは非常に「意外」だなと感じています。自分はExcelVBAを使ってシステムをつくる仕事に就いて、数ヶ月間コーディングをしてきました。

 

システムを実装していると、自分が考える動作をシステムにさせたいと思っても、どうしてもそれに当てはまるコードが思い浮かばない時があります。

 

そういった時は辞書やインターネットで検索して調べるのですが、これが「意外」にも求めているコードが見つからないんです。以前の自分は、システムをつくる上で辞書やインターネットは「万能」だと思っていました。

 

なぜなら辞書にはものすごい膨大なコードや例文がありますし、インターネットでも検索欄に「ExcelVBA 表の最終行」などで検索すればいくらでもそのコードが書かれたサイトがヒットしていたからです。

 

ExcelVBAでもAccessVBAでもコードが充実した多くの辞書が売られていますし、インターネット上でも多くの優秀な方たちが文字通り星の数ほどのコードや例文を記述したサイトをUPしてくれています。

 

だからシステムをプログラミングしている途中で仮にわからない動作があったとしても、辞書やインターネットで調べれば多少時間がかかっても「わからないことなどない」と思っていました。

 

しかし実際に仕事でプログラミングしていくと気づくようになっていったのですが、現実は違っていました。何に気づいたのかというと「自分が求めているコードが見つけられない」ということにです。

なぜ求めているコードが見つからないのか

システムを実装していく途中で、なかなか欲しいコードが見つからない時に最初の頃は、

「自分の調べ方が悪いのではないか」

「自分の能力や知識が劣っているからだ」

「そもそも必要な動作の『発想』自体が自分にはないのではないか」

という風に自分に問題があるんだと思っていました。

 

例えば「表の最終行の行番号」ではなく「罫線が設定されている最終行の行番号」を取得したいと思った場合、最初は次のようなコードを考えるのではないでしょうか。

①MaxRow = Cells(Rows.Count, 1).End(xlUp).Row

Excelの表のA列の一番下からショートカットキーの「Ctrl+↑」と同じ動作で、表内の最終行を取得できるというものです。

 

しかしこの方法だと取得できるのは「データがある最終行の行番号」であって、何もデータが入力されていない行がある表の最終行は取得できません。

 

例えば、ある表が10行あってデータが入力されているのは5行だけ、しかし罫線は10行目まで引かれている、といった場合です。そういった時は②「UsedRangeプロパティ」というコードがあります。

 

このコードは「使用されている最初のセルから最後のセルのセル範囲」を取得できるので、表内に空白行があっても罫線が引かれている「10行目の行番号」を取得できます。

 

表の最終行を取得したいと思ったときに①のコードしか知らず、②のコード自体を全く知らないという状態だったら、本来であれば出来た仕組みが「できない」という結果にならざるを得ないかもしれません。

 

例え出来たとしてもコードをこねくり回して難解なコードを作らざるを得なくなるかもしれません。

 

自分が言う「発想自体がない」とはそういうことです。単純に「知っているか、知らないか」という問題でもあります。

 

しかしそれ自体は仕方ないことだと思っていました。自分はまだ経験も知識も浅いので、「ピンポイント」で直接的に求めているコードを探すことは出来ません。

 

だから「動作や状態」で探すようにしていました。例えば「最終行 取得 罫線 表 空白 vba」で検索すると先ほどのUsedRangeプロパティを見つけることが出来ます。

 

自分が作ろうとしているシステムにズバリ合うコードなど見つかるわけがない、断片的に合いそうなコードを見つけてそれを組み合わせればいいのではないか、そう思っていた時期もありました。

 

しかしそれでもどうしても求めているコードが見つからない時があります。

基本的なコードを見つけることは出来るのだが・・・

辞書やインターネットでは基本的なコードを見つけることは簡単です。例えば次のようなワークシートの名前の変更や削除するコードです。

ActiveSheet.Name="AAA"  'アクティブシートの名前を「AAA」にする
ActiveSheet.Delete   'アクティブシートを削除する

上記のようなコードがあるというのは知っていますし、仮にすぐには思い浮かばなくてもインターネットの検索欄で「ExcelVBA シート 削除」などと入力して検索すればすぐに見つけることが出来ます。

 

問題なのは、もっと複雑なコードやExcelVBAから他のアプリケーションを操作するようなコード、クラスモジュールに関するコードが見つからないことです。

ExcelVBAから外部アプリ操作やクラスモジュールに関するコードが見つからない

何らかのシステムを作っている時に「こういう動作をさせたい」と思っても、「これは今までのやり方じゃ無理だな・・・」と気づくことはないでしょうか。

 

仮に「これはExcelVBAから外部アプリケーションを操作する知識がないと駄目だな」とか、「この動作はクラスモジュールの知識が必要なんだな」ということがわかったします。

 

しかし残念なことに、そのような分野の操作方法がまとまった本や情報というのは、数ヶ月間いろいろと調べてみましたがなかなか見つけることが出来ませんでした。

 

ExcelVBAからIEを操作する方法などは多く見つけることが出来ます。しかしExcelVBAからPowerPointやOutlook、さらには他のアプリケーションを操作する方法に関するまとまった情報はなかなか見当たりません。

Yahoo!知恵袋でもQiita(キータ)でも目的のコードは見つからない

自分が「こういった動作をさせたい」と考えているコードをインターネットで検索していると次の「Yahoo!知恵袋」と「Qiita(キータ)」という2つのサイトをよく見かけます。

Yahoo!知恵袋(ヤフーちえぶくろ)-Wikipedia

Yahoo!知恵袋(ヤフーちえぶくろ)とは、Yahoo! JAPANが運営する、電子掲示板上で参加者同士が知識や知恵を教え合うナレッジコミュニティ、知識検索サービスである。

Qiita(キータ)-Wikipedia

Qiita(キータ)は、Incrementsが運営するプログラミング情報のナレッジコミュニティ。2016年現在で日本最大のプログラマーコミュニティとされている

上記2つのサイトはExcelVBAやそれ以外のコードに関しても有益な情報がたくさん記載されています。辞書にあるようなコードだけではなく、実践向きの「入り組んだコード」も多く見つけることが出来ます。

 

特にYahoo!知恵袋の方は、質問者に対してそれに答えるというスタンスでコードが書かれており、なんとなくその切迫感や切実さが伝わってきます。

 

このようなやり取りを見ていると、今まで多くの人が自分のように辞書やインターネットで探しても、どうしても求めているコードが見つからなかったんだろうなと気づかされます。

 

上記のようなサイトが存在しているのは本当にありがたいことです。もちろん上記以外にも、わからないコードがあった場合質問できるサイトはたくさんあります。

 

求めているコードがわからない時に辞書が基本的なコードを教えてくれる役割があるとすれば、上記に引用したようなサイトがより実践向きのコードを教えてくれる役割を担ってくれているとも言えます。

 

とはいうものの、インターネット上にはExcelVBAのコードに関して過去に膨大なやり取りの記録が残っているはずなのに、まだ自分の求めているコードが見つからなかったりするのです。

 

例えば「ExcelVBAでOutlookにある指定のフォルダの中から特定の文字列が含まれるメールを検索する方法」を探したかったとしても見つかりません。

 

「OutlookVBA」だけで探すと「Outlookにある指定のフォルダの中から特定の文字列が含まれるメールを検索する方法」はあるかもしれませんが、ExcelVBAでOutlookを操作したいと思ってもその方法は見当たりません。

 

自分の探し方が悪い、というのももちろんあると思います。というか基本的に「ExcelVBA」から「他のアプリケーション」を操作するという方法の情報自体をあまり見つけることが出来ません。

 

世間的に需要がない、というのもあるでしょう。自分で試行錯誤して欲しい動作ができるコードを自力で見つけていくしかないのかもしれません。

なぜインターネットでコードのストック集が多いのかわかった気がする

おそらく自分のように辞書を調べてもインターネットを調べても求めているコードが見つからない人というのは結構多いのではないでしょうか。

 

自分はここ数ヶ月間、ExcelVBAの辞書を見ながらシステムを作る時がありましたが、段々と不足感を感じるようになっていきました。というのも辞書という形では物理的、ページ数的に入れられるコードには限界があり「断片的」でもあるからです。

 

そういった事情から徐々にインターネットでコードを調べるという方法にシフトしていきました。とはいっても辞書よりは複雑で実践的なコードを見つけることは出来るのですが、ここまで書いてきたように今ひとつという感じです。

 

たぶん「ある所にはある」んだと思います。すごい充実したコード集みたいなものがインターネット上でのサイトやどこかの書籍に。

 

一方で気づいたこともあります。それは個人でVBAに関するコードをストック集のようにサイトにまとめてくれている方がいるということです。

 

こういった有益なサイトをいくつも見つけてきて思ったのは、自分のように辞書やインターネットで調べてもなかなか求めているコードが見つからないから、

「その人が試行錯誤して実際に役立つコードを業務で使えるように蓄積してきた」

のかもしれない、ということです。

 

以前は不思議に思っていました。「なんでここまで手間暇かけてこんなに充実したサイトをつくるのだろうか」と。

 

アフィリエイトとかアドセンスが目的という場合もあるのかもしれませんが、やはり一番の理由は「業務上必要だから」なのではないかと思いました。

 

業務上わからない動作やトラブルがあったとして、わからないままにはしておけません。技術者が「わからない」と言い続けていたら早晩クビにされてしまいます。

 

そうならないようにするための策のひとつして、ブログやサイトにコードを業務に使える形にして、わからない時にインターネットで自分のサイトを見にいっているのかもしれないなと思いました。

 

また、個人個人がよりレベルアップしていくためには、そのような方法も実践していかなければいけないのかもしれません。

あわせて読みたい

コメント