質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.98%

VBAの勉強の仕方について

受付中

回答 5

投稿

  • 評価
  • クリップ 1
  • VIEW 1,360

garchomp

score 124

超初歩的な質問ですいません。

現在、VBAの勉強をし始めて6日目ですが、やっていく中で、どのように勉強していくのが最も最短ルートなのかを模索中です。

現在、Progra!の(全部)VBAを一周終わり、二週目をやっているところで、昨日から本「VBAの神様」を読み進めています。

ドットインストールのVBAで概要もある程度読み、根気強く基礎の習得に励んでいます。

この時、最短ルートは、今の勉強法を続行しても良いのか、もしくは、別の勉強法が良いのか、のどちらになるでしょうか?

また、VBAを応用もある程度使えるようになるために要する期間はどれぐらいになるでしょうか?

ちなみに、メソッド、プロパティの取得、設定をはじめとし、メソッドやプロパティを少し覚えられてきたところです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

+18

個人的な意見となります。

本やWebで体系立ったものを読んでも、実践時には少ししか役立ったことがありません。
作りたいものを作るためにそういうものを読んで調べたりという感じだと身につきやすかった様に思えます。
私にとっては実際にものを作ることが最短でした。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+3

VBAを習得したいんじゃなくて、
例えばExcelとかAccessなどのアプリの中で
処理の自動化を実現したいっていうことなんじゃないでしょうかね。

であれば、
はじめはマクロ記録をやって
実現させたいことをマクロ記録によってVBAコードにさせて、
それを改変して汎用化していったりするとか、
Excel VBA習得の時はよくやってましたよ。

目的を設定して、
実際に作る、
ハマったらネット検索して情報収集して軌道修正する、
の繰り返しでした。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

最短ルートは、今の勉強法を続行しても良いのか、もしくは、別の勉強法が良いのか、のどちらになるでしょうか?

可能なら、今の勉強法を続行しつつ、並行して応用的なことにも手を出していくと良いでしょう。

私は、技術とアイデアは鶏と卵の関係にあると考えています。
「できる」ということを知らなければ、やりたいという発想そのものが出てきませんし、かといって「やりたい」と思わなければ学ばないので、できるようになりません。

ですから、知識がまだ十分じゃなくても、とりあえず自分が作りたいものにチャレンジみるということも大事ですし、辛抱して基礎の学習もコツコツ続けるということも大事だと思います。

また、VBAを応用もある程度使えるようになるために要する期間はどれぐらいになるでしょうか?

日々どれだけ接するかによりますが、一般的に何かをマスターするには10000時間と言われてます。ただ、そこそこレベルで良いなら20時間くらいじゃないですかね。

ソースはこちらです。
「一人前になるには1万時間必要」は誤りだった! たった20時間で新たなスキルを身につけられる4つのコツ

もちろん、良い教材に当たればという前提付きですが、実感として20時間というのはそれほど的外れではないように思えます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

一応、ExcelでのVBAの学習だと仮定して、今読んでいらっしゃる本の次に、以下の2冊をお勧めします。
(ExcelVBA以外の、WordやAccessのVBAの学習にもとても役立ちます。)

(A)スラスラ読める Excel VBA ふりがなプログラミング
(ふりがなプログラミングシリーズ)
リブロワークス   (著) 

(B)いちばんやさしいExcelVBAの教本 
人気講師が教える実務に役立つマクロの始め方 
(「いちばんやさしい教本」シリーズ) 
伊藤潔人  (著) 

この本の一語一句でもわからないところがあって、実際にこの2冊のとおりにExcelでサンプルを作って・動かすことができないなら、この先、VBAをしっかりと理解できなくなる可能性が高いと思いますので、是非一度本屋さんで立ち読みでもしてみてください。(サンプルはもちろんダウンロードもできます。)

他の本を読みながらでもいいので、この2冊だけは、もしできることなら、ご購入をお勧めします。

