10秒目をつむったら…

勉強始めて数年、いわゆる文法的な内容は覚えエクセルVBAエキスパートならベーシックOK、スタンダードもおそらく大丈夫??程度になったと思ってます。しかし、ちょっと複雑なマクロを組もうとすると、うーーんと考えます。とりあえず時間さえあれば組める状態(笑)。もちろんその手段がここで質問するというのもあります。

うーーんと考えずに出来る範囲を広げるためには、この先何を勉強すべきでしょうか?文法ではない筈です。アルゴリズムですか?科学技術的な数値解析をする分けではありません。エクセルで数字をこねくり回すだけです。手作業で出来る面倒事を正確にマクロに記述するだけです。アルゴリズムの知識が必要とは思えません。

質問
ひたすら作りまくり経験値を上げるしかないのか?
何か参考書があれば読みたいですが、何かあるのでしょうか?

A 回答 (4件)

#2です。

まだ、開けててくださっているのですね。

返事、ありがとうござます。この2年ぐらい、私は、健康を害しまして、いろいろ急いでいる向きがあり、いつまで、ここで書けるのかなっていう思いが、つたない文章で思わぬ誤解を与える時がありました。

>エクセル以外のオフィスでは、パワーポイントは考えましたが、記録マクロを使えないバージョンなので諦めました。次はおそらくVBSだと思います。

パワーポイント(PPT)のVBAは、新しい段階に入っているような気がします。他のOfficeに波及しなければよいのですが。PPTは、オブジェクトさえ分かれば、そんなに問題なく書けます。

https://msdn.microsoft.com/ja-jp/library/ee81473 …

PPTは、実際、プレゼンの時に、マクロというか、少し手の込んだことをすると、余程の場数を踏まない限りは、土壇場では失敗する向きが多いような気がします。私がインストラクター試験を受けた時、その場の緊張感が何か違う空気にさせるようで、凝ったことをしようとした人は、だいたい失敗する人ことが多い気がしました。それで、私は、安全策を取りました。

ところで、質問でエクセルVBAエキスパートのことに触れていましたので、以前は、「プロフェッショナル」という上位クラスがありましたが、そこで、
http://store.aoten.jp/shopdetail/002000000002/or …

ここに書かれている題目をベースに、私の学んだものをまじえてみました。何かの時に、思い出していただければ幸いです。この中の技術でも、流行り廃れがありますから、5年先にはどうなっているか分かりませんが、残るものもあるはずです。
-------------------------------
コーディング規約、エラートラップの数々、プライベート・パブリック・グローバルの変数やステートメントの違い、Excel 4.0 マクロ、クラスとインスタンス、カプセル化、私製イベント(WithEvents)とInternetExplorer 、Win32API、COMアドイン、DDEやOLEとオートメーション
-------------------------------
外部オブジェクトのMSHTML, WinHTTP や、SHDocVW(IE)、データベース系の DAOとADO。 それから、VBS 系列のFSO(FileSystemObject), Shell32、VBScript.Exp(正規表現、できれば、BASP21のいくつか),Scripting.Dictionary と .Net FrameworkのSystem.Collections.ArrayList の比較 また、VB.Net
WMI (Microsoft Windows Management Instrumentation)
---------------------------------
VB6.0 SP5/6 Runtimeのコントロール(河西朝雄さんの本が詳しい)
----------------------------------
コンピュータの技術の基礎知識。2進と16進そして論理式と論理演算、文字の種類(JIS,Unicode)、流れ図、TCP/IP、PCのハード系の知識。
----------------------------------
また、ツールのSpy(MiniSpy)、OLEViewer、DependencyWalker、Process Explorer、Custum UI Editor など、MiniSpy(Vector)を除いて、マイクロソフトからフリーで手には入ります。

マクロを書く時のツール、インデンターのVbePlus(渡辺ひかるさん作)、テンプレートのVBA MZ-Tools 3.0、Win32APIを書くためのApiViewer は私は重宝しています。
---------------------------------
この他に、ここの教えて!gooで印象深かった人、いうなれば私に影響を与えた人。

教えて!gooの一番華やかな時代で、かつての常連で達人のK氏。K氏が他の追従を許さないワザは、VBAからのJavaScript、Win32APIやExcelのHackの知識など、驚かされることが多かったです。しかし、やがてVBAらしからぬコードを書き始めて、その後、ここを離れてしまいました。

