アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして。現在、仕事でよくエクセルの関数を使っています。最近VBAに触れる機会がありました。
現在、ほとんどのことをエクセル関数を使ってしているので、今いちVBAのメリットがわかりません。でも、VBAの方が関数より難しいので、VBAを覚えた人はやっぱり、ほとんどVBAで処理した方がよいと感じるのでしょうか?

みなさんはどのような時に関数で、どのような時にVBAを使われていますか?

A 回答 (8件)

関数でできる内容なら関数を使う方が良い、しかし式が長くなり過ぎる場合などはVBAを使うと分かり易いので、式のメンテナンスが必要になった際に助かります。


関数式だけでは出来ない事をざっと書きます(VBAを使えばできます)。
・書式を変える(文字色、セル色、文字高など)
・メールを送信
・サーバアクセス
・画像の貼付け、拡大、縮小
・計算式の変更
・外部ファィルの読み書き
・タイマー割込み
・エクセルのシャットダウン
・メッセージボックスの表示
・メッセージボックスでの処理分岐
・入力フォームボックスなどの表示
・ボタンをクリして処理を選択
・IEの制御

・・・・・まだまだありそうです
    • good
    • 0

こんにちは^^私もまだ初心者なのですが、個人的には、


A1~A10まで足すだけの単純に出来る処理でならば数式の方が便利だと思います
ですが、セルの内容を処理によって変更する場合などにはVBAでも良いかなっと考えております。
例えば、while文やfor文を使いセルを1づつカウントUPして
if文で処理の対象をピックアップしセルの内容を変更出来るといったところに魅力を感じます


・A1には数値が入っているので何もしない
・A2は空なので、ある数値を入れさらに色を変える処理を行う
・A3には数値が入っているので何もしない
・・・
などをこちら側で組める点などが魅力的かなっと思っています。

また、複雑な処理をさせると、コードの記述が多くなる為
シートに関数機能別に処理を作成する事が出来るので、間違えを見つけやすい部分も魅力の一つだと思います
    • good
    • 0

はじめまして taka011 さん


もっと詳細な意見が欲しいのでしょうか?それならばVBAのメリットを述べていきます。

VBAをつかう場合マクロを実行する必要があります。
それはある種の手間です。エクセル関数ならばそのばそのつど反映されるため便利です。多少のデータならオートフィルすればよいですしね。

ではVBAのメリットは何でしょうか?
基本的にVBA側からセルへ関数を埋め込める以上VBAがエクセル関数より不便なことはありません。
またエクセル関数の処理をVBAで扱う方法もあります(全てのエクセル関数ではない)。
この時点で関数より不便はない事を感じて頂けるでしょう。
ですがエクセル関数の処理を代替するためにこのVBAがあるわけではありません。
あと述べるべきはエクセル関数はデータの増減によわく大量のデータのために手動でオートフィルしなければならないなども手間です。
またいくつかのセルが個別で動き複雑に入り組んだエクセル関数はなかのコードをそれぞれみなければならずVBAのソースコードよりはるかに見づらくメンテナンスしずらいです。

さてでは今回の御題であるVBAのメリットを考えましょう
たとえば集計用のCSVデータがありそれには関数など埋め込まれているはずもなく各行の合計を算出したいなぁと思った場合ひとつ関数をはりオートフィルする事でしょう。
…。面倒くさくありませんか?例えばボタンを押したら勝手にCSVファイルを取得し勝手に関数をはりオートフィルしてくれたら幸せですね。
そう、それを実現できます。ですがこれくらいならそもそも重い作業ではありません。それほど幸せになれないでしょう。

じゃぁもっと盛大に条件を増やしましょう
日毎と週毎と月毎作業があり特定の場所にいくつかのフォルダがあり日付ごとに可変し、作成され集計されるデータもCSVやエクセルデータいくつかの拡張子のファイルがあり、特定のファイル(シェルなど)を作成しFTPでサーバにアップロードしテラタームなどでサーバのファイルを実行し実行結果をFTPで取得実行結果を新たにデータに追記しさらにそのつどデータをあらなたシートを作成し集計する。また完成したデータはまた別のいくつかの業務のためにそれぞれ業務のフォルダへコピーし各業務のようのデータを追記させるような現場があったとします。

…いやですねこんな職場…。私はもちろんこんな場所にいませんが
いまの処理を全て一括で実行可能なのがVBAです。
つまりエクセル関数なんてVBAの比較対象ではないのです
じゃぁ今のを条件をどうやって解決してくんだよ?!
ファイルコピーや削除等はまぁデフォルトでもあるのですが
filesystemobjectなどわたしなら使います。これだけワイルドカードを使ったフォルダの移動・コピー・削除・ドライブチェックなどできます。

