Excelマクロの繋げ方と参考書籍

このQ&Aのポイント
  • Excelのマクロの結合方法を教えてください。マクロを使って作業を効率化するための方法を学びたいです。
  • 現在、「マクロの記録」を使用してマクロを作成していますが、マクロが増えてしまい困っています。複数のマクロを一つにまとめる方法を教えてください。
  • マクロの編集画面には理解が及んでおらず、なかなか繋げることができません。具体的なマクロの編集方法や参考書籍を教えていただければ幸いです。
回答を見る
  • ベストアンサー

Excelのマクロの結合方法を教えてください

Excelのマクロを使っての処理を少しだけ使うようになりました。 「これがコンピュータなの!」と一瞬で作業が進みます。(当然ですね。) ☆・・・・・☆ マクロについて学びたいので、数冊の「基本技」などの参考書籍を購入しました。 でも、わかりません。 現在は、「マクロの記録」で始めて「記録の終了」でマクロを記録してボタンに登録して「マクロを利用」しています。 ボタンが増えてしまうのです。(泣・・・) ☆・・・・・☆ マクロの編集を開くと何にも分かりません。 (Sub Macro1)   End Sub (Sub Macro2)   End Sub (Sub Macro3)   End Sub  ----- と、作成した順にマクロが書かれていることが分かりました。   我流でそれぞれを繋ぐと止まってしまいます。  ☆・・・・・☆ このように、記録によって書かれた複数のマクロを繋げて、一個のマクロに纏める書き方のポイントを教えてください。 また、このように記録されたマクロ(テンプレートでも可)の推敲(朱筆?)から入門するような参考書名をご存じでしたら具体的に教えてください。   ☆・・・・・☆

質問者が選んだベストアンサー

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (715/1478)
回答No.6

マクロの記録でマクロを作ったのであれば、以下の様になっていると思います。 Sub Macro1() ' ' Macro1 Macro ' ' End Sub Sub Macro2() ' ' Macro2 Macro ' ' End Sub Sub Macro3() ' ' Macro3 Macro ' ' End Sub 以下のマクロを追加します。(上でも下でもいい) Macro0を動かせば、全て動きます。 ' Sub Macro0()   Macro1   Macro2   Macro3 End Sub もし、必ず同時に動かして、別々に動かすことがないなら、End Sub とその下のSab を削除すれば1つになります。(最後は残しておきます) Sub Macro1() ' ' Macro1 Macro ' ' ' ' Macro2 Macro ' ' ' ' Macro3 Macro ' ' End Sub

lovelykajiyan
質問者

お礼

的確なご回答をいただきました。 所期の目的が十数年ぶりに、クリアできました。 ✡--------✡ End Sub とその下のSab を削除すれば1つになります。 (最後は残しておきます) ✡--------✡ ありがとうございます。

その他の回答 (6)

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.7

今晩は 回答No.5です。 名簿の図が添付されていませんでした。 改めて添付します。 一つのマクロは Sub マクロ名()  'で始まり End sub  'で終わります 即ち「Sub マクロ名()」と「End sub」の間に命令文を記述します 1行に1つの命令文が基本ですが :(コロン)で区切って複数の命令文を 1行に複数の命令文を記述することも出来ます。 この1行に他のマクロ名を記述すると 記述したマクロを実行しろという命令文です。  このことをマクロの結合と表現されているのでは? 回答No.5でそれを説明したつもりですが、ご理解できましたか コメント下さい。

lovelykajiyan
質問者

お礼

重ねてのご回答をいただきました。 ちょっと何か詰まっています。 更に、試行したいと思います。 ありがとうございます。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.5

今晩は、例題で説明します >Excelのマクロを使っての処理  マクロの記録」で始めて「記録の終了」でマクロを記録してボタンに登録して  ボタンが増えてしまうのです。(泣・・・)  ☆・・・・・☆  マクロの編集を開くと何にも分かりません。  (Sub Macro1)    End Sub  (Sub Macro2)    End Sub  (Sub Macro3)    End Sub  -----  添付のような名簿sheetから住所録と電話帳のマクロを作ってみましょう  ・B列を非表示で住所録  ・C列~D列を非表示で電話帳  ・A~D列を再表示で元の名簿 この処理を「マクロの記録」と「記録の終了」の間で一度実行すると マクロコードが作成されます。 '(シングルコーテイション)のある行はメモ用です。除去します > ☆・・・・・☆  このように、記録によって書かれた複数のマクロを繋げて、  一個のマクロに纏める書き方のポイントを教えてください。 -------------------------------------------------------- Option Explicit Sub 電話番号簿() Columns("C:D").Select Selection.EntireColumn.Hidden = True End Sub '--------------- Sub 住所録() ' Columns("B:B").Select Selection.EntireColumn.Hidden = True End Sub '----------------- Sub 名簿() Columns("A:E").Select Selection.EntireColumn.Hidden = False End Sub ------------------------------------------------ 住所録と電話帳を続けて実行すると名前だけが残ります 何れも名簿から始めなければなりません 名簿を実行してからするのに名簿を入れ子で処理します この場合名簿をサブルーチンと呼び名簿を命令文の行頭に記述して Option Explicit Sub 電話番号簿() 名簿 Columns("C:D").Select Selection.EntireColumn.Hidden = True End Sub '--------------- Sub 住所録() ' 名簿 Columns("B:B").Select Selection.EntireColumn.Hidden = True End Sub '----------------- Sub 名簿() Columns("A:E").Select Selection.EntireColumn.Hidden = False End Sub ------------------------------------------------ ら入門するような参考書名をご存じでしたら具体的に教えてください。>

