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から他のアプリケーションを操作するようなコード、クラスモジュールに関するコードが見つからないことです。

コメント