こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBAを習得する良い方法はないでしょうか。

VBAを習得する良い方法はないでしょうか。

仕事でよく、Excelを使います。
その際、普段使う機能では対応できず、解決方法をネットで調べることがよくあります。

関数を使った解法を見つけた場合には、「なるほど!」と腑に落ち、それ以降も繰り返し利用することができる場合が多いです。
一方、VBAマクロの解法しかないケースでは、自分は本当に無力です。
せいぜい、マクロをコピペして使うくらいしかできません。

VBAを習得する効果的な方法はないでしょうか?

以前、一念発起して個人指導を受けたこともあるのですが、その場では分かったつもりになっても、自分で反復強化する術が掴めず、挫折してしまいました。

今まで、「取り付く島がない」分野を習得する際には、検定試験などをペースメーカーにしていました。
主に語学やビジネス系ですが、Excelについても、MOSを取ってからはストレスなく使えるようになりました。

VBAは語学に似ていると思うのですが、語学(メジャー言語)の場合、基本的な文法・表現を反復練習するツールが市販されており、さらに検定試験の対策をしているうちに要点が自然に身につくような仕組みが既に出来上がっています。
VBAにはそういったものがなく、ひどく敷居が高いように感じています。

投稿日時 - 2010-06-12 07:24:16

QNo.5962501

困ってます

質問者が選んだベストアンサー

知識ゼロからのスタートでしたが、超簡単な入門書を一読したあと、
業務上で必要なものを、いくつも自分で書きながら覚えました。

自分で動作確認しながら覚えたので理解が早まった気がします。
ここを変えると、こう変わるのか、とか、同じ文でも引数を変えたらどうなるのか、などと、いろいろオモチャ感覚でいじって確認したりしてました。

また、こういう作業をしたいのに書き方が分からない、と言う場合は、いったん自動記録を行ってコードを見てみるとか。
そこからその文の意味を解読していきながら効率化していくなどをやりました。


それと新しい方法を覚える都度、
あとあと振り返ることができるように、自分でサンプルコード(サンプルステートメント)集として、書き溜めてあります。
つい忘れがちなので。

これはその都度、書き溜めておくことがポイントです。あとからまとめてなんて絶対出来ませんし。
でも、自分専用の、とても見やすいマニュアルになります。

投稿日時 - 2010-06-12 10:51:11

お礼

soixante様、皆様、ご回答ありがとうございました。
お返事が遅くなりまして申し訳ありません。

他の方からも有意義なヒントを沢山いただきましたが、
・自動記録の検証
・サンプルコード集の作成
から始めるのが現実的かな・・・と思いsoixante様のご回答を
ベストアンサーにさせていただきました。

仕事をしている時はどうしても時間に追われていますので、
・関数を利用する
・関数で出来ない時は、人力でやっつける
ということをしがちです。

手でやっていることを自動記録してみて、ざっとでいいから眺めて意味を把握する、
サンプルコード集に書き留めるということから始めようと思います。

投稿日時 - 2010-06-21 16:04:01

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(9)

ANo.9

>VBAは語学に似ていると思うのですが、語学(メジャー言語)の場合、基本的な文法・表現を反復練習するツールが市販されており、さらに検定試験の対策をしているうちに要点が自然に身につくような仕組みが既に出来上がっています。

いずれにしても、大事なことは、何かのレールに乗って学習することではなくて、自分自身で、能動的(Active)に自分の書いたプログラムが上手くいったという成功感で、楽しみを感じることではないでしょうか?何か新しいものを覚えることに喜びを感じることが大事だということです。そうすれば、自然に覚えます。それに尽きるような気がします。

投稿日時 - 2010-06-16 09:09:18

ANo.8

