10秒目をつむったら…

エクセルVBAを仕事で使っていますが、知識が上達しません。

プログラミングを学校などで学んだことはなく、独学でマクロの記録から無駄なコードを除去や修正して利用できる程度です。

参考書などを購入して勉強しているつもりですが、少し複雑なコーディングになると訳が分からなくなります。

VBAをマスターしたいのですが、熟知されておられる方々はどういう方法で学び、習得できたのでしょうか?

よろしくお願いします。

A 回答 (10件)

ま~よくある質問ですね。


私も含めて昔人間の方は、失敗を繰り返しながら現場仕事で経験を積めと云うとことでしょうね。
何度も失敗作、駄作を作って、運用して、見直して作り直す。また新しく作る。
です。

でも、これでは非効率でもあります。
先輩諸氏がいれば教えてもらう、先に作成されたファイルがあれば参考にする。
自分が作成したファイルも後人のためにもコメントアウトを追加したいり
別途、システムファイルを管理する文書を残すなどします。

もう一つ、少しVBAが出来る様になって時点で苦しむパターンが
1、パソコンを使って行う仕事について考えてみる。
仕事を分類すれば
  1、データ入力系
  2、データ抽出系。出力系
  3、データ集計、分析、グラフ
に分けられますが、それぞれの仕事で使用するVBAやテクニックは同じパターンになるはずです。
2、パソコン、ファイルやエクセルのシートの構成などについて考えてみる。
  Excelデータベースを作成する際のNGパターン
  https://rakuzanet.jp/excel-database.html
  こういったことを行っていないか検証してみて下さい。
3、仕事について知る。目の前の問題を解決するためのVBAを作るより
  前工程、後工程を考慮したシステムを作る。
4、職場での位置
  システム開発のチームなのか
  通常業務の改善にシステムを作るメンバーなのか
  将来的にプログラマーになりたければ、VBAだけでは無理ですので
  ほかの言語も勉強した方が良いでしょう。

私も色々とVBA化してしまいますが、依頼されてから仕事の内容を把握したら
ほぼすぐに出来てしまいます。
実は、PCの中に過去のVBA集を業務ごとにファイルにして保存してあって
その仕事の流れで運用を考えて、コピペで作成するからです。
自分なりの虎の子を作成すると将来絶対に役に立ちます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

ただ便利ツールを作るだけでなく、仕事の工程を考えることで最適な構築が出来ていくのだと思います。SEの仕事をしている人なら基本ですからね。

データベースの作り方で参照URLを教えて頂きましたが、関数を組んでいると見やすさ重視であまり考えずに並べたデータベースでは、関数が対応していなかったりしますので、念頭にはおいています。

これまでの経験の中で、作りたいツールを作るにはVBAが欠かせないと行き着きましたね。

自分だけの備忘録を作っていくと使わないものが多いのですが、実は頭の中に入っているということも多いので、VBAの例文など作ったものを記録しながら財産にしていきたいと思います。

お礼日時:2016/06/14 08:36

>問題を解決する壁にぶつかっているので、なんとか乗り越えるのが苦悩ですが楽しいですね。



何でもトライして、それを乗り越えられるのだと信じることができるのは、若さと体力と、よきアドバイザーがあっての上だと思います。しかし、オーバーキャパは常に考えて、白旗を上げる時は早めにね。できなくて評価を下げることはないにしても、それを引っ張ると、期待させた分だけ、かなりまずい立場になりかねないからです。私から言えるのは、少なくとも自分の分からないことには、仕事では請けないことでしょうね。

ところで、その話と、以下のスレは、関係あるのかもしれません。

「EXCEL2010VBAでシートに抽出データをアウトプットしたい」
http://oshiete.goo.ne.jp/qa/9285622.html

「EXCEL2010VBAで重複しない名前リストを横並びに抽出」
http://oshiete.goo.ne.jp/qa/9285585.html

この二つは、ご質問者さんが書かれたものですよね。これは、そのままになってしまいました。一応、ファイル自体も別な場所にアップしていたのですが、もう既にデータも消えてしまいました。

そのままになってしまうと、回答者側には、どうしようもないことです。