lovelykajiyan
質問者

お礼

たいへん具体的なご回答をいただきました。 試行しています。 ありがとうございます。

回答No.4

Q、Excelのマクロの結合方法を教えてください。 A、Excelのマクロは結合しても無意味。 >一個のマクロに纏める書き方のポイントを教えてください。 そんなのは、存在しません。 >マクロを理解する最適な入門書。 なんでもOK。例えば、私が、最初にBASIC学習の手引きにしたのは次の2冊。 1、Fortran演習。 2、プログラミング言語C II。 この2冊に書かれている例題をすべてBASIC言語で記述して、その実行結果を確認。一日5時間×100日の悪戦苦闘。 市販の「Excel VBA 入門」なんてのは、何冊読んでも無意味で無駄。それは、その手の入門書は、次のように体系的に記述された書籍ではないからです。以下は、私が、ブログで紹介したJavaScriptの入門案内です。 目次 1 JavaScriptとは 2 JavaScript入門  2.1 変数と算術  2.2 for文  2.3 文字のカウント  2.4 配列  2.5 関数 3 JavaScriptの変数・演算子  3.1 変数名  3.2 エスケープシーケンス  3.3 宣言  3.4 算術演算子  3.5 関係演算子と論理演算子  3.6 代入演算子  3.7 三項演算子 4 JavaScriptのプログラムフロー制御  4.1 文とブロック  4.2 If-else  4.3 Else-if  4.4 Switch  4.5 ループ(while と for)  4.6 ループ(do-while)  4.7 Break文とContinue文 5 JavaScriptの関数 6 JavaScriptとHTMLのフォーム 7 JavaScriptとHTMLの組み込みイベント 8 結び  C言語を学んだ方は、容易に推察されるように、これは、「プログラミング言語C II」のJavaScript版です。質問者が、かのC言語の古典を紐解いて「VBA入門」を書き上げるといいです。3ヶ月もあれば、その作業が終わると思います。その時、質問者は、VBAプログラマの一員になっていることでしょう。市販の「Excel VBA 入門」を3冊も4冊も買い揃えても無意味。あんなのは2、3時間もあれば通読できるもの。それでは、何も会得出来ませんよ。たった一冊で良いから、それお指針にして上記の目次に沿って自前の「VBA入門」を書き上げることです。それが、一番の近道です。 と、爺は思う。

lovelykajiyan
質問者

お礼

>そんなのは、存在しません。 ありがとうございます。

回答No.3

書店で読みやすそうな書籍(Excel VBA 入門みたいなもの)を 購入し、学習されると良いと思います。 個人的に・・重要な用語としては ・オブジェクト(ブック、ワークシート、セル、コマンドボタン、他多数) ・イベント(クリック、開く、閉じる、アクティブ、他多数) でしょうか。 これが理解出来ないと辛いかもしれません。 他にも ・メソッド(命令) ・プロパティ(オブジェクトの設定) がありますが、オブジェクトやイベントを理解しないと 記述する場面が分からないと思います。 -- > このように記録されたマクロ(テンプレートでも可)の推敲(朱筆?)から入門するような参考書名をご存じでしたら具体的に教えてください。 残念ながら、これでは理解できないでしょう! 別に Excel VBA を学習して、後で記録したマクロを見て ・だからこうなっているんだ~ ・この記録したマクロ、変だぞ~、こう記述したほうが良いのに! 位になればしめたものです。 ※実際、マクロの記録は不要と思われる記述(命令等)が多く、  そのために汎用性がない、のが実情です。 では、頑張ってくださいね。^^  

lovelykajiyan
質問者

お礼

ありがとうございます。 がんばります。

  • unokwave
  • ベストアンサー率58% (966/1654)
回答No.2