教えて!gooにホンのちょっとしかいなかった、YU-Tangさんは、知っている人は知っている、VBAによるWebスクレイピングの先駆者。(その後、あちこちのサイトで、Webスクレイピングお断りが出るようになりました。)

私自身、Webスクレイピングは、サイトには負担は掛けていないはずですが、現在の「教えて!goo」と「OkWave(昨日バグを見つけてやり直し)」は、ひとカテゴリに1回(1~2page)だけですので、リストを撮っています。

YU-Tangさんのサイト
http://www.f3.dion.ne.jp/~element/msaccess/index …

私は、どちらかというと、棺桶に片足突っ込んでも、まだExcelをいじっているようなものです。どのみち、後10数年もすれば、Excelは、まったく別なものに変わっているでしょうけれども、私が思うことは、世界で初めての(PCにおいて)表計算VisiCalcは、Lotus123、Quattro、Multiplan、Excel と、形を変えも同じコンセプトで出来ていますから、次世代の表計算も、その遺伝子は続いていくものだと思います。

#3さんの業務中心か、プログラマーの道かという選択肢に、私自身は、もともと、会社の時も、会社を辞めた後の仕事でも、Excelはほとんど使いませんでしたし、別にプログラマーということもなかったのですが、知りたいという気持ちが、いろいろと学ぶ結果になったのです。

Excelではないのですが、プロの方(プログラマとして独立している人)、何人からか、心得というものを教わりました。

 ・お客のHDDの環境を変えようとするな。変えたら、元に戻せ。
 ・形(スタイル)やテクニックにこだわるな。
 ・プライドなど捨てて、人のコードは利用せよ。

ということでした。思ってもみない助言でした。

正直なところ、私は、Excelをスタートするには、出遅れてしまいました。Excel 2000を前後にして、短い期間に多くの情報が流れていたのですが、気がついた時には、もう遅かったです。もちろん、それを入手するためには、知識だけでなく、お金が必要だったのは言うまでもありません。MSDNサブスクリプションの会員はおろか、CA認証局のデジタル署名でさえ、私にはどうにもならなかった現実が立ちはだかりました。できれば、VBAなどそこそこにして、他の言語をしていればよかったかな、と思うこともあります。

私個人は、マクロ・VBAの類は、ネット以外の場では、まったくというほど教えませんし、教える気がありません。まあ、私から教わろうという人もいませんが、もう、昔のようなコードが書けなくなっていることも事実です。

仮に教える場があっても、人のコードは、エラーなく通れば、それで良いことにします。あれこれ完璧なことを目指し、余計なことを言っても、人は受け入れないものなのです。出来る人は、何も言わなくても、私の技術なんかは、数ヶ月で追い越してしまいます。出来ない人は、ある一定の所までくると、その先には進みません。

VBAでは、いわゆる上級文法といって、動的配列や値渡し・参照渡しなどの項目までは、プログラミングとしては初級に入り、それを習得しないとプログラミング言語としてはいえないわけです。それさえも、終えた人が少ないような気がします。

私の会社勤め時代は、専ら MS-DOSの時代です。ExcelもWindowsも、最初に触ったのは、会社をやめてからですし、ハロワの技術訓練校で、最初にマクロを勉強した時は、自宅にWindowsマシンもExcelもありませんから、家では、紙の上に、プログラムを書いて、訓練校のExcelに書き込んでみて、動くかどうかを試したぐらいです。
    • good
    • 0
この回答へのお礼

再度ありがとうございます。
パワーポイントでマクロを考えたのは、画像ファイルを多数貼り付ける必要があったためです。ファイル選択、貼り付け、トリミング、サイズ合わせ、位置合わせ、スライド1枚当たり10ファイル、かなり面倒です。今は別な仕事のため不要になりましたが。

プロフェッショナルのテキストは衝動買いしました(笑)カプセル化等の説明をVBAでしてくれるテキストが欲しかったというのもありますし、説明頂いたVB6.0以降は言葉すら知らず、多少なりとも勉強しておこうかと思います。ただ「公式」テキストは総じて正確だけどそっけないというか親切さに欠けるキライがあるので、少々心配です。gooの全盛期に活躍した人については、Q&Aの履歴は残ってる筈ですよね。少々興味あります。

動的配列はマクロを作るようになってすぐに望むようになりました。扱うデータ数が3桁も4桁も変わるから、静的配列だと大きい方に合わせて宣言する必要があって「なんでこんなの事前に宣言する必要あるんだ?」と思ってました。動的配列になった今でも「ReDimなんかせんでも代入した時点でRedim Preserve扱いにしてくれ」と思ってます。