理由は、以降に挙げた(01)~(20)に当てはまるように書かれていて、長い目で見ると、挫折しにくかったり、一度や二度・挫折しても再度読み直すと復活しやすい本だからです。

以降に挙げた(01)~(20)は、半分は、上記の2冊から学んだことです。
(私も初心者なので間違いがあるかもしれませんが。もしそうだったらスミマセン!)

僕自身、グラフも動かせないような初心者なのですが、ご紹介した2冊を読んだおかげで、ある地点から、自分で言うのもなんですが、飛躍的にExcelVBAを理解できるようになりました。
(ヘルプやオブジェクトブラウザを使えるようになり、人やWebに聞かなくても自力でエラーを解決できる件数が増えてきました。)

なお、以下のような流れを意識して書かれている「初心者本」は、ご紹介した2冊以外、どんなレジェンドさんの本を探しても、多分、無いのではないかと思っています。

2冊の本の不明点、と、以下の(01)~(20)の不明点を、一語一句、すべて、分かる人や先輩などに、わかるまで何回でも聞けば、恐らくですが、高い確率で上達すると思います。
他の初心者本なら、分からなかったらスルーしてもいいですが、この2冊は、スルーしないほうが良いと思います。一度や二度、挫折してもいいので、必ず「わかるまで」誰かに教えてもらってください。

頑張ってください!!

(01)プログラミングとは、どんな言語であっても、基本、『「変数」というものを動かすことで「自動化」を実現する 』、そういう作業。

(02)基本、「変数」に「生データ」を代入することで、「変数」を動かせるようになる。

(03)そして、VBAの場合、「変数」には大きくは 2つある。というか、2つしかない。それは、「一般的な変数」と「オブジェクト変数」の2つ。

(04)「一般的な変数」に代入する生データは「一般データ( リテラル値? )」。具体的には「数値、文字列、日付、True/False」などの「文字ベース」のデータ。

(05)「オブジェクト変数」に代入する、生データに相当するものは「オブジェクト式」(=オブジェクト)。

(09)ちなみに「オブジェクト」は「ユニット、ツール、ロボット」といった雰囲気の、何らかの動作・仕事をする「部品」めいたもの。基本、「複合機能体」。(後述の「プロパティ」と「階層構造上下自由往来機能」は、どのオブジェクトも必ず保持・内包しています。メソッドやイベントは持たないモノがあります。)

(10)「オブジェクト」には、画面上に「絵」として見えるもの・裏方で動く目に見えないもの・大きいもの・小さいものがある。ただ、どんなに小さくても、基本、「複合機能体」。そして、プロパティと階層構造上下自由往来機能を必ず保持・内包している。

(06)「一般的な変数」は主に、「VBA関数」と「演算子」、「ステートメント」などで動かすイメージ(大雑把には。)。

(07)「オブジェクト変数」は主に、「メソッド・プロパティ・イベント・階層構造上下自由往来機能」と「名前付き引数(列挙と定数)」、「ステートメント」などで動かすイメージ(大雑把には。)。

(08)「メソッド・プロパティ・イベント・階層構造上下自由往来機能」はすべて、「オブジェクト」の内側に「内包」されるもの。内包される「命令・機能」という感じのもの。

(09)したがって「オブジェクト変数」は、その中に代入した「オブジェクト」の 内側に内包している命令・機能たちを「引き出して」、ステートメントとともに動かすイメージ。

(10)逆に、「一般データ」を代入した「一般的な変数」は、その外側にある「VBA関数」や「演算子」を使って、同じく、ステートメントとともに動かすイメージ。

(11)ただし、一般データは「一般的な変数」に代入しないと動かすことが困難だけど、オブジェクトは「オブジェクト変数」に代入しなくても「オブジェクト式のまま」で動かせる。というか、「動かせてしまう」。逆に言うと、このことが原因で、初心者が上達できない。

・・・とまあ、こんな感じに理解しています。