マクロと言うのはソフトウェア プログラムの一種です。 プログラムという言葉自体、計画、予定、行動計画、スケジュール、日程、といった意味合いを持っていますね。 もし温泉に行く計画に、父兄参観に行くという予定をそのままくっつけたらどうなると思いますか。 その結合された内容は計画として成り立たないでしょう? ソフトウェアは、コンピュータ言語(多数の種類がある)で書かれた文章です。 そこには文法や記述の関わりがあり、目的に向かって手順を追った実行内容が書かれています。 また何かの機能(例えば音楽を鳴らす)を利用する場合には、その機能を利用する上での手続きが必要になります。 それは宿を利用する上での予約や飛行機を利用する上での搭乗手続きといった、対象毎に手続きが必要になるのと同様のことです。 そのようなルールを何一つ理解せず、ポイントだけでこなせるほどコンピュータの世界は浅くありません。 全く価値観や感覚が通じない、必要とされる体力やスキルが異なるジャングルや荒野に放り込まれて、ポイントだけで生きていけるとは思えないでしょう? あなたが使用しているパソコンのOSだけでも、そのソースコードを印刷すれば数十万ページにも数百万ページにもなる膨大な文章で、マクロはOSやアプリが持つ機能をより使いやすく単純化させていますが、元が膨大で抽象的に作られている(汎用的に使えるようにするためには抽象的に作る必要がある)ために、そこに書かれている事をある程度理解できるだけのマクロの文法や命令の学習が不可欠です。 購入された本には、恐らくそのような文法を理解する入り口となる内容が書かれているのではありませんか?。

lovelykajiyan
質問者

お礼

いろいろと、例を挙げて頂きました。 既成のソフトが高価な頃、N-BASICで表計算を書いていたことがあります。 Excelのマクロを開いてみると、何かにているように思います。 しかし、悲しいかな手を入れるとバグになってしまいます。 ベテランの方のアドバイスで、解決できるかと思いました。 ありがとうございます。

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.1

> 記録によって書かれた複数のマクロを繋げて、一個のマクロに纏める書き方 マクロによってそれぞれですので一概に言えませんが、以下のようにして繋ぐことができるかもしれません。 マクロから別のマクロを呼び出すというやり方です。 Sub Macro1() 'Macro1の記録されたコード Macro2 'このように書く Macro3 'このように書く End Sub Sub Macro2() 'Macro2の記録されたコード End Sub Sub Macro3() 'Macro3の記録されたコード End Sub もしくは Sub Macro1() 'Macro1の記録されたコード Macro2 'このように書く End Sub Sub Macro2() 'Macro2の記録されたコード Macro3 'このように書く End Sub Sub Macro3() 'Macro3の記録されたコード End Sub ただ、マクロの基本は理解しないと繋げないこともあります。 また、マクロの記録でできないこともありますし。 以下のサイトを参照してください。 http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_050.html

lovelykajiyan
質問者

お礼

早速のご回答をいただきました。 ありがとうございます。 Sub Macro1() 'Macro1の記録されたコード Macro2 'このように書く Macro3 'このように書く End Sub Sub Macro2() 'Macro2の記録されたコード End Sub Sub Macro3() 'Macro3の記録されたコード End Sub ✡-----------✡ もしくは Sub Macro1() 'Macro1の記録されたコード Macro2 'このように書く End Sub Sub Macro2() 'Macro2の記録されたコード Macro3 'このように書く End Sub Sub Macro3() 'Macro3の記録されたコード End Sub ✡------------✡ 工夫してみたいと思います。