ここらは、難しい内容ではないのですが、簡単に言うと、使おうとしているオブジェクト(Dictionary)のパラメータ(引数)に、どのデータを当てはめるか、というだけのことです。私は、これをパターン化といっています。どこの本にも載っていないような内容だと思います。

ここら辺の問題は、もう言ってもしょうがないことですが。
    • good
    • 0
この回答へのお礼

たびたびアドバイスありがとうございます。

> オーバーキャパは常に考えて、白旗を上げる時は早めにね。できなくて評価を下げることはないにしても、それを引っ張ると、期待させた分だけ、かなりまずい立場になりかねないからです。私から言えるのは、少なくとも自分の分からないことには、仕事では請けないことでしょうね。

仕事を受ける以上は納期を守る必要があるのでおっしゃる通りですね。

それからご参照いただいたスレッドもその内容の一部です。せっかくご回答頂いたのにまだきちんと検証出来ておらずに返信できずに申し訳ないです!

ですがWindFaller様に作成して頂いたマクロツールはちゃんとダウンロード出来て、動作確認できております。これをうまく私のツールに展開できないので、中途半端にお返事してはいけないと思って放置状態になっています。

やっぱりある程度のプログラミング知識がなければ難しいですね。丁寧な方々に回答頂いてありがたいです。

お礼日時:2016/06/08 15:03

エクセルのVBAをマスターしたいなら、エクセル関数はある程度マスターしておきましょう。

VBAと関数の組み合わせはかなり協力です。

私も独学です。
ある程度出来るようになったら、他の人に絡んでいきましょう。そこで、エクセルの問題を解決するとか、エクセルで業務の効率化をするんです。
実績がつめます。その流れでいろんな依頼が来ます。それを、全て受けます。どうにか、問題を解決します。

気づいたらエクセルマスターですよ。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

> エクセルのVBAをマスターしたいなら、エクセル関数はある程度マスターしておきましょう。VBAと関数の組み合わせはかなり協力です。

エクセル関数に関してはずっと実務でフォームを作ってきましたし、ある程度難易度の高いツールも作るようになりました。

そこで更なる効率化を求めるとどうしてもマクロを使わざるに得なくなりましたね。

> 実績がつめます。その流れでいろんな依頼が来ます。それを、全て受けます。どうにか、問題を解決します。

ホリエモンも同じようなことを本で書いていたので、まさにやったことない仕事を受けたことで、今回の悩みに到達したわけです。

問題を解決する壁にぶつかっているので、なんとか乗り越えるのが苦悩ですが楽しいですね。

お礼日時:2016/06/02 08:47

#6の回答者です。


ちょっと間違えたことを書きました。

ひとつのプロジェクトは、全部100行以下です
   ↓
ひとつのプロシージャは、全部100行以下です

>「こんな覚え方をしたから早かった」というのをあまり聞かないのも、人それぞれ頭に入りやすい習得方法が違うからでしょう

ひとそれぞれですからね。そして、人の実力も様々です。ライセンスなんてあったとしても、無意味です。BASICの時代から、センスがない人はダメだと言われます。他力は他力でも構わないと思うのですが、自分の中で解決すべきものというのはいくつかあるものなのですね。それを、そのままにしている人も多いような気がします。

よく言われるのは、以下の本がよいと言われます。アマゾンのVBAのランキングでは、1位~3位独占だそうです。

大村あつしさんの『かんたんプログラミング Excel 2010 VBA Excel VBA』
http://amazon.jp/dp/4774148695
3部作です。これを民間のプログラミング教室で学ぼうとすると、20~30万円は取られます。

私は、基本事項の抜け落ちは作らないということだと思います。
私は、学ぶ時は、「無用の用で、必要かどうか、実利的に考えない」ということだと思います。

