エクセルのマクロを記述した外部ファイルを作成しておいて
メイン(普通)のマクロの実行中にそのファイルを読み込んで、
マクロを実行させることは可能でしょうか?
可能なら方法をお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

もう少し詳しく説明した方が、回答がもらいやすいですよ。



外部ファイルとは?

推測で回答すると、マクロとあるので Excel のブックのことかな?
なら Run メソッドですかね、、、

手順としては、

 1. Workbooks.Open("ブックのフルパス") でそのファイルを開く
 2. Application.Run("ブック名!マクロ名,引数1,引数2,....,引数30)
   でマクロを実行

   Run メソッドについて VBA のヘルプを参照して下さい。

です。

外部ファイルとは「マクロが記述されたテキストファイル」というのは
あまり想像したくない、、

この回答への補足

いいえ、違います。
普通のマクロの所に
以下の様に記述(C言語を例に取ると)

Sub Macro1()
#include "excel_macro.txt"
End Sub

そして、excel_macro.txt のファイルに
以下のように記述したいのです。

Range("B2").Select
ActiveCell.FormulaR1C1 = "abc"
Range("B3").Select

理由は、複数のマクロで
全く同じプログラムが数行に渡ってあるので、
その全く同じプログラムの部分を、
外部ファイルとして一箇所にまとめて
呼び出すようにしたいのです。

補足日時:2006/06/02 22:28
    • good
    • 0
この回答へのお礼

ありがとうございます。
このやり方で出来ました。

お礼日時:2006/06/03 18:03

> そして、excel_macro.txt のファイルに


> 以下のように記述したいのです。
> Range("B2").Select
> ActiveCell.FormulaR1C1 = "abc"
> Range("B3").Select

C は良くわかりませんが、Perl や PHP でもコードの重複部分を共通化
するため、その部分だけを外部ファイル(include ファイル)にするのは、
良く使われる手法ですよね。

結論から言えば、残念ながらこの用途で include ファイルを扱うことは
VBA を含め VB では仕様上不可能です。

ご質問を拝見する限り、関数化(サブプロシージャ化)で対応できそうな
気がしますが、それではダメなのですか?


過去の Office では VBA で VBA のコードを書くことが可能だったので、

 1. 外部テキストを読み込み
 2. 一時モジュールを追加
 3. 元のコードに読み込んだコードを追加し、プロシージャを書き出し
 4. 書き出されたプロシージャ実行
 5. 実行後一時モジュールを削除

みたいな流れでできたかもしれません、、、

 # 実際にやったことはありません。

しかし、現在ではセキュリティー上の理由で VBA から VBA のプロジェクト
にアクセスすることが禁止されてしまいました。

つまり、VBA では個々のプロシージャにおいて重複する部分があったと
しても、それぞれにきちんと書くか、これが非効率なのであれば、クラス
や標準モジュールでサブプロシージャにするしか方法はなさそうです。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2006/06/03 18:05

アドイン?かな


Excelでユーザー定義関数をアドインとして提供する
http://www.atmarkit.co.jp/fwin2k/win2ktips/471fu …

Excelでお仕事
http://www.asahi-net.or.jp/~ef2o-inue/haifu/sub0 …
    • good
    • 0
この回答へのお礼

ありがとうございます。
参考になりました。

お礼日時:2006/06/03 18:04

外部ファイルって、それもエクセルですよね?


Workbooks.Open "C:\Book1.xls"
Application.Run "Book1.xls!test"
こんな感じで出来ると思います。
Book1.xlsのtestというモジュールを実行します。
    • good
    • 0
この回答へのお礼

ありがとうございます。
このやり方で出来ました。

お礼日時:2006/06/03 18:04

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル(マクロ記録)

よろしくお願いします。
エクセルで、印刷マクロを作ろうと考えています。
             (基本、入門者です)
マクロ記録で、作っていますが、
記録終了するたびに「 印刷 」がかかっては、
用紙が何枚あっても足りません。

いい考えがありましたら、お教えください。
お願いします。

Aベストアンサー

#3の回答者です。

>出来たら、この i=1 の意味を教えていただけませんでしょうか?
単に、それはページ数です。

ヘルプを引用します。(PrintOut で調べました)

式.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName, IgnorePrintAreas)

