- ベストアンサー
VBAの勉強の仕方
私は今までは、学校の宿題や資格の勉強などは ノートにまとめ、覚える言葉は単語帳に書いて通勤時などに見ていました。 最近エクセル、アクセスVBAにはまってきたのですが ここで回答されている方はどういう風に学習していったのでしょうか? 特にノートなどはとらずに わからないことは調べ、解決し、更に新たなを発見し、またわからないことは調べ、、、 と頭と体と手で覚えていったのでしょうか? こういう勉強法は初めてなので教えてください! よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 ここ最近の掲示板の内容を含めてお答えさせていただきます。 VBAでは、VBEditorに入力して、その反応を覚えることだと思います。VBEditor 自身がエラーを教えてくれますから、デバッグ&コンパイルで、覚えていきます。また、ローカルウィンドウは、VBA独特です。テキストを見ながら、その応用をしながら、自分なりに500コードを入れれば、一通り覚えるといいます。(私は、年間200~300個が限度) 数行で、こんな風にすれば良いのかと思って書いたりしていたら、いつまで経っても脇の甘いコードしか書けません。行数はすくなくてよいのですが、Sub ~ End Sub まで書いて、必ず完結型にして、マクロとして成立しているかコンパイルして確認します。 VBAテキストを手に入れて、なるべく抜け落ちを作らないことです。Webサイトで覚えようとすると、必ず、抜け落ちを作りますのでお勧めしません。テキストの順序はどこからでもよいですが、ワークシートの操作に深入りしないほうがコツです。非常に良くないテキストもありますから、その良し悪しで習得できるか決まってきてしまいます。それでも、遅い人は、2年か3年も掛かります。VBAを一通り覚えて、やっとプログラミングのスタートラインに立ったとも言えます。VBAで、プログラミングの基本を覚えられます。 この世界でスタートラインに立てる人は、志して10人に1人だと思います。ほとんどの人は、そのスタートラインにさえ立てません。その先に進める人は、100人に1人の世界です。中にはたった3ヶ月程度で覚えられる人もいますが、そういう人は、特別な才能です。出来るなら、そういう人は、VBAには深入りしないほうがよいです。 表計算のマクロ(Macro)と呼ばれるものは、Excel 4.0 マクロ関数も、VB6 準拠のVBAも、昔も今もほとんど動きは変わりません。VBAを学ぶことは、VB6を学ぶことと本来は同じであってほしいものですが、そうではありません。特にExcel VBAは、ワークシートなどが複数あるので、基本路線からすると例外が多く、わき道も多いです。VBAは、雑多な環境(Office, VBA, Excel)の言語です。本来は、純正な言語のほうが、習得は早いはずです。 自己解決する気持ちが低い人=質問依存の人は、習得が遅いように思います。概して、コーディング途中のささいなことや例外の問題で質問する人は、説明をしてあげても理解しないし、コーディングで注意されたことを素直に直さない傾向があり、上達が望めません。 本気に覚えたいのでしたら、当分の間は、掲示板でよほどのことがない限りは、ROMに留めたほうが良いです。Q&A掲示板は玉石混交で、初級程度では、良いものと悪いものの区別が付かないので、他人のコードの甘さを気が付かないままに、良しとしてしまいます。良く目的を持って学習したほうが良いという人がいます。元ライブドアの堀江さんなどは、中学生の時に、数ヶ月でプログラミング言語を習得したと聞きます。凡人は、短距離型よりも長距離型で、遠くの先ではなく近い先だけをひとつずつみて、先に進むほうが良いです。一時、調子が悪くても、挽回すればよいです。密度の高い・低いではなく、ゴールが目的です。Web サイトには、そういうステップで覚えられるところがないし、書いている内容に癖が多いです。 ここのカテゴリは異種プログラマが介入しますから、「専門家」と称する素人のコードを見せられます。どんな人でも、Office という雑多な環境の中で、自分なりにルール作りして、それを扱っていくというのは、どんな人でも数年も掛かってしまいます。それは、純粋にプログラミングとは違うことです。 基本事項を、抜け落ちしたままにして続けることが、もっとも上達に災いします。まるで、整備不良の車のようでトラブルの元です。また、安易に人に教えることは、自己満足と増上慢に陥りやすいです。私は、MSDN以外の、他人のコードは、インターネット検索を含めてほとんど参考にしていませんが、雑なコードでも人のコードはチェックはしています。自分の知らない考え方を持っていないか、それとは違ったものはないか検討します。 なお、語学の勉強は、電車で単語帳を見て覚えることではなく、英文を読んだほうが良かったかもしれません。私は書いて覚えたのは中学生ぐらいだけです。いろんな単語の覚え方はあるけれども、英文と共に単語を覚えたほうがよいです。 それと、プログラミングは同じことですが、語学よりもプログラミングの世界のほうが楽です。プログラミングは、ほとんど定石パターンだけです。流れだけを覚えればよく、細かい単語自体を明確に覚える必要はありません。ただし、和英辞典などありえませんから、思い出せない単語を数分考えることもあります。なお、英語は、非常にプラスになります。マイクロソフト・サポートは機械翻訳が半分近くあるし、少し複雑な問題は英文を読まないとわからないことが多いです。掲示板は、概ね、日本語も英語も程度の差はありません。日本で有名な方で、海外の専門掲示板に答えている人もいるぐらいです。MS以外の英文は概ね分かりやすい英語です。MSは、凝った表現が多いです。 なお、ノートの代わりに、メモ帳としてテキストファイルにして検索できるようにしてあります。今は、もう1,000項目を越えます。
その他の回答 (4)
- gadd3
- ベストアンサー率46% (211/451)
書き忘れてしまいました。 >わからないことは調べ、解決し、更に新たなを発見し、 >またわからないことは調べ、、、 >と頭と体と手で覚えていったのでしょうか? 独学の場合、これしかありません。 僕もそうやって覚えてきました。 でも、独学は無駄な回り道や「誤解」をしますから、できれば よい先生についたほうが良いです。 無駄な回り道は、いい経験にもなりますが、 「誤解」はちょっと注意が必要かもしれません。 (いい誤解というか、習熟度に応じてその時点ではあえて詳しく覚えない、 というのはアリだとは思いますが) 僕は「オブジェクト」「イベント」「関数」「メソッド」が最初、ちゃんと 理解できなかったのですが、無理やり考えに考え抜いて、 「こういうことだ」と自分なりの回答を出しました。 でもそのあと、ヘルプがとても読みやすくなりました。 例えば「オブジェクト」なら「モノ」とか「操作対象物」とよく 本にかかれますが、僕は「機能を有するもの」「機能」「ユニット」 「何らかの機能を有したユニット」「目に見えるものでも見えないものでも 何らかの機能を有していれば"オブジェクト"」 と覚えました。 ヘルプを読むときは「機能」と訳しています。 「イベント」は「プログラムが実行できるよ、という合図」と 訳しています。 それが打ち上げ花火のようにいろんな場面で発生しつづけている。 というイメージ。 「メソッド」は、命令の一種だけど、オブジェクトに依存する。 例えば飛行機というオブジェクトなら「飛ぶ」「飛ばす」「走る」というメソッドがあるが、 自動車には「走る」というメソッドしかない。「飛べない」 というイメージ。 「Errオブジェクト」なら「エラー報告機能」「エラー時対処機能」みたいな感じ。 「関数」は命令をかきあつめた自動販売機。要するに「命令群」 「内部で、お金という引数をジュースという戻り値に変換して吐き出して返してくれる。」 みたいな感じ。 正直、邪道かもしれません。 でもこう考えたほうがヘルプの意味がわかりやすく感じたので こういうのもアリだと思っています。 ただ、しんどい。めんどい。 あーまたいいかげんな話を・・・ 忘れてください。 居なかったら、しょうがないので掲示板などを利用します。
お礼
再度ありがとうございます。 独学は本当に回り道が多いですが、 いろんな発見がありますね。
- gadd3
- ベストアンサー率46% (211/451)
>最近エクセル、アクセスVBAにはまってきたのですが 私は最初AccessVBAでExcelVBAはほとんどできませんでした。 やり始めたのは最近です。 基本的に学習は書籍です。 Webは書籍で分からない場合に利用していました。 Web情報は勉強しにくいので。 ちなみにAccessならバージョン97、2000のころの本がよいです。 DAO3.6のMicorsoft Jetデータベースエンジンプログラマーズガイド などもとても参考になります。 >特にノートなどはとらずに これは絶対にムリですね~。 僕、アホだから、すぐに忘れちゃうから。 テキストファイルに1ファイルTipsで覚書を書いています。 この覚書の量をふやすことがよいかもしれません。 こまめに覚え書きをとってます。 でも、よく考えてみると、テキストファイルにするのは あまり効率が良くない気がしてきたので 最近はAccessでシンプルな構造のDBを作ってそちらにTipsを格納してます。 あとで検索しやすいように、自分独自の検索タグを多少つけて。 Accessに情報を入れておくと、テキストファイル化←→Accessと 言う風に行き来しやすいので、とても便利です。 帳票フォームで作っとけば、帳票フィームビューもデータシートビューも 切り替えは1行コードで一瞬ですし。2つも3つもフォーム作る必要も無い。 単票フォームビューもちょっとコード書くだけで切り替えられますし。 そんなことせんと、テキストファイルにしておいて、 フリーの検索機能付きファイラーを使えばそれでいいのかもしれませんが・・・。 Googleデスクトップなどはインデックスを作成しないといけないのが めんどっちいとか、いちいちファイルを開けないといけないのでめんどくさい、とかであまり使っていません。 プラグインがあるのかもしれないけど。 AccessでTips保管すると、日付と時間などで管理すれば、 検索してヒットしたあとに、かなりいろんな並べ替えや 各種操作が自前でできるので、自由度が大きく、また、 Excelでやるよりインターフェイスを作るのが簡単+効率がいいので とりあえずそうしています…。 基本的に、どんなことでも (01)よい先生につく (02)良い本を紹介してもらう、探す。(特に基本的な「考え方」の本。) (03)ひたすら反復(特に基本) (04)人(か自分)の役にたって喜びや達成感を得る がやはり上達の近道かな?と思います。 VBAの場合は、「ヘルプ」の意味がわからないとなかなか上達しないと 思いますので、まずは、「ヘルプ」が読めるように、頑張るとよいと思います。 ただ、「ヘルプ」の意味を知るには、一筋縄ではいかないと思うので とにかくプログラムを作りまくるしかないかなあ、という感じです。 でも、「ヘルプ」がちゃんと読めるようになると、そこからまた 飛躍的に腕が上がると思います。 結果的にはどんな解説本を買うよりも、ある程度詳しく書かれていて 便利です。 (わけのわからんTipsがヒットするのだけはたまらんですが) Accessやっておられるなら、まずは 簡単なSQLとDAO、ADOなど覚えて、 Excelもなら、MicosoftQuery とピボット、それを操作するVBAを 覚えると便利に使えると思います。 MicosoftQueryを使うと、Excelシートをテーブルに見立てて、 ミニRDBが組めます。 どっちかというと、Accessのほうが、イベントプロシージャなどが 書きやすいので、Access中心につかって、COMオートメーションや APIなどを利用して、Excelピボットを連携させる、みたいな、 使い方がよいのではないかと思います。 AccessもExcelも、程度や操作の違いこそあれ、ほどんど似たことができるので RDB、SQL、の理屈(ベン図のような理屈)を勉強して、両方を使えるようにすると 最も効率がよいと思います。 AccessはRDB、Excelは表計算、という区別をするととてもチャンスロス等々を 生むので、「AccessもExcelもRDB。兄弟。適材適所で使え分ける。」という考え方で、 VBAも同時に覚えていくといいと思います。 特にCOMとAPIでの連携技はがんばって覚えてください。 Accessから直接Excelのイベントプロシージャを動かしたりができます。 じゃないと、Accessで5分で作り終る機能追加をExcelで何日もかけたり、 Excelで 5分で作り終る機能追加をAccessで何日もかけたりというバカな ムダをする羽目になります。 ちなみに、僕は零細企業向けの小規模な販売系のプログラムしか作ったことがないのですが もし他人に教えるなら、VBAからは教えないです。 「販促」と「MicroSoftQuery、ピボット、マトリックス表とリスト表の違い、集計と分析の違い、」のかねあい。 どんな販促をしたいなら、どんな列を設けるべきか? 「セブンイレブンとシステム、POS等について」などを説明して(大した説明はできませんが)、 それから、AccessVBA、ExcelVBAと教えていくと思います。 というのも、VBAを書けることが偉いわけじゃないからです。 プログラム書けても、売上が上がらなかったり 人件費が減らせなかったら意味無いからです。 また、VBAや関数なんか書かなくても、いろいろと集計等ができる機能が ExcelやAccessにはいっぱいあります。 書かんでいいものを書く必要は無いです。ムダです。 プログラムは最終的に 「利益金額を上げることができる」か 「コストダウンができる」か、 「お客様(人様)を喜ばせるなど、集客その他に貢献する」ことできなければ、 いくらいいプログラム作ってもゴミにしかならないからです。 (あくまでも、零細用の販売系のシステムは、ですが) 人様の役にたたなければ、プログラムはほんと、ゴミですので そういう目でも見てみてください。 そうすると、勉強法もまた自分で何か考えつくかもしれません。 例えば、「分析」するには、こういう「集計」が要る。 ならこういうシステム構造が要るから、あれもこれも勉強しないかん、 みないになてきて、何を勉強すべきか、見えてくるのでは ないでようか? Officeソフトの場合、VBAも大事ですが、それよりも 機能のコーディネイト。適材適所。こちらのほうが重要です。 機能がちゃんとコーディネイトできていれば VBAがさらにパワーアップします。 ピボットのVBA操縦はこちらのサイトが詳しいです。 一読をおすすめします。 http://pvttbl.blog23.fc2.com/blog-entry-1.html かなり脱線&支離滅裂してしまいました(^^) お許しを。 私かなりいいかげんですので、話半分で聞いといてください。
お礼
確かにヘルフ゜は最初はとっつきにくかったです。 「(04)人(か自分)の役にたって喜びや達成感を得る」 は大切ですね!! 大変参考になりました。ご回答ありがとうございます。
- n-jun
- ベストアンサー率33% (959/2873)
ExcelVBAですが、初めは参考書を観て例題どうりにやってました。 あとはこちらなどの質問を読んで、「どんな感じになるのかな?」と興味本位で コードを作ってみる。 最初の頃は上手くいかないので他の回答者のコードをコピペし、どのように動いているのか 検証を繰り返した。 参考となる物は検証したBookは保存したり、回答内容をテキストファイルでも保存した。 不明な点は過去ログ・ネット検索を繰り返してますが、まだまだ初級レベルです。 参考にしたサイトは”お気に入り”に登録です。
お礼
参考になりました。こうやって学んでいくのですね。 他の質問においてもn-junさんのご回答はひそかに参考にしています!笑 どうもありがとうございました。
自分なりに問題を作って、実際にやってみるのがいいと思います。 使いやすくしようと思うほど、理想的な使い方と現実的な作り方の違いがわかってくるのではないでしょうか。 最初は、簡単なものから作り始めて、徐々に難しいものに挑戦した方がいいでしょう。
お礼
やはりノートをとるとかではなく、手で作って覚えていくのですね。 ありがとうございます。
お礼
おお! 極めているのですね!! ノートではなく、電子化しているのですね! 参考になりました。ありがとうございます。