だから、掲示板のような単発的なものは、いくらやっても上達はしないと思います。ただ、掲示板の良い所は、自分の思い上がりを、時々現れる、自分の実力より上の人間に、こっぴどく負け犬にさせられるのも、勉強のひとつかなって思います。その実力の差の根本に、アルゴリズムの理解でしょうね。コンピュータ言語には関係がないこともあるのですが、VBAのプログラミングには、90%役にはたたない知識です。今は、VBAで、浮動小数点型誤差の存在すら知らない人も増えてきていますが、「そんなものは関係ない」「処理してもコードがわかりづらくなる」だけで、「没」になってしまうのです。
いつのまにか、美観やわかりやすさだけが、優先するようになってしまいました。
    • good
    • 0
この回答へのお礼

再びありがとうございます。

本のご紹介ありがとうございます。

基礎からステップアップし、参考書でしっかり勉強できる人にとってはとてもいい教材になりますね。

プログラミング教室での付加価値を考えても、手を出しにくい値段設定なので独学で勉強しやすい参考書は重要だと思います。

> 私は、学ぶ時は、「無用の用で、必要かどうか、実利的に考えない」ということだと思います。

この学び方にもいろいろありますよね。必要な部分のみ切り取って数をこなす方法とカリキュラム的に積み上げていく方法。

ネットで無料で情報が簡単に拾える現状では、オフィスで書類を新人に作らせても、効率よく使うべき機能を知らずに体裁も整ってない書類が出来上がってくることが多いと感じる裏側には、必要な情報しか知らないアプローチで勉強したからだろうな、とも思います。

私の作るデータでは関数の組み方なども無駄がなく、「どこでそんな技覚えたの?」と聞かれますが、昔テキストを1からやったことが基盤になっているのですが、仕事に絶対必要かと言われれば使わない知識・スキルとなる部分の方が圧倒的に多いのも事実です。

それこそ個人のスタンスでじっくり覚えるか端的にクリアしていくかの好みが出るのだと思いました。VBAに関しても基礎の部分だけじっくり覚え、そこから汎用的に必要なコードを書いていく方が自分には合っているのかなと思うようになりましたね。

大変参考になるご意見ありがとうございます。

お礼日時:2016/05/30 09:02

こんにちは。



私は、マスターなんて全然していませんし、私なんかは、人に教えられるものなんて何もありません。あまり参考にはならないかもしれません。知らないことを知っているということだけです。

私は、3年掛かっても、まともには書けないし、その後、少し書けるようになったかなって思っていたら、その内、知らないことばかりが増えてきて、もうギブアップ状態で、後は、坂道を降りるばかりです。

趣味は趣味だから、救われているとは思っています。

>どういう方法で学び、習得できたのでしょうか?

私は、習得はしていませんが、C言語のハーバート・シルトさんだったか、とりあえず、自分で考えながら、500コードをこなしてみなさい、と言っていたと思います。500コードと言えば、毎日、二つでも、1年近く掛かってしまいます。量をとにかくこなす「量質転化」が、上達の早道だと思っています。

ただ、基本項目の文法は全部抜け落ちなく行うことだと思います。時々、1次元配列を飛ばして、2次元や多次元配列を扱う人がいますが、1次元配列で用意されている関数とか、まったく知らないままにやっている人もいました。面倒だからといって、すぐに、エラートラップをつけるとか、そういうのは問題解決にはならないと思うのです。

時々、プログラミングは初めてというのに、すぐにできるようになる人がいましたが、一人は、当時は、大学の講師、今は大学の教授になっていると思います。語学が堪能だからでした。本当の語学の覚え方って、一字一句覚えようとしたり、単語を覚えたりするのではなくて、短いフレーズ、パターンで覚えていく方法だといいますから、そういうコツを心得ているのでしょうね。

時々、アルゴリズムとかいっている人がいましたが、「クイック・バブルソート」を除けば、VBAで名だたるアルゴリズムなんて使う人は、めったにいないような気がします。某氏の、たぶん「二分探索法」とかいうのは、どこの掲示板で唯一、お一人です。

本について、なんとも言えないのですが、VBAそのものの情報って、だいたいは知られています。ですが、そうでないものもいくつかあります。ここで書いている方などは、簡単だと思うかもしれませんが、私が良く知らないものというと、

・WMI(Microsoft Windows Management Instrumentation)
・Win32 API
・UserForm用の見慣れないコントロール、TreeView, ImageList等,
・Basp21 のツール群(やっと、Bregexpで、Perl風の正規表現を始めました)

