プロが教える店舗&オフィスのセキュリティ対策術

VBAを勉強してるのですが、VBAではいろんなことが出来てびっくりしています。

そこでふと思ったのですが、
手作業だとできないけど、VBAなら出来る事はたくさんあるけど、
VBAではできないけど、手作業なら出来る事はあるのでしょうか?

A 回答 (2件)

確実に出来ないと保証する訳ではありませんが、ある程度勉強したというレベルだと非常に困難なことを並べてみますと、


録音した声を認識して文字にする、手書きを認識してテキストにする、テストの問題文を読んで解く、車を運転する、作曲する、プログラムを作る
など、とはいえこれらは全て専門家が実験的といったレベルから、実用段階まですでに存在しますが、簡単に作ろうとするのは難しいでしょう。
しかし人間にはできると思います。皆が100%できる訳ではありませんが。
    • good
    • 0
この回答へのお礼

たしかにその例えでしたら、VBAでやるより人間がやった方がよさそうですね。

お礼日時:2012/10/03 19:54

通りすがりです。



>VBAではできないけど、手作業なら出来る事はあるのでしょうか?

ご質問が大雑把で、回答に当惑してしまいました。こちらの解釈が違うかもしれませんが、人間の判断の要する作業は、あくまでも、人間がすべきものであって、それは、この回答からは除外したほうがよいでしょうね。

入門編の頃には、あまり聞かないほうがよいかもしれませんが、いくつか挙げさせていただきます。

以下は、あくまでも、VBA内ということに限定させていただきます。そこから、キーボードマクロに逃がすとか、TypeLibrary やCOMを使うという半常識的な解決策は除外します。

ここからが、本題:

VBAというものは、アプリケーションのひとつの機能ではあっても、直接、アプリケーションを制御しているのではなく、そこに、インターフェイスがあって、製作者のミスなのか、アプリケーションの機能とVBAの間に結ばれていないものが存在するということです。

最初に、これは仕方がないことですが、[待機モード]上でVBAを働かすことです。
[待機モード]というのは、ワークシートで、[F2] を押した状態です。
ちょっと見かけた質問に、数式入力に、SendKey を使うというのがありましたが、初歩的なことですが、VBAでは、数式の入力の加工は動きません。入力待ちをしている状態では、VBAはストップしてしまいます。

Excelでは、[待機モード]を外す方法があっても、あくまでも、ワークシート上からの数式入力は、Sendkeyでは不可能なはずです。[外部から用いるというのは、ここでは除外します]

もうひとつ、当たり前のようでできないのが、ワークシートの外にあるものの位置情報などの処理です。Application そのものは、Window制御が利きますし、ワークシートの大きさなども処理できますが、アプリケーション上部からワークシートに至るまでの、メニュー・パレットのメニューのオン・オフ以上の処理が、例えば位置などは取れません。言い換えれば、ツールバーなどの移動ができないはずです。

それに関連して、Excelの場合のポップアップツールの一部、例えば、色塗りのパターンのグリッドの選択の制御が利きません。主なものは、Office XP時代に用意された代わりのものがあります。もちろん、VBAでは、作業そのものは、コマンドの中に、同じように代用できるのですが、あくまでも、ポップアップツールの制御が利かない、ということです。ここらも手作業になります。(たぶん、意味が分りにくいと思います。Office 2007以降は、もう少し違ってきますから、知らなくてもよいです。)


たぶん、Excel2003以降に登場してきたツールは、直接サポートされていないものがあるようです。また、Excel等で、2007以降になると、「リボン」そのものが、VBAサポート範囲外になりました。間違っているという人がいるかもしれませんが、Application.ExecuteExcel4Macro を使うということは、VBAからの別の言語の呼び出しです、あしからず。

今度は、オブジェクトですが、ずいぶん前から、グラフの一部の制御ができないということがありました。アクティブ・グラフの最初の系列の x 誤差範囲を選択するための操作が、いわゆるアプリについているVBAではできないはずです。この範疇には、他にもあるようです。

他、昔からある技術的な問題で、私が見たことがないものに、プリンタ・ドライバの制御の問題があります。別の設定されたファイルを作って、そこからVBAで、選択して動かす、という方法でしか解決案がありません。印刷周りには、いろいろ思うに任せない部分が出てきます。ネットワーク・プリンタなどの切り替えは可能ですが、その中身の設定は制御が利きません。

他にも、多少あるのですが、思い当たるところを羅列してみました。これらは、あくまでも、VBAの範疇ということで、他言語での回避策はあります。VBAは、ワークシートの関連のオブジェクトが、複合的になっているので、ややこしいのです。もし純粋にVBAで言語を学びたいなら、ワークシートや他のオブジェクトの制御や処理は無視したほうがよいでしょう。

逆に、ここの掲示板では出てこないことで、出来るということが一杯あります。OOoのスプレッドシートでマクロを組んでみて、初めて気がついたことですが、大きな違いが分かります。それは、少し上記でも書きましたが、VBAは、Microsoft 系の豊富な外部ライブラリをふんだんに使えて、それを補えることです。VBAは、VBAではないのです。VB6のオブジェクトを備えているのですが、あまり知られていません。それに、JavaScript やVBScript に、Win32 APIや、.Net Framework の一部が使えます。また、今は、どこにも出てこない隠れオブジェクトがいくつかあります。その上に、COM化したり、TypeLibrary にしたりして、自分自身でオブジェクトを作る用意もありますし、VBA内部でも、Class オブジェクトとして、私製イベントなどが作れます。

VBAを上達したいのでしたら、あまり安易な質問・回答に終始しないほうがよいと思います。VBAの勉強は、最終的には、それぞれのオブジェクトという概念とプロパティを把握することだと思っています。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2012/10/27 14:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!