お礼日時:2015/06/20 19:24

私も思う所ですが、二つの道があると思います。


1、通常の仕事行いながらVBAを使って業務改善を行う
2、プログラマー、システムエンジニアの道を進む
です。
後者であれば、アクセスやVBなど更に勉強と経験を積まれることをお勧めします。
前者であれば、ご自身の仕事、会社でシステムの繋がりを覚えることが優先です。
社内でエクセルを教える事が多々ありますが、ステップとして
1、エクセルをワープロとして使うな。
  データは一枚のシートにきちんと残すようして、
  必要なデータの抽出、印刷のフォーマットの作成などに手引きします。
2、諸先輩に作品を参考にしてみる。
3、本当に使いやすいシステムは何なのかを考える。
  意外とこの段階でおかしくなっているケースあります。
4、エクセルの持っている機能も活用して、関数なども使う。
  VBA識者だけに陥ってしまう傾向があります。
5、エクセルの強みがグラフとか分析ですので、最終的には統計などの
  知識を勉強してもらいます。
  一日の仕事がクリアできたらOKでなく、そのデータを活用できるかが
  新しい仕事の始まり。

こんなところでしょうか。
VBAのコードですが、私はパターンが決まっていてテクニックと云ってもそう多くは使いません。
(所詮、事務処理ですので画像とか見栄えなどはあまり気にしません)
生徒(自分で思っているだけですが)のコードを修正すると、A4用紙いっぱいになるコードが数行になるケースもあります。

覚えて置くと得するテクニック
1、OutLookをエクセルから操作して、FAX、印刷などをxpsファイルで自動送信する。報告を自動送信する。
2、自社のシステムへの取り込み形式のデータを作成する。
  前工程からデータをもらい取り込む、後工程へデータをあげる。
3、入力作業時の入力規則、エラー処理の自動化、ユーザーフォームの作成
4、バーコードリーダーなどIO機器の導入など
5、アドバンスフィルター、ピボットテーブル、表示形式、条件付き書式の活用
6、エクセルのVBAで、イベント(OpenとかChange等)を活用する。

特にXPSプリンターはWin7から始まって、PDFの代わりになると云う事だけで結構、重宝される方多いですね。
    • good
    • 0
この回答へのお礼

ありがとうございます。
私は典型的な前者です。VBAに偏らず関数も多用するというのは、出来てなかったかも知れません。ちょっとやってみます。

お礼日時:2015/06/16 21:18

こんにちは。



正直なところ、私は、人に教えようというような立場ではないのですが、少し書いてみたいと思いました。一時期は、新しい言語を覚えようとしていた私ですが、もう、あっちこっちの肉体的な故障で、仕事はおろか、本を読む集中力もない状態の日々を過ごしています。これを書くにも、休み休みです。いつまた、書けなくなってしまうか分かりません。

今、思い返すと、私は、半分は掲示板で覚えたなって思うのです。参考にした有名な人でしたら、NewsGroup のChip Peason(チップ・ピアソンさん-Excel の教祖的存在)とか、モーグの井川はるきさん とかがいますね。また、ここの、教えて!gooの掲示板でも覚えました。今とは、ちょっと違う雰囲気でしたね。

>ちょっと複雑なマクロを組もうとすると、うーーんと考えます。
そういう私は、あまり考えません。スーパーに買い物に行き帰りとかに、思いつきます。ただ、失敗だらけですが。

たぶん、興味のない話でしょうけれども、少し説明をしておきます。

>アルゴリズムの知識が必要とは思えません。
私もそう思いますが、ただ、掲示板でみなさんが言うVBAの「アルゴリズム」というものは、私の知っている「アルゴリズム」とは違う認識で語られているようです。それは、どうやら私の言うところでは、構文のようなもののようです。

『プログラム上でのアルゴリズムとは、「問題を解決するためにおこなう手続きを定式化した形で表現したもの。」』

掲示板で出てくるのは、「バブル・ソート」と「クイック・ソート」の2つぐらいです。なんでもかんでも、アルゴリズムにしてしまったら、話がややこしくなると思うのです。そういえば、組合せ(Combination)のアルゴリズムなどもあります。