・COM アドインの作り方。(VB6はやったことはあります)
それに、最近では、.
・Net Frameworks のツールとか、
・上記も含まれますが、VBA 内のオートメージョンオブジェクト
・ Office Riboon Editor 必須だと思うのに、使い方はよく分かりません。
・自家製のイベントの作り方も、知られていません。

欲を言えば、OLAP Cube は、覚えたかったけれども、個人では、そういう環境を再現するのが大変なような気がします。

私は、旧VB(=VB6)の本が良いと思うのですが、今は手に入りにくいと思います。VBAというのは中身は、VB6と、ほぼ違いありません。

それと、私は、インストラクターの養成講座では、フローチャートは描かされました(題は、うるう年の出し方)が、自分自身では、フローチャートは描いたことがありません。

だから、私はVBAが出来ない、と言われても仕方がありません。VBAで、それほど込み入ったことはしたことがありません。パーツのプログラムの寄せ集めにすぎません。毎日使うファイルのプロジェクトの全コード行数を計算したら、2,000行は越えていましたが、ひとつのプロジェクトは、全部100行以下です。そんな大したものではありません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

やっぱり趣味で覚えるのと仕事の為に実践でやらざるを得ない場合とでは違うようですね。コーディングも量質転化。「習うより慣れろ」なのですね。

メソッド的には語学の覚え方と似たところがあると思います。

「こんな覚え方をしたから早かった」というのをあまり聞かないのも、人それぞれ頭に入りやすい習得方法が違うからでしょうし、いろんな方々の成功例を自分でなぞってみて、数をこなすのが近道かもしれませんね。

たくさんの具体例、ありがとうございます。参考になります。

お礼日時:2016/05/27 11:32

要求されている内容をフローチャートで正確に書ける様にする。


論理構造が曖昧なまま、プログラムは書けません。

具体的な処理をvbaで格好良く書かなくても,if then elseと分岐、代入が判れば大抵の処理は書けます。

格好良く書くと、複数の処理を1個のvba命令で書く様になり、その時は理解しているのですが、後で見た時に、処理構造が解らなくなります。

プロ集団は基本命令だけでプログラムを作ります。
作った人が数年後にメンテする保証はないから、誰が見てもメンテ出来るようにして置く訳です。

中には難しい命令を使う必要も出てきますが、ウェブ検索して調べれば済みます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

> 具体的な処理をvbaで格好良く書かなくても,if then elseと分岐、代入が判れば大抵の処理は書けます。

このような基本があるのですね!エクセルの関数も似た考え方ですし、通ずる考えが出来るケースも多いので、『if then elseと分岐、代入』だけでもしっかり基礎として身に着けてみたいと思います。

すると難しい命令の必要性や使い方も理解できるかもしれませんね。

お礼日時:2016/05/27 10:25

熟知しているわけでもエンジニアでもありませんが、


仕事でたまにVBAを触る程度なので参考程度に見ていただければと。

>VBAをマスターしたいのですが、熟知されておられる方々はどういう方法で学び、習得できたのでしょうか?
考え方や処理の流れ(フローチャートなど)を書けるように学んで行くのが手っ取り早いかと思います。
例としては、コーディングをする前や他の方の書いたソースを読む際、1からソースを書く際に、
手書きでも良いのでフローチャートなどの処理の流れを書いてみることです。

独学でプログラミングを学び、よくハマる例としては、
ソースを書くことばかりを気にして考え方や処理の流れを作る部分が疎かになる場合が多いです。

>少し複雑なコーディングになると訳が分からなくなります。
このあたりから、いきなり処理の全体を見ようとしたり、
ソースをまとめたりすることを考えているのではないでしょうか。

複雑な内容になればなるほど、処理の流れを理解していないと訳が分からなくなってしまいます。
そこで、一気に全体を見ようとするのではなく、フローチャートを書くことで、
細い処理を1つ1つ読み解いて処理の流れを掴むことが大事になってきます。
どういう処理の流れでこのような結果になるのか、をきちんと理解していくことで、
コーディングする際も他の人のソースを読む際も素早く理解できるようになります。

