- 締切済み
マクロ機能の便利な使い方を教えてください。
wordやexelでマクロを使うと時ってどんなときですか? 先日、マクロ機能を使っている人を見て、なんだか便利な機能だなぁって思ったんですけれども、どんな時に使ったらよいのか・・・便利な使い方があったら教えてください。
- みんなの回答 (8)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >test(1)がtest(3)になっていますが、test(2)がないのは何か意味があるのですか?素朴な質問なのですが・・・ それは、良いところに気がつきましたね。 Sub Test1() MsgBox Range("A1").Value End Sub 上のマクロをコピーして貼り付け Sub Test2() '← Test1 を書き換え MsgBox Range("A1").Text '← Value から、Text に書き換えます。 End Sub そうすると、マクロが2つになります。実際の掲示板の質問の回答は、このようにして、元の質問者さんのマクロは置いておいて、コピー&ペーストしたもので、加工しています。 私自身は、なるべく、Sub Test1() のように、アルファベット文字を使うように心がけています。私の持っているOffice 2003 で、検索の際に、文字化けが出ますし、他のユーティリィティも、文字化けします。 >オブジェクトの塊は、どこからどこまでをいうのでしょうか?ここがわかっていません。 1年経っても、分からないです。私たちは、常に使っている、Value やCopy のプロパティやメソッドの[親]の存在ということでしか知らないものです。 厳密に、下部構造が上部構造を規定する、というような哲学の話ではありませんが、あまり、全体的なものは知らないことが多いのです。 子供から親を呼び出すスタイルという表現にぴったりの、ヘンなマクロがあります。 これを、Range("A1")は、どこのRange("A1") だろうか、というと、Sheet1 だったり、Sheet2 だったり、同じ、A1 でも、親が違っているということもあります。 Sub Test4() MsgBox Range("A1").Parent.Name End Sub Sub Test5() MsgBox Worksheets("Sheet1").Parent.Name End Sub 言い換えると、 Sub Test6() MsgBox ThisWorkbook.Worksheets("Sheet1").Range("A1").Value End Sub 'ThisWorkbook の親は、 というのを、省略して、Range("A1") と書いていることが分かります。 Sub Test7() MsgBox ThisWorkbook.Parent.Name End Sub さて、これでどのような名前が出てくるのか、想像付きますね。 Test6 のような書き表し方を、「コンテナ」といいます。 最初に書いた、Range("A1").Value から、.Value がなく使うことを、[暗黙的デフォルト値]と呼んだりしています。.Value を付けることを、「明示的に、プロパティを付ける」といいます。 [暗黙的]の反対が[明示的] と言います。良く出てくる言葉です。本来は、Inexplicit(イネクスプリシット) と Explicit(エクスプリシット)の英和訳から来ていますが、独特の表現です。英語が出来る人でも、さっぱり、この分野は分からない言葉が多いです。逆に、なれると、この分野の英語だけは読めるようになります。この世界は、英語圏の掲示板もパラレロで、そっくり同じような質問が出ています。 Sub Test1() MsgBox Range("A1") End Sub 後、あまり、本に載っていない話ですが、「モジュール」という言葉ですね。もちろん、VBAのコードを入れておく場所です。Excelが特殊だと私が書いたのですが、なぜかというと、Excelは、Sheets が複数あるし、それぞれに対して、シートモジュール(または、オブジェクトモジュール)というものがあるのですね。 シートモジュールというのが、ふだん使う「標準モジュール」と違うものがあります。シートモジュールに書くというのは、シートだけの範囲(範囲のことを、VBAでは、スコープといいます)に適用させる、と解釈して間違いないです。また、「標準モジュール」の実用の場と設計図を描く「クラスモジュール」とがあります。「クラスモジュール」は、VBAでは、あまり使われないことが多いです。それは、せいぜい、固有のイベント型のマクロにしか用いないからです。 そもそも、「モジュール」とは何か、ということになりますね。本来は、「交換可能な構成部分」という意味で、私は、別の分野の方から言われて、答えられなかったことがあります。一般的なVB/VBAの意味では、「関連のあるプロシージャ」をひとまとめに入れておく場所と書かれてあります。しかし、本来、そういうまとまりを作った「モジュール」ということが扱えるようになるのは、なかなか年月のいることです。ただ、VBAのコードを入れておく場所と思ってよいです。 独学ですと、ここら辺を教えてくれないのです。本来は、入門書では厳しい内容です。 なお、Sheet1 で、[Me](私という意味) という、キーワードを使うと、 Sub Test8() MsgBox Me.Name End Sub そのシート名の名前が出てくるということだから、[Me] は、まさに、Sheet1 の[オブジェクト名]だということが分かります。[Me]は、オブジェクトモジュール以外には使えないので、標準モジュールでは使えません。 実は、ここら辺が、本だけですと、さっぱり理解できないという項目です。こういう部分は、他の言語ですと、ほとんど出てきません。しかし、無理に覚えようとしなくても、やっているうちに覚えるものです。先日、MSDN(マイクロソフトの技術解説サイト)を調べたら、今までの、旧VBAの解説が、まったくなくなって、英語のみになってしまいました。私は、手元にその元の専門書「プログラマーズガイド」がありますが、多くの方は、かなり困るだろうなって思いました。Microsoft 側は、もう、新しいものに切り替えなさいということでしょうけれども、なかなか、次世代のOffice の言語のVB.Net やC# への転換も簡単にはいかないように思います。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >Range,???workbook??? >どんなときに使えばいいのでしょうか? >機能を使うとどのように処理されるのかイメージが全くつかめず(泣き) #6 で書いたように、これらの用語は、[名称]が先ではなくて、「モノ」が優先しているわけで、それを、Range と呼んだり、Workbook と呼んだりしているわけですね。哲学とは違って、「モノ」は、抽象的な概念ではないのです。具体的なモノなのですが、私たちは、なかなか、その外形さえ知ることが出来ません。大きな木があるとすると、その花や枝葉それぞの特徴で、その木を知ることは出来ても、全体像というのは、なかなか思い浮かべることが出来ません。その花や枝葉の特徴というのが、プロパティのことだと理解してもよいと思います。 例えば、A1 のセルに、12:30 と入れると、それは、時間表示されます。(なぜ、時間表示されるか、というところですが、そういう話は、非常に先のことになります) それを、VBEditer を、Alt + F11 で起動し、 挿入-標準モジュール クリックで、画面を開き Sub Test1() MsgBox Range("A1").Value End Sub と貼り付け、カーソルを、A1 に合わせて、その VBEditor 上で、F5 で、実行させます。 そうすると、メッセージボックスが立ち上がって、変な数字が出てくるはずです。 0.5208333333..... 次に、 MsgBox Range("A1").Text と、Value -> Text と書き換えてあげます。 12:30 と出てきます。 こうして、私たちは、ひとつの Range には、いろんな要素が含まれているものだと分かります。こういうひとつの塊を[オブジェクト]と呼びます。そして、.Value, .Text など、プロパティと呼び、それぞれ、違う入れ物があります。ちなみに、メソッドというのは、それに対して、動作を与えるために命令するものです。 Sub Test3() Range("A1").Copy Range("B1") End Sub この .Copy というのが、メソッドです。「メソッド」というのは、動作を与える意味です。 >VBAの必要なプログラミング知識はどんなこと何がありますか? それは、追々、覚えていけばよいです。入力のスタイル、変数、オブジェクト名、プロパティとメソッド、制御構文、これらは、すべてを覚える必要はなく、必要なときに必要なだけ覚えれば、それですみます。分からなければ、ヘルプを見たりします。 >効率的に作業ができる”技”がないかなぁ・ よほど、勘が鋭くないと、なかなか、そういうようには物事が進んでいかないと思います。 私は、入門時には何の大きな目的などは持たないほうがよいと思います。語学と同じで、難しい表現をしようとしても、入門時には出来ませんから、ひたすら、パターン・プラクティス(同じ構文を繰り返します)をしていきます。最初から、難しいことを言おうとすると、失敗してしまいます。 アプローチの仕方はいくつかあるとは思います。ただ、今まで見てきた人の中で、個別の技術や方法にこだわりが強い人は、概ね、挫折しているか上達しにくいようです。以前にも、入門レベルの人が、なぜ、そうしなければならないか教えてくれ、最後には、あなたの言っていることは理解できない、もっと理論的に教えてほしい、とかいい始めました。こちらが経験的にあった具体例を出したところで、納得しないようでした。 おそらく、非常にプライドが高いので、単に覚えるということが出来ないのかもしれません。少なくとも、そういう人は、人が1年掛かるものを、3年も5年も掛かってしまうだろうなって思いました。 ただ、いずれにしても、しょせん、「モノ」は人の作ったもので、そのコンセプトは、その時、その時のものだと思います。そこに、理屈があるようで、本当はないのだと思うのです。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。#5の発言者です。 プログラムは、語学に似ていると書きましたが、また別に数学(中学・高校数学)にも良く似ています。解法のパターンを知っていないと解けないものが多いですが、VBAもやはり同じです。 以前、VBAで単語の意味を覚えたい、といっていた方がいましたが、そういう人は、永遠に無理かもしれません。その人は、また「オブジェクトの概念を知りたい」と言っていましたね。それは、プログラムではなくて、哲学です。(^^;(←冗談ではなく、本当です。たぶん、近代の哲学と関係があります。) 概念を知るのではなく、「モノ(対象物)」の存在さえ知っていればよいのです。「モノ」の本質を知る必要はない、というのが、現代のプログラミングの本質的な考え方なのですね。 私たちは、テレビやパソコンの構造を知らなければ使えないか、というと、そんなことはありません。スイッチを押して、ここをこうすればこうなる、ということさえ知っていればよいのですね。 しかし、テレビやパソコンの使い方を、いくらイメージしても、実際に、使ったことがいなと、イメージできません。ただの機械の箱が、スイッチを押して画像と音が出て楽しむことが出来て、初めて「テレビ」とはこういうものか、と理解できますから、「テレビ」という概念的なものを覚えるのは無駄なのです。 プログラミングを覚えるために、プログラムの知識が必要かというと、それは、どうでしょうか。こうした技術の習得は、実際に使いながら覚えるものではないでしょうか。最初は、基本的なことさえ知っていればよいです。また、入門時には「なぜ」を連発しないことです。時が解決してくれます。 いつもお勧めしている本に、技術評論社 『かんたんプログラミング Excel VBA』大村あつし氏 (シリーズ) http://www.amazon.co.jp/exec/obidos/ASIN/4774119660 私がいえるのは、 Excel VBAの基本は、「標準モジュール(Excel特有)」に書くこと。 Sub ~ End Sub で「ひとまとめ」になるということ。 この二つぐらいですね。最大のVBAの教師は、VBA自身です。エラーが返るので、自分が間違えたということが分かります。 それと、Microsoft 社の英文・和文とも、説明からして、古臭くて、造語や抽象語が多すぎるように思うのです。だから、分からなくて当然だと思います。少なくともプロパティ(property)と言われて、その意味がすぐに分かる人は、ネイティブでも少ないです。こういう意味が本当にわかるようになるのは、ずっと先です。 最後に自分自身に対してですが、プログラミングを知らなかった私は、いきなりやって、やっぱり挫折しました。1年半ぐらいは手をつけなかったです。いくら覚えようとしても、覚えられませんでした。最初、Range と Cells の違いという簡単なつまずきからです。今、昔の私に言えるのは、Cells と Range は、共存して使おうとすると、入門時には必ず混乱する、それさえ分かっていればよかったのですが……。知らなくても使えるもの、優先度があるものに関しては、優先度の高いほうから覚える、これは、英単語の覚え方と同じです。 Range, Worksheet, Workbook (<-- Cells, Sheet, Window) Excelには、そうした似たようなものが一杯あります。それを、ひとつ選んで進めればよいのですが、私には、誰か良く分かった人の助言が必要だったかもしれません。これらが、Excel VBAの上達を邪魔しているとも言えます。1年以上も掲示板に回答している人さえ、未だに混乱している人もいます。 それと、#3のimogasiさんの、「カテゴリの登録が必要と思うが。」私の解釈が正しいとすれば、Office (Excel, Word, Access) の一般の使用と Office VBAとは、本当に別物に近いです。別の分野ぐらい違います。そういう意味なら、別のカテゴリが必要かもしれません。ただ、私が、今まで、ここのOkwave(教えて!goo)に来た理由は、VBAを専門に書いていたら、Excel だけでも、全体としてはうまく使えなくなってきたからです。また、関数の達人レベルの人でさっぱりVBAが分からないという人もいました。もしも、Excelだけでも本当に覚えようとしたら、分け隔てしてはいけませんね。オールラウンドで使えることが大事ですね。
お礼
ありがとうございます。Sub ~ End Sub の意味がわかりました。 必要性や優先性に応じてVBAを使っていくことにします。 とりあえず、技術評論社 『かんたんプログラミング Excel VBA』大村あつし氏の本をはじめの一歩にして、できそうなことからトライしてみようと思います。 すでにわからない言葉がたくさんで混乱しています。 Range,???workbook??? どんなときに使えばいいのでしょうか? 機能を使うとどのように処理されるのかイメージが全くつかめず(泣き) データを沢山処理するときに効率的に処理するにはどのようなマクロ機能を使うといいのでしょうか?VBAの必要なプログラミング知識はどんなこと何がありますか?何度も同じ形式のデータを入力していかなくてはいけません。効率的に作業ができる”技”がないかなぁ・・・と思案中です。また、ご助言いただけると幸いです。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 基本的に、VBAは、ビジネスマンが仕事の合間にちょっと書いて、作業効率や労働生産性を上げるために使う、という目的で作られたそうです。単純作業を、人が何時間も掛かってするような仕事を、正確に数秒で行えるとしたら、使わない手はありません。つまり、プロフェッショナルではなく、素人向けに出来ているということだそうです。 しかし、「たかがVBA」ですが、やっぱり、プログラミングには違いないです。出来るようになる人、そうでない人、それは仕方がないことです。語学と同じで、紋切り型の挨拶程度出来るなら、誰でも出来ますが、少し表現力を増してくると、なかなか出来ないということが多いです。 まったく知らない人が、ちょっと使えるようになるまでに、3ヶ月程度掛かりますが、一応、一通り覚えるのに、1年を使ってしまうと思います。本を購入して、それを自分の手でコードを書いてみて、だいたい3ヶ月です。500個以上プログラムを書けば、一通り覚えるといわれていますから、1日に2つ程度作って、やっと1年というところかもしれません。 ただし、普通の人は、3ヶ月以上覚える必要性はあまりありません。後は、こうした掲示板をきちんと質問できるレベルぐらいの知識で十分だと思います。分からないものは分からないとさっさと見切りをつけて、掲示板で聞くということでよいと思います。ただし、学習するためには、段階的なステップを踏むということをしますが、本当に基本的なことを覚えないと、2年経っても3年経っても、同じ質問レベルを繰り返します。 Word VBAは、本来、上のレベルを考えていくなら必要ですが、今は日本語マニュアルもありませんし、Excelのオブジェクトの概念とはかなり違いますから、覚えにくいとは思います。Word VBAの場合も、最初にパターンは覚えないといけません。英語のサイトに、Word の専門の場所がありますから、そこで拾っていくぐらいの手しかありません。(私は、ここで何度か書いています) 最後に、あまり、一生懸命にならないことですね。基本的なことを覚えればそれでよいです。また、VBAの能力に高い期待などは持たないほうがよいです。技術は無限ですが、限りある時間の中で、必ずしも、自分で実現出来るとは限りません。 なお、VBAは、"Visual Basic for Application" の略。ベースの言語は、"Visual Basic 6" をアプリケーション用にダウンサイズしたもの。本体の、"Visual Basic 6" は、すでにサポートが終わっていますから、いずれ、これも、VSTA ("Visual Studio Tools for Application")に代わるといわれています。便利な反面、むき出しではありませんが、オブジェクト指向の概念が直接入ってきますので、まごつくことも多いはずです。
お礼
ありがとうございます。VBは全く使えません。プログラミングを覚えることが大切なようですが、マクロ機能を使うには、プログラムの知識がないと使えないのでしょうか? 画面に表示されることの意味や使い方がさっぱりわからず、撃沈しました。手軽にマクロ機能を使うのは難しいようです。 マクロ機能を使うときにはプログラムを自分で作る必要があるということですか?よい練習本があったら教えてください。
仕事上でエクセルによるデータ処理をよく行っているものです。 私も勉強中ですが、使おうと考えたキッカケは、 少しでも楽をしよう、ということです。 ルーティンワークには確かに力を発揮することも多いでしょうか。 私はコレに加えて、 大量のデータの処理をする必要があって、手作業でやったら日が暮れる時なんかにも使うことを考えます。 (コードを書く手間と時間や私のVBA知識との相談ですが) 個人的には自動記録で済むような話だったらあまりメリットを感じません。 むしろ、条件によって処理方法が変わるとか、扱うデータの量が変わるとか、そういった流動的なものを片付ける時に重宝しています。 ワードのマクロは使用経験なし、使用方法を知りません。
お礼
ありがとうございます。 マクロ機能を使うと、決まった作業を効率的に行えそうな気がしてきました。プログラミングの知識がないと使えないようですが、自分でプログラムを作る必要があるのでしょうか? 自分でプログラムを作るのは簡単なのでしょうか?
- imogasi
- ベストアンサー率27% (4737/17069)
利用場面が多くて、一々書きにくいですね。 エクセルの作業をプログラムで自動化する目的で使います。 この質問コーナーの質問・回答を1週間ナリとも読んで見るのはどうでしょう。VBとVBAの質問数の割合は4:6ぐらいの割合かな。質問となると、やや個別、特殊問題が出るが。カテゴリの登録が必要と思うが。自動配信されます。ワードVBAの質問はほとんど出ません。
お礼
ありがとうございます。いろいろな場合に使えることがわかってきました。ちなみに、VBとVBAは、何の略ですか?VBは、ビジュアルベーシックのようですが、VBAは何の略かわからなくて・・・。カテゴリの登録というのも「?」でどういうことかわからないのですが・・・ また、教えてください。
- VT250F
- ベストアンサー率30% (26/84)
定型的な作業をする時ですね。 値は毎回変わるけど、押すボタンや操作は毎回同じとか。 例えば、グラフを作る作業は同じセルに値を入れれば、 後の操作はあれこれ決まってますので。 試しにエクセルなら、ツール - マクロ - 新しいマクロの記録 で、マクロを記録すると見当がつくと思いますが、 エクセルを開いて、何のシートの何行目を最初に表示するとか、 決まったことを決まった手順で記憶させ、 それを再生することができるわけです。
お礼
ありがとうございます。決まったことを決まった手順で記憶させ、それを再生することができるわけですね。なるほど!確かにそうすると利用場面は、いろいろな場面で使えますね!マクロ機能を使うと、効率的に作業が進みそうですね!早速使ってみようと思います。
- Cupper
- ベストアンサー率32% (2123/6444)
そのままです あったら便利だなと思ったとき 基本的には記録マクロで十分な働きをします 便利だなと思うくらいであれば、コレで十分です 複雑な処理も行うことができますが、そういったマクロを作成するにはBV(ビジュアル・ベーシック)の知識が必要になります 便利だな…ではなく、これでなければ処理できない!!というとことで使うものです
お礼
ありがとうございます。ここ一発の勝負ツールなんですね! まずは、記録マクロの使い方から覚えていきたいと思います。 ちなみに、BV(ビジュアル・ベーシック)ってどんな時に使うんですか?機能があっても、全然使い方がわかりません。「これは、いったいどんなときに使うのだろう・・・」といつも思っていたのですが・・・これも、また、使い方が難しいのでしょうか?
お礼
ありがとうございます。 Sub Test1() MsgBox Range("A1").Value End Sub を実行してみました。 数字が数字が出てきて感動!!! MsgBox Range("A1").Text と、Value -> Text と書き換えてあげます。 をしてみました。 時刻が表示され感動!!! 結構苦戦しました。どこに書き換えればよいのか・・・ Sub Test3() Range("A1").Copy Range("B1") End Sub をやってみました。数が変わり、時間表示になり、時間表示B1のセルにコピーされました。感動!!! 試しに"B1"を"C1"に変えてみました。C1のセルにも時刻がコピーされ感動!!! コピーするときはこれを使うと便利そうですね! あと、VBEditorが何かがわかりました。 test(1)がtest(3)になっていますが、test(2)がないのは何か意味があるのですか?素朴な質問なのですが・・・ オブジェクト、プロパティ、メソッドのについて少しわかりました。 オブジェクトの塊は、どこからどこまでをいうのでしょうか?ここがわかっていません。