From オプション 印刷を開始するページの番号を指定します。この引数を省略すると、最初のページから印刷します。
To オプション 印刷を終了するページの番号を指定します。この引数を省略すると、最後のページまで印刷します。

と出てきます。

Qエクセルマクロについて質問です ファイルを開くマクロをワイルドカードを使用して作成したいです

エクセルマクロの初心者です
ファイルを開くマクロを作成したいです。

対象のファイルは、
 商品コード(5桁の数字) スペース 商品名
 たとえば 40157 ベーコンスライス500g
という名前が付いており、100個以上同一のフォルダに入っています。商品コードのみを入力して、マクロを実行すると目的のファイルが開ける。という形式で作りたいです。
商品名まで入力し、開きたいファイル名と完全に一致させれば

Sub 栄養計算()
'
Workbooks.Open Filename:="D:\ekuseru\" & Range("E4").Value & ".xls"

End Sub

で実行できたのですが商品名まで入力するは大変です。
そこで、ワイルドカードを使えばコードのみの入力でできるカナと思い試してみたのですがうまくいきませんでした。一応調べてみて Like関数を使うとできるという話を見つけたのですが、私が未熟なのかうまくできませんでした。
とても初歩的な質問で恐縮なのですが、自分では完全に行き詰ってしまいましたので、皆様の力をお借りしたいです。お願いします。

エクセルマクロの初心者です
ファイルを開くマクロを作成したいです。

対象のファイルは、
 商品コード(5桁の数字) スペース 商品名
 たとえば 40157 ベーコンスライス500g
という名前が付いており、100個以上同一のフォルダに入っています。商品コードのみを入力して、マクロを実行すると目的のファイルが開ける。という形式で作りたいです。
商品名まで入力し、開きたいファイル名と完全に一致させれば

Sub 栄養計算()
'
Workbooks.Open Filename:="D:\ekuseru\" & Range("E4").Value...続きを読む

Aベストアンサー

ワイルドカードでやるなら、Dirで該当ファイルがあるか調べて開いては?
ワイルドカードで無い場合でも、ファイルを開く前に存在するか否かを確認するのは基本です。