フローチャートをきちんと書けるようになれば、
後はその流れに従ってコーディングし正しく動くかを確認していけば良いだけになります。
この部分がちゃんとできているかどうかでコーディングのスピードも変わりますし、
こういう処理の流れにしたい、という時に参考書を引っ張ったりネットで調べて見たりするだけになり楽になります。
また、他の人に説明する際にも、こういう処理をしているのでこういう結果になります、というのをちゃんと説明できるようになります。

参考程度に。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

初めて知りましたが、プログラミングにもフローチャートという概念があるのですね!

確かに一つ一つの動きを図示して進めれば、どの動きについてが分からないのかポイントで伝えられる気がします。

頭の中ではなんとなく流れが分かっているので一度フローチャートに書き起こしてみたいと思います。

お礼日時:2016/05/25 15:07

独学でVBAをそこそこ覚えました。


私の場合は、マクロの記録などで、処理に不要なものを削除したりするところから始まって、
疑問にぶつかった折、技術評論社かどこかの本を1冊買って覚えていきました。

まるっと覚えてるわけじゃありませんので、web検索は欠かせません。
「excel vba ○○で〇〇する」みたいな検索で問題解決へ。

複雑だとわけが分からなくナルトのことですが、
[Tab]とかで段差つけて書くじゃないですか。
こういうのとかカッコの繋がりをわかりやすくしておけば、迷子にならなくてすみます。
コメントも利用しましょう。
『’〇〇の処理----------』『’〇〇の処理終了----------』
とかね。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。

覚え始めの マクロの記録~本を買う というのも同じです。せっかく高い本を買ったのにネットの情報程度しか載ってませんし、ちょっとがっかりでしたが。

初心者のうちはサンプルとしてコメントを入れながらコーディングしています。

Web検索で逆引きしながら検索していますが、少し変則的になるとうまく行かなくなるケースが多いです。これも経験を積めば分かってくるのかな、とも思います。

詳しい方は、学校などでカリキュラムを通じて学んでいるのかなと思っていましたね。

お礼日時:2016/05/25 14:09

私も独学です。

結局勉強して覚えようとするよりも、必要になった時に必要な事を調べる方が身につく気がします。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

料理なんかと同様に「必要に応じてレシピを身に着ける」という方が効率的かもしれませんね。

それを続けることで知識がリンクして大抵のことが理解できるのでしょうね。

お礼日時:2016/05/25 12:24

熟知、というほどではないにしろ、そこそこ使いこなす程度です。



大抵のことはネットに転がっています。
分からないことがあれば即検索。
そうして良い解説ページを見つけたり、例文を見つけて
コピペして使い、それを改変してみたりして実験したり
そうして試行錯誤して実践を重ねて学んできました。

本も一応買いましたが、正味あまり役に立っていません。
それよりも、分からないときに具体的に、ケースに応じて回答がある
ネットの方がより正確で複雑な情報が得られます。

一般的な業務であれば大抵の事は先人の前例があります。
なので、検索をうまく使うことと
検索した情報を使って自分で考え、試行錯誤を繰り返すことが
上達のコツ……かも知れません。

少なくとも私の勉強方法は今もこれです。

参考に。
結果的には、一か月ほどでExcel内だけであれば
大抵のことは可能になりました。
元々プログラミングの知識もなし、勉強もしていません。
今はデータベースと絡めた方面の知識を得たいと思っていますが
Excelとどう関係するのかすら分かりません。
それでも検索すると大量に情報が出てくるので、まだまだ先にいけるようです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

おっしゃる通り今やネットではやりたいケースの実例サンプルコードが載っていますし、一般的なことは検索で賄えますよね。

逆に言えばやりたいことがちょっと変則的なルールだと、自分自身で変化を加えなければやりたいことが出来ません。

マクロに限らずですが、プログラミングは答えへの正解が何通りもありますので、複合的なマクロになると選択肢がたくさん増えて混乱しています。

でもプログラミングの知識が無い方でも一か月程度で分かるようになったという事で、自分もあきらめずに地道に続けて試行錯誤してみます。

お礼日時:2016/05/25 12:22

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