(1)VBAを勉強する前に、エクセルのこと・機能を十分知る必要が在ります。
この点あまり言われていない。実際は知らないでVBAどうのこうのといっている場合が多い。
それは本コーナーの質問振りから判る。
便利な機能はメソッドになっていて、処理の内部のことは隠して簡単な単語記述にしてある。
手作業で操作をする場合どういう操作になるかを思い出せないと、マクロの記録が採れるものも取れない。
自分でエクセルのオブジェクトにどんなものがあるのか、
その新規・追加、設定、変更、抹消・取り消しなどはどうするのか解説書の見出しのようなものを日本語で書いて、右にVBAコードを調べて書き込む。判らないものは当面空白にして、徐々に埋まるようにする。
選択肢も疑問の都度増える・ふやすわけです。
シートーセル、ブック、ツールバーなど
そのほかにファイル・フォルダを扱うすべを提供するFSOも必須。
(2)出来るだけ操作でやる場合の手順を噛み砕いて(もちろん日本語で)箇条書き的に細かくメモできるようになること。
これが出来れば、狭い範囲のここはどうすれば良いですか、という質問になるはずだが、このコーナーの質問も最終目的だけ書いた丸投げ質問がほとんどだ。
(3)他言語のプログラム経験者なら、VBAの習得が早い面がある。それはなぜ・何か、表現しにくいのだが、データを処理していく手順のコツのようなものがあってこれの経験者だからだろう。だから早いのだろうと思う。フローチャートが描ける、頭に浮かぶからではないかな。
初学者はこの点が良く組み立てられないので、新しい問題に立ち往生する。
これは経験と経験者と共に学べる環境があると良い。
習得には時間が必要で、熟練者がそばにいると習得時間が短縮される。
でも若い方を中心にVBAの利用者は増えているようだ。10年前にはこのコーナーにも質問は少なかったが
いまは結構増えている。解説書やWEB情報もあふれている。
ただし私の経験ではプログラムに興味を持つ人というのはやはり特殊で少数で、やろうという気になっているだけ目標に近づいていると思う。

投稿日時 - 2010-06-12 22:55:48

ANo.7

水をさすようですが
VBAに意欲がおありなら アクセスをやられてはと思います。
ここでのVBは非常に有用ですし、ある意味でアクセス自体もエクセルより単純です。

エクセルVBAの学習はマクロ記録で作成したものを手直しする事が出来ればよいでしょう

その理由は エクセルには関数が充実しています。
エクセルのVBAはセルの取り扱いが絡み複雑です。
それ以上を実現できたとしても趣味ならともかく仕事では同僚、後輩に引き継ぐことは
難しく自己満足に終わってしまいます。

マクロ記録では作業の流れを自動化するくらいでよいでしょう
1.項目が多いとき入力専用画面の作成…式の項目を非表示にする
2.印刷時に項目が多いとき表示項目、非表示項目を設定しソートも加えて
目的にあった報告に仕上げる
例えば 個人情報のワークシートを住所一覧表、電話番号簿に分ける
3.上記操作マクロをコマンドボタンに貼り付ける

マクロ記録手直しとは
マクロは手作業で操作したことを逐一記録されるので余分なものまで記録されます。
よくあるのがスクロール、これは計算には関係ありません 手作業が長ければ失敗もあります。
マクロの記述で 左端に ’(シングルコーテーション) のある行は備考行で処理に関係ない
これらを除去して単純なものにします。

短いマクロにしてこれをつなげる
前述の住所録を例に挙げます
氏名を読み順に並び替える「フリガナ分類」マクロと
並び替えを元に戻して全項目を再表示する「復元」マクロを用意して
住所録マクロにつなげるには

Sub 住所録印刷()
復元
フリガナ分類
Range("B:B,E:G").Select
Range("E1").Activate
Selection.EntireColumn.Hidden = True
Range("A1").Select
ActiveCell.FormulaR1C1 = "住所一覧表"
Range("B1").Select
ActiveWindow.SelectedSheets.PrintPreview
End Sub

投稿日時 - 2010-06-12 11:20:47

ANo.5

http://www.asahi-net.or.jp/~zn3y-ngi/
http://www.voicechatjapan.com/excelvba/VBArei2.htm
http://www.asahi-net.or.jp/~ef2o-inue/menu/menu01.html
VBAについていろいろまとめてくれているサイトあります。
VBAを始めようとしている人のためになる説明もあります。
「VBAエクスパート」っていう試験もあります。

>一方、VBAマクロの解法しかないケースでは、自分は本当に無力です。
関数のデメリット部分ですね。
=関数A(関数B(関数C))などあったとしたら
少し状況が変われば使えなくなる、途中の編集経過が見えないのが関数です。
初心者がよく陥るところです。