重要な注意事項としては以下のような感じのようです。

(12)オブジェクトの「階層構造上下自由往来機能」「省略しないオブジェクト式の書き方」を理解できないと、またはいいかげんにしてしまうと、必ず挫折する。理由は、それがVBAの学習の「最重要な基礎・スタート地点」の1つとなるため。

(13)オブジェクトには、「階層構造の一覧図」があって、例えばExcelならバージョン20002003のヘルプに書いてあります。それと一緒に学習すると、「階層構造上下自由往来機能」「省略しないオブジェクト式の書き方」を理解しやすいです。すべてのオブジェクトやコレクションが網羅されているわけではありませんが、初心者にとっては大きな助けとなります。逆に、これが必要ない人は、VBAをちゃんと理解していないという証明になります。

(14)「オブジェクトのオブジェクト変数への代入の方法」を学ばないと、「思い通りのプログラム」を書くことは非常に難しい、ので、遅かれ早かれ、挫折します。

(15)「一般データ(値)やオブジェクトを返す自作関数」の作り方を学ばないと、「思い通りのプログラム」を書くことは非常に難しい、ので、遅かれ早かれ、挫折します。

(16)オブジェクトには、「単一のオブジェクト(通称オブジェクト)」と「コレクションオブジェクト(通称コレクション)」の大きく2種類があります。なお、コレクションは単一のオブジェクトを複数束ねるものですが、束ねているからといって、単一オブジェクトの「上位の階層」にコレクションオブジェクトが位置しているわけではなさそうです。「束ねつつ、コレクションも単一オブジェクトも、同じ階層に存在する」、と仮定して理解してしまったほうが、階層構造一覧図を見ながらオブジェクト式を書きやすくなります。
実際、あるオブジェクトとオブジェクトのあいだに、コレクションが「1階層」分を占有して存在することはありません。

(17)オブジェクトを「取得する(=1つだけ選択する)」には、「プロパティ」を使う方法、「メソッド」を使う方法、「コレクション」を直接使う方法、VBA関数やNewキーワードやAddメソッドなどで返してもらう方法、等々があります。ExcelやWordの場合は、ほとんどが「プロパティ」を使う方法で、Accessの場合や(Excel・WWordでも)ユーザーフォームを扱う場合は、多分ですが、「コレクション」を直接使う方法、が多いと思います。(自信なし)  どのオブジェクトに対して、どの方法で取得(=選択)するかは、ヘルプの各オブジェクトのページに書いてあります。※VBA関数・New・Addは、別のExcelファイルを動かす場合や、ExcelからWordなどを動かす場合などに使います。
※「プロパティ」を使う場合、その名前と同じ名前のコレクションオブジェクトが存在するので、また、それが「意味的にとても近いところ」にあるので、混同しないことが大切です。

(18)上位の階層のオブジェクトを調べるには、例えばExcelVBAの場合なら、「Parentプロパティ単一or複数重ね+TypeName関数」の合わせ技やオブジェクトブラウザ+F1ヘルプ、下位の階層のオブジェクトを調べるには「Stop+ローカルウィンドウの合わせ技」やオブジェクトブラウザ+F1ヘルプ、などが調べやすいと思います。

(19)変数の中身が、現在何型でどんな値が入っているかを調べるには、「Stop+ローカルウィンドウ」を必ず使います。特に、Variant型やObject型の変数を使っている時には、いつでも使えるようになっておくことが必須です。

(20)1つのプログラムの中で、「一般的な変数」を動かす処理と、「オブジェクト変数」を動かす処理は、多くの場合、混在します。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

手を動かしてコードを書いてみるのが良いと思います
そしてテラテイルなどで修正やアドバイスをもらうのを繰り返すのが最短のような気がします

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/11 20:04

    なぜそう思ったのか・・・
    何が大丈夫なのか・・・
    いずれにせよ、回答になってないくだらん書き込みはツイッターででも投稿していてくれ

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る