聞き逃してないのなら気づいたと思います。デフォルトである機能ではありません。特定の機能をオブジェクトとしてVBAは取り込めるのです。
今述べたFSOやregexp(正規表現を扱える)、WScript.Shell、Shell.Application、winAPI、.netなど機能を拡張できるのです。
WScript.Shellのrunからならばほかのアプリケーションの操作も可能です。同期・非同期処理も自在に行え、ファイルの入出力ができるためbatやVBSやJS、ほかにシェルやTTLを作成などもできます。
FTPなどもバッチを生成したりVBSからFTP.exeにアクセスしても良いくrun処理で同期処理をしながら実行したりローカルからアップロードしたシェルなどをttlを使いサーバ上で実行も可能です。
集計する場合などはさらにそれをローカルにFTPダウンロードしたりもできます。
ファイルの中身の整合性確認なども全て自動化できることでしょう。

決まっている作業ならばコピーや移動エクセルの編集、外部ファイルや他のアプリケーションの実行含め全て自動化可能です。
残念ながらエクセル関数にはこのような機能はありません。もしかしたらあるのかも知れませんが少なからず私は知りません私の知識が足りないのかもしれません(きっと後者でしょう)。

また「VBAを使う意味」というよりは自動化する意味もこのメリットの中に含まれるのでしょうが自動化することで手間がなくなります。
これは作業の負荷軽減・作業スピード向上・手作業による作業ミスからの開放などが挙げられます。

どうでしょうか?これまでの回答者の方々より、より深く、また熱くVBAのメリットを私的にまとめて見ましたがメリットが掴めたでしょうか?
難しくてよくわからないと仰るならば、上記を端的にまとめると。

「VBAには幅広い拡張性とほぼ全ての事務的作業をオートメーション化できる」

と言う事です。
    • good
    • 4

VBAをエクセル関数の延長として使うことはあまりメリットがなく、ワークシート処理を活かすならば条件付書式やリスト等を駆使して、出来る限りエクセル関数を使った方がいいと思います。

VBAでワークシートファンクションと同じ事をさせても遅くなりますし、時間の無駄です。

逆にプログラミング言語としてVBAを見た場合、手頃に利用でき、入出力インターフェースが簡単に実装できるため、使い勝手がよいです。仕様上マルチスレッドや高速・大容量処理などには向いていませんが、参照設定等を駆使すれば立派なソフトウェアが作れます。

マクロを記録して、出てきたメソッドをつぎはぎにしたようなVBAは大体酷い事になり、それが評判を落としているのかもしれません。きちんとしたプログラミング作法にのっとらずに書き散らしたコードは他の人はもちろん、少し時間が経ったら自分でもメンテ出来ませんから。

ちなみに私はエクセルで授業ノートをとって、理系の授業ならば都度VBAでプログラムを作って検証したりしていました。VBAを先に覚えてしまうとエクセル関数を使うのが億劫になってエクセルユーザーではマイノリティになってしまいますから注意が必要です;
    • good
    • 0

1.作業の自動化


ほとんどがこれになる。
例 繰返し作業 ネットから日々の株価データを過去10年分225銘柄分取得する。手動でやったら大変。
2.ワークシート関数またはその組み合わせではできない処理、またはメニューやボタンでできない処理
例 グラフウィザードではできない組み合わせグラフの作成。
3.イベント処理
例 1つのハイパーリンクで2ヶ所に飛ぶ。
4.その他
例 他のソフトとの連携 セルのデータをgoogleに渡して検索する。

など。
    • good
    • 1

私が Excel VBA を使うケースで一番多いのは、他のシステムから出力したデータを Excel で作業しやすいように加工するケースかな。


ひと続きになっちゃってる項目を条件によって分離する。
その条件てのがひと続きになってるデータの中に埋め込まれてるから、プログラムによる判断で処理するしかない。

あとは Excel と全然関係なく、VBScript を書くときのエディタ代わりとか。。。
    • good
    • 1

> VBAを覚えた人はやっぱり、ほとんどVBAで処理した方がよいと感じるのでしょうか?


できれば、「VBAは最後の手段」というスタンスをお勧めします。
ワークシート上の数式や関数での解法を探求しもせず、安易にVBAに走るクセが付きます。
しかも、汎用的なVBAでなく極めてキメ打ち的なコードを書きがちです。
私なら、極力ユーザー定義関数として書き、ワークシート関数的に使えるようにします。
    • good
    • 1

>VBAを覚えた人はやっぱり、ほとんどVBAで処理した方がよいと感じるのでしょうか?



両方の使い分けが必要なので、そのような事はありません。
無駄なコードを書けば関数よりもVBAの方が処理が遅くなるので、何でもVBAで対応すれば良いという物ではありませんし・・・。

関数では対応できない事をVBAで処理します。
関数でやった方がよい部分はシートに関数を記入します。

またVBAのコード内でワークシート関数を使えるので、VBAでは複雑な処理でも簡単に処理する事が出来ます。
    • good
    • 0

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