>せいぜい、マクロをコピペして使うくらいしかできません。
最初はそんなものです。

おそらくやりたいことに相当するコマンドは見えてきます。
コピペするってことは繰り返しでしょうから、繰り返しのロジックに変えていく。
定数(セル位置等)があれば変数、引数にして汎用化を目指してください。

ただ、
自動記録のマクロをコード化して習得するのも、
結局は出来上がったものを眺めることになるので、
「最初から考えて作る」っていう技術がなかなか進歩しません。


よく使う操作はオリジナルを作っていくのもいいでしょう。
どのエクセルでも使えるアドイン的なものにする。
ソーステキストをインポートしさえすれば使える。

「YY/MM/DD」形式を「YYYY年MM月DD日(月曜)」で返す関数、

すべてのシートを80%表示、A1にカーソル位置づけ、シート1番目A1にカーソルをおくマクロ、
とか。

たぶん
エクセル操作のほとんどはVBAソースでも記述できると思いますから
関数使うくらいだったらVBAでやってみるかというくせをつけて
いろいろプログラムすると良いのでは?。

こんなのVBAでできるのか?となれば、逆引き参考書のが良いでしょう。


ネットでは情報はたくさんありますが、「知識豊富=習得」ではないと思います。
最終的には、やっぱり考えてプログラム多く作るというか
(コマンド少ししか知らなくても)ロジック作れる技術向上ってとこでしょう。

なにか宿題欲しい場合は出します。

VBとVBAとコーディングが似ているところありますから、
「語学を」という位置づけならこっちの学習も合わせてみると良いです。

投稿日時 - 2010-06-12 10:19:47

ANo.4

私は下記の方法で覚えました。

1)簡単なサンプルプログラムをたくさんコピーペーストして動作確認する。
 たとえば下記。

http://www.officepro.jp/excelvba/if/index1.html

2)ソースコードに慣れないうちは、フローチャートを書いて反復理解する。
 たとえば下記。

http://www.tokiwa.ac.jp/~shio/el/flowchart/flowchart.htm

3)本を読む。(お勧めです。)
⇒翔泳社 アンク著 ISBN:4-88135-845-6


 例えば「オブジェクト」「プロパティ」「メソッド」などの
細かな概念の説明からはじめると、いつまでたっても
本丸にたどり着けず、いらいらしたり、疲れていやになってしまいます。

 体当たり方式でも闇雲だと参ってしまうので
まず機械を動かして、人間の手も動かして、
細かなことはやりながら覚える「OJT方式」に落とし込むことが
肝要だと思います。
がんばってください。

投稿日時 - 2010-06-12 08:28:44

ANo.3

Excel VBA ベーシック
http://vbae.odyssey-com.co.jp/vbae/ex_b.html
Excel VBAスタンダード
http://vbae.odyssey-com.co.jp/vbae/ex_s.html
はどうなんでしょうね。↑勉強したこと無いので、紹介だけですが。

投稿日時 - 2010-06-12 08:24:58

ANo.2

>一方、VBAマクロの解法しかないケースでは、自分は本当に無力です。
>せいぜい、マクロをコピペして使うくらいしかできません。
コピペで終わらずコードを理解するようにすればどうでしょうか。
VBEのコードウインドウで、調べたい単語にカーソルを置き、F1キーを押してみてください。
該当のヘルプにジャンプ表示出来ます。
ヘルプの表現はは難解な面もありますが、結構充実していると思います。是非利用をお勧めします。

デバッグも覚えた方が良いです。
デバッグについて
http://members.jcom.home.ne.jp/rex-uchida/vba110.htm


「マクロの自動記録」も利用する価値があります。
どのように書けば良いのかサンプルコードが得られます。
記録されたコードには無駄がありますし汎用性がありません。
再編集し、汎用性のあるマクロに仕立て上げることで理解が進むと思います。


あと実践することだと思いますが、自分範疇ではなかなかテーマが見つけられないかもしれません。
ここのような掲示板の投稿を勉強の題材にすればよいと思います。

投稿日時 - 2010-06-12 08:18:10

ANo.1

私はヘルプを酷使して覚えました。

投稿日時 - 2010-06-12 07:48:56

あなたにオススメの質問