私は、河西朝雄さんの『はじめてのアルゴリズム入門(VB6)』(技術評論社)で勉強したことがありますが、どれをとっても、自力では思いつかないようなテクニックです。また、アルゴリズムは、「一般性」「拡張性」「移植性」を持ったプログラムで、将棋や囲碁でいう、定石のようなものです。それを紐解いて、学ぶべき点はいくつもありますが、ご指摘のように、アルゴリズムの知識がなくても、特に、Excel VBAでは、何ら困ることがないということです。多くは、すでに、Excel の中に、組み込まれているからなのです。(その書籍は、もう古本で二束三文ですが、VB6がないままでは、ちょっと分かりにくいです。VBAに移植することは可能ですが。)

次に、「科学技術的な数値解析」というのは、たぶん、ご存知ない世界のはずです。他に、「エクセルの統計分析」というものもありますが、まったく違う世界です。書籍では『Excelで操る! ここまでできる科学技術計算』(丸善)というのがありますが、『理系のためのVisual Basic 6.0実践入門』(技評社)は、とてもおもしろかったです。「数字をこねくり回すだけです。」かどうかは別して、「VBごときに、そんな計算が出来るのか」という世界なのです。基本的には、VBの最上位のデータ型は、Double型ですが、精度が甘いので、科学技術計算には不向きです。こうしたものは、理系のかなり狭い世界の話で、あまり表に出てこないし、一般性もありません。私自身は大好きなのですが、この分野が好きでなければ出来るものではありません。

ここに出てきた書籍は、お勧めするものではありませんし、私が勉強した書籍は、ほとんど絶版になってしまっています。私は、新しい書籍はもう購入していないので、今は、どれがよいとか言えません。何か、新しいものを探して、それに向かってみるのは良いかもしれません。

>この先何を勉強すべきでしょうか?
これ自体は、ご自分で得意なものを進めていくしかありませんが、
あくまでも、こちらとしては、ひとつのきっかけとしてのアドバイスですが、

「拡張性」を考えて、
・Access, Word, Outlook のマクロに手を出していく。
・Jet を使って、データベースを構築する。
・VBA(VBS)とJavaScript の両面を押さえていく。
・VBAから、VB.Net について広げていく。

などが思いつきます。。
    • good
    • 0
この回答へのお礼

いつもありがとうございます。
一時期とてつもない回答量でいつ寝てるんだ?と思いつつ拝見してました。最近落ち着いてるように見えましたが、体調不良だったのですね。お大事に。
アルゴリズムは他回答者も指摘されてるので、少しやってみます。
エクセル以外のオフィスでは、パワーポイントは考えましたが、記録マクロを使えないバージョンなので諦めました。次はおそらくVBSだと思います。

お礼日時:2015/06/16 06:52

○ アルゴリズムとデータ構造


覚えなくてもいいですが、どんなものがあるか触れておくといいでしょう。
別に「科学技術的な数値解析」だけがアルゴリズムではありません。
「手作業で出来る面倒事」とは何かを具体的に表現したものも「アルゴリズム」です。
「A5セルの内容を分割してB7とB9に書きこむ」なんていうのも「アルゴリズム」です。

本等を読めば、一つの目的のために、複数の方法があることがわかります。
どちらが正解、ということはありません。大抵は、何かとのトレードオフになっています。
 例えば、大量にメモリを必要とするけど高速な方法と、遅いけど最小のメモリで済む方法。

いろんなアルゴリズムに触れれば「手作業で出来る面倒事」をいろんな側面から分析するヒントになるだろうし、
完全に同じではなくても、少し変えれば応用できそうなアルゴリズムがあるかもしれません。



○構造化プログラミング
もし、「構造化プログラミング」という言葉自体を聞いたことがない、という状態なら、一度ちゃんと学習した方がよいでしょう。
現在のプログラミングの基礎とも言える考えです。

どんなに複雑に見える問題でも、分解していけば「極単純なこと」の組合せでしかありません。
「うーーんと考え」てしまうのは、問題を分析して「簡単なものの組合せ」にするがうまくないからではないでしょうか。
    • good
    • 1
この回答へのお礼

ありがとうございます。
アルゴリズムも必要との事なので、もう少し勉強してみます。見たことがあるのは、最大値を求めるもの、連立方程式の掃き出し法位です。
構造化プログラミングと聞いて思い付くのは、サブルーチンです。現状ではまあまあ使えてるか?程度です。その延長で考えると、個人用マクロブックは使いこなせてません。コピペで対応してます。

お礼日時:2015/06/15 17:42

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