関連するQ&A

  • 検索はマクロで記録できないのでしょうか?

    エクセル2007です。 マクロの記録ボタンを押して、CTRL+Fで検索を立ち上げて、文字を検索して、マクロを終了したら、 Sub Macro1() ' Macro1 Macro End Sub としか記録されてませんでした。 検索はマクロで記録できないのでしょうか? ご回答よろしくお願いします。

  • excel マクロ

    Sub Macro1() ' ' Macro1 Macro ' ' ActiveCell.Offset(-1, 0).Range("A1:G1").Select Selection.Copy End Sub マクロの記録だけでこのコードを作ることは可能でしょうか?

  • Excelで複数のマクロを一本化する方法

    Macro5とMacro6を組み合わせて下記のような処理をさせたいのですが方法がわかりません。 お知恵をお貸しください。 1 日付を確認する 2 Macro6でコピー 3 日付にあわせてMacro5で貼り付け   今日が1日ならC14から貼り付け   2日ならC25から貼り付け   3日ならC36から貼り付け    ・      ・    ・   31日ならc344から貼り付け 作成したマクロ ' Macro5 Macro ' マクロ記録日 : 2007/4/25 ユーザー名 : ' ' Keyboard Shortcut: Ctrl+r ' Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub Sub Macro6() ' Macro6 Macro ' マクロ記録日 : 2007/4/25 ユーザー名 : ' ' Keyboard Shortcut: Ctrl+q ' Range("C2:AD12").Select Selection.Copy End Sub

  • マクロの記録

    VBの自動記録が分かりません。 特定のセルに背景色を試しに付けてみました。そこで「新しいマクロの記録」を実行、「記録終了」と手順を行いましたが、「マクロの編集」を開くと下記のように中身がありません。ご教示願います。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2007/2/3 ユーザー名 : Administrator ' End sub

  • マクロのリストに表示しない方法

    マクロを記録すると、マクロのリストに表示されますが、マクロとマクロと組み合わせて大きなマクロを作ろうと思うときにリストが多いと煩雑になってしまいます。通常は、 sub macro1() end sub という形で記録されますが、何か別な方法で記録することで、リストには表示されないマクロを作る事はできるのでしょうか?

  • Excelマクロ教えてください。

    いつも大変お世話になっております。 あるシートにあるフォントのすべてをMSゴシックにしたいのですが、 マクロ記録→全選択してフォント変更→記録解除 で下記のマクロができました。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2007/11/21 ユーザー名 : TEST ' ' Cells.Select With Selection.font .Name = "MS ゴシック" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With End Sub 全選択せずに、あるシートすべてのフォントを変更する方法はありますか? シートのフォントを変更するだけの目的です。 よろしくお願いします。

  • Excel、マクロの記録、ショートカットキーが使えません

    Excelで下記のようにマクロの記録をしました。 1. Sub 改ページ() '表示-改ページのマクロです。 ' 改ページ Macro ' マクロ記録日 : 2009/11/26 ユーザー名 : ' ' Keyboard Shortcut: Ctrl+a ' ActiveWindow.View = xlPageBreakPreview End Sub 2. Sub 標準() '表示-標準のマクロです。 ' 標準 Macro ' マクロ記録日 : 2009/11/26 ユーザー名 : ' ' Keyboard Shortcut: Ctrl+z ' ActiveWindow.View = xlNormalView End Sub 3. Sub 改ページ範囲() '改ページ範囲を設定するマクロです。 ' 改ページ範囲 Macro ' マクロ記録日 : 2009/11/26 ユーザー名 : ' ' Keyboard Shortcut: Ctrl+q ' ActiveSheet.PageSetup.PrintArea = "$A$1:$P$27" End Sub ここで、1及び2についてはショートカットキーが使えるのですが、 3のショートカットキーを押しても何の反応もありません。 メニューバーのツール-マクロ-マクロのダイアログボックスを表示させてから、 「改ページ範囲」のマクロを選ぶと改ページされます。 そこで質問なのですが、 なぜ、ショートカットキーが使えないのでしょうか? よろしくお願いします。

  • マクロの記録で何も記録できない理由は?

    「ブックを開く」という動作が知りたかったので、 現在開いているブック1から、マクロの記録ボタンを押し、 デスクトップにあるブック2をダブルクリックして開きました。 しかし記録終了ボタンを押した後、 ブック1の標準モジュールを確認しても Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2009/10/16 ユーザー名 : ' End Sub と何も記録できていません。 何故でしょう? ちなみにブックを開く方法は http://officetanaka.net/excel/vba/file/file01.htm で確認できました。 なのでマクロの記録で記載されない理由を教えてください。 エクセル2003です。

  • マクロからマクロを呼び出す方法

    ブックの中にあるマクロを呼び出すマクロを書きたいです。 Sub Macro2()   Application.Run "Book1!Macro1" End Sub とすると、book1のmacro1しか呼び出せませんが、マクロを書いているファイル(コピーして仮にbook2) のマクロを呼び出すにはどのように書けばよいでしょうか?(マクロブックだけ他のファイルにコピーして使う用途を想定しています。

  • EXCELマクロを実行したときのコンパイルエラー

    EXCELでSolverをマクロで実行出来るようにしたいのですが、 マクロの記録のボタンをクリック→ツールでソルバーを選択→目的セル、目標値、変化させるセルを選択→実行→OK→記録終了で、マクロを作成し、 マクロを開いて実行をすると、コンパイルエラーが表示され、「subまたはFunctionが定義されていません」と表示されて止まってしまいます。ちなみに、EXCEL2003でも2007でも同じ状況です(ToT)。 マクロのソースは下記のようになっていて「SolverOk」のところがblueに反転してとまっています。 どなたか対処方法をご存知でしたら教えて頂けないでしょうか?よろしくお願いいたします(m_m) Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2011/9/13 ユーザー名 ' ' SolverOk SetCell:="$E$8", MaxMinVal:=2, ValueOf:="0", ByChange:="$E$7" SolverSolve End Sub

専門家に質問してみよう