Sub 栄養計算()
 Dim sTarget As String
 sTarget = Dir("D:\ekuseru\" & Range("E4").Value & "*.xls")
 If sTarget <> "" Then
  Workbooks.Open Filename:="D:\ekuseru\" & sTarget
 Else
  MsgBox ("該当ファイル無し")
 End If
End Sub

商品コードで始まるファイルが複数ある場合は考慮していません。

Qエクセル マクロコードの記述の勉強

独学でエクセルでのマクロのコード記述ができるようになりたいのですが、コードがかける人はどのようにしてかけるようになったのでしょうか?

プログラミング関係にはまったくの初心者なので、入門本を立ち読み程度読んでみたのですが、「面白そうだが、かなり手強そう」というような印象でした。

現実的な問題として、実際にコードをかける人は、プログラミング関係の学校等で学んだ人ぐらいしかいないのでしょうか?

めざすレベルはエクセルでこうしたいと考えたものを調べながらコードをかける程度のレベルです。

Aベストアンサー

> 実際にコードをかける人は、プログラミング関係の
> 学校等で学んだ人ぐらいしかいないのでしょうか?

そんな事ないです。私も独学で覚えましたから。

エクセルはマクロ記録がありますので、実際の操作を記録して書かれたコードを追っていったり、書き直したり出来ます。
VisualBasicEditor画面でコードにカーソルを置き、F1キーを押すとVBAヘルプ(たしか標準ではインストールされないので追加インストールの必要がある)が開くので、意味を調べたり、サンプルコードを見たりして覚えて行きました。
ネットにも沢山サンプルがありますし。

変数の使い方とforやif等を覚えてマクロ記録を直すだけでも結構便利になります。

Qエクセルで、VBマクロを使い、cellの内容が変更されたタイミングでマクロを実行したいです

エクセル上のVBマクロで、cellの内容が変更されたときに、マクロを実行し、同時にどのセルが変更されたかを取得したいです。

よい方法があれば教えて頂きたいです。
よろしくお願いします。

Aベストアンサー

Worksheet_ChangeイベントとTarget引数を使うと良いでしょう。

例えば、使用しているシートのシート名タブを右クリックして「コードの表示」で
開いたコードウィンドウに下記コードをコピーして貼り付けます。

これで、内容を変更したときに、そのアドレスを表示します。

例えば、A1:A10を選択し、"abc" をキー入力し、Shift+Ctrl+Enter を押すと
範囲内に"abc"が入力され、メッセージボックスに "A1:A10" が表示されます。

Private Sub Worksheet_Change(ByVal Target As Range)
  MsgBox Target.Address(False, False)
End Sub

但し、実際に本当に内容を変更したかどうかを検出するには、常に現シートの
写しを作っておいて、双方の内容比較する必要があります。

例えば、何も入力されていない A1:A10 を選択し、DELキーを押すと、何も変更
していないのに、A1:A10 と表示されてしまいます。

ということで、同じ内容を上書きしても変更したのと同様に扱われます。

Worksheet_ChangeイベントとTarget引数を使うと良いでしょう。

例えば、使用しているシートのシート名タブを右クリックして「コードの表示」で
開いたコードウィンドウに下記コードをコピーして貼り付けます。

これで、内容を変更したときに、そのアドレスを表示します。

例えば、A1:A10を選択し、"abc" をキー入力し、Shift+Ctrl+Enter を押すと
範囲内に"abc"が入力され、メッセージボックスに "A1:A10" が表示されます。

Private Sub Worksheet_Change(ByVal Target As Range)
  MsgBox Targe...続きを読む

Qエクセルについているマクロが出てこない・・・

 エクセルをひらき、ツール→マクロ→マクロでマクロの作成ができると聞きましたが、私のエクセル2002ではマクロのその機能が空欄状態です。復帰や回復できる方法を教えて下さい。

Aベストアンサー

(1)自分でマクロの記録を採る。
    ツールーマクロー新しいマクロの記録
(2)または他人がマクロの記録をとった。
   (3)他人がVBAコード(プログラム)を組んだ
    ツールーマクローVBEープログラム作成
場合に出てくる。(1)(2)(3)ともやっていないから、出てこないのは当然。
(1)なぞはマクロの画面でマクロー編集でコードが見れます。
ーーー
本でもWEBでも、マクロに関する本1冊か、「エクセル マクロ」でWEB照会して、勉強し。予備知識をえるべきです。

Qエクセルマクロ 異なるファイル名でも実行してくれるマクロ

マクロ初心者です。よろしくお願いします。

ファイル名はすべて例えです。
「A」エクセルファイルを 「Z」というファイルに貼り付けるマクロを作りました。
そのマクロで「B」ファイルからも「C」ファイルからも 「Z」ファイルにコピーをしなくてはいけないのですが VBAには「A」で記録されているため
「B」と「C」にはそのマクロが使えません・・・。

VBAをどのようにデバックすればいいのでしょうか?

Aベストアンサー

Workbook("A").~ など、ブックを指定する部分を、ThisWorkbook.~ に変更すると、
マクロが書いてあるブックを基点に動作します。

Qエクセル2010で作成したマクロ

エクセル2010で作成したマクロブックがあります。
このエクセルを知人にメールで送りました。

知人のエクセルは2007です。
マクロブックのフォームボタンを押しても何も動作しない状況との事です。

エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

素人の質問で申し訳ありませんが、ご指導お願いいたします。

Aベストアンサー

>エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

ご相談の状況からすると、まずそういう事はありません。
まぁ2010でしか動かない内容であなたがマクロを作成した可能性は確かにありますが、その場合でも「何も動作しない」という事はありません。ふつーにエラーが出て止まります。



一応あなたの側で確認しておくべきポイントとしては、
○間違ったブックを送っていないか再確認する
 ・ちゃんとマクロを付けたブックを送ったか確認する
 ・名前を付けて保存でファイルの形式をマクロ有効ブックにして保存したのを送ったか再確認する
といったところをよく確認してください


先方に対してあなたが確認すべきポイントとしては、
○「何も起こらない」とは、具体的にどんな状況なのか再確認する
 ・ホントにうんともすんとも反応が無いということなのか
 ・実は何かエラーメッセージっぽいダイアログが現れて、OKをクリックしてもマクロが動作した様子が無いとかの状況では無かったか



具体的な状況が明らかになったら、ようやく対処を検討する事ができるようになります。
●そもそもどういうマクロを作成したのか、ご自分の作成したマクロをよく確認して、「反応が現れない」マクロを書いてたんじゃないのか再確認する
 たとえば無意味にon error resume nextのような仕込みをしてたりしないか
 たとえば不適切なデータに対して何も作動せずに終わってしまうようなそもそも作りにしてたんじゃないか
 とか。

●実は何かダイアログが出てたのなら、具体的にどんなダイアログなのか正確に聞き取って、あなたの方で対処を考える
 「マクロが無効になってる」のなら、マクロを有効にして実行するように伝える
 とか。

>エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

ご相談の状況からすると、まずそういう事はありません。
まぁ2010でしか動かない内容であなたがマクロを作成した可能性は確かにありますが、その場合でも「何も動作しない」という事はありません。ふつーにエラーが出て止まります。



一応あなたの側で確認しておくべきポイントとしては、
○間違ったブックを送っていないか再確認する
 ・ちゃんとマクロを付けたブックを送ったか確認する
 ・名前を付けて保存でファイル...続きを読む

Q特定フォルダ内のエクセルファイルのマクロを実行するマクロに関して

特定のフォルダ内に集められたエクセルを開き、
マクロを実行して閉じるというマクロを作成しようとしています。
まだマクロを触り始めてから3日程度でネットの情報を切り貼りして
作っている状況なので根本的に間違っているかもしれませんが
下記をどのように弄れば思い通りの動作が出来るかご教授願えませんでしょうか。

Sub マクロ実行()

Dim buf As String
buf = Dir(Sheets("Sheet1").Range("A1").Value & "\*.xlsm")
Do While buf <> ""

  Application.Run.Workbook(buf) "Macro1"
ActiveWorkbook.Close

buf = Dir()
Loop
End Sub

具体的にはSheet1のA1にフォルダのパスをいれ
そのフォルダにあるマクロ有効ブックを開き、マクロを実行し、保存せずに閉じる
という一連の流れをフォルダ内にある全てのマクロ有効ブックに行おうと考えています。
よろしくお願い致します。

特定のフォルダ内に集められたエクセルを開き、
マクロを実行して閉じるというマクロを作成しようとしています。
まだマクロを触り始めてから3日程度でネットの情報を切り貼りして
作っている状況なので根本的に間違っているかもしれませんが
下記をどのように弄れば思い通りの動作が出来るかご教授願えませんでしょうか。

Sub マクロ実行()

Dim buf As String
buf = Dir(Sheets("Sheet1").Range("A1").Value & "\*.xlsm")
Do While buf <> ""

  Application.Run.Workbook(bu...続きを読む

Aベストアンサー

すみません。私のミスでした。

>実行の結果としては、ORIGINからDESTINEへ同一のファイルが同一の名前で保存されるという結果でした。

自分のコードの以下の間違いがあります。

       With .ActiveSheet
      newFn = .Range("C5").Value & " " _
       & .Range("F5").Value & " " _
       & .Range("C6").Value & " " _
       & .Range("F6").Value
       End With
      .SaveAs DESTINE & fn, xlOpenXMLWorkbookMacroEnabled ←ここがへん。新しいファイル名になっていません。newFn が正解でした。
      .Close False


正しくは、新しいファイル名になっていなくてはならないので、newFn ですね。
  .SaveAs DESTINE & newFn, xlOpenXMLWorkbookMacroEnabled '←●
  でしょうね。

p.s.PCがなくても、頭にPC画面が浮かべば、十分にコードを読みながらマクロの練習は出来ます。私は、道を歩いている時や電車の中で、コードが頭に浮かびました。今は、ちょっとそういう事情ではなくなりましたが。

すみません。私のミスでした。

>実行の結果としては、ORIGINからDESTINEへ同一のファイルが同一の名前で保存されるという結果でした。

自分のコードの以下の間違いがあります。

       With .ActiveSheet
      newFn = .Range("C5").Value & " " _
       & .Range("F5").Value & " " _
       & .Range("C6").Value & " " _
       & .Range("F6").Value
       End With
      .SaveAs DESTINE & fn, xlOpenXMLWorkbookMacroEnabled ←ここがへん。新しいファイ...続きを読む

Qエクセルで作成したマクロが他のシートに反映しない

必要に迫られ始めてマクロをエクセル上で作成してみました。(初心者)
そのマクロを違うエクセルファイル上でも反映させたいのですが
マクロを作ったおおもと(最初)のファイルを閉じてしまうと違うエクセルファイルを開いてもマクロが反映されていません。
マクロでの命令内容としては 
エクセル上の数字の羅列→グラフ作成→上書き保存 という手順で作りました。
他のエクセルファイルも同じように数字の羅列があります。それを同じ作業(グラフ作成→上書き保存)したいのです。
一度作ったマクロを他のエクセルファイルにも反映させるにはどうしたら良いのでしょうか?
説明がわかりにくくてすみません。
よろしくお願いします。

Aベストアンサー

マクロの記録先を「個人用マクロブック」にするのが良いと思います。
一回マクロの記録を行い「保存先」を「個人用マクロブック」にします。するとPERSONAL.XLSという特別なブックが作成されます。

このブックの標準モジュールシートに先に作ったマクロを貼り付けてください。

そうすればエクセルを開くと、どのブックでもマクロが実行可能になります

Qエクセルのマクロで作成した関数を他のエクセルのファイルから参照できるのですか?

エクセルVBAに関して質問です。

a.xlsというファイルに複数のシートがあり
すべてのシートにあるデータと「計算」ボタンがあります。
「計算」ボタンを押下すると、マクロが実行され
計算結果が同じシートに表示されます。
データの内容はシートごとに違いますが、
「計算」ボタンで呼び出したいマクロはすべて同じです。

この「計算」ボタンを押すと実行されるマクロを
b.xlsに記述したいのですが、
(他のエクセルのファイルにも使いまわしたいので)
そのようなことは可能なのでしょうか。
またどのようにマクロを記述すればこのマクロを
呼び出すことができるのでしょうか。

分かりにくい文章で申し訳ございませんが
ご教授くださるとうれしいです。

Aベストアンサー

ボタンを右クリック→「マクロの登録」を選択→目指すマクロを選択して「編集」ボタンを押下。
開くモジュールウインドウ内の記述をすべてコピーし、
b.xls上で
1)「ツール」→「マクロ」→「マクロ」で出てくるダイアログに、
マクロ名に好きな名前を入力して、「作成」ボタン。
マクロエディターの画面になる。
2)マクロエディターの画面に以下のような3行が出てきますけど、消しちゃってください。
  Sub test()

  End Sub
3)最初にコピーした記述をマクロエディタにペーストすれば終了です。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報