• 締切済み

excel VBA ファイル操作 マクロ について

excel VBA ファイル操作 マクロ についてです。 ファイルAを基本ファイルとし、ファイルBのマクロB1をファイルB上で実行させる方法はあるのでしょうか? (ファイルBのマクロB1をファイルA上で実行する方法はわかるのですが。。。) ファイルBを開いてB1を実行すれば問題ないのですが、ファイルがB~Zなど多数ある場合に、作業効率化したいのです。 その際ファイルBは開いても開かなくてもOKですが、ファイルB上に表示される実行結果は保存したいです。 その結果、エラーが出なければ「正常終了」、エラーが出れば「異常終了」などを、ファイルAに記録するものを作りたいのです。 どなたかご教授お願いいたします。

みんなの回答

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.5

## たぶん、以下の点がわからないのでうまくいかないのだと思うのですが。 "ファイルB"をopenして、 workbooks("ファイルB").Activate してから処理すると ファイルA上のマクロでファイルAのSheet1のセルでなく、"ファイルB"のSheet1のセルとかの処理が できますが。 保存するなら、その後、saveすればいいです。 ただし、"ファイルB"で複数のウィンドウを開いている場合は、"ファイルB"でなく、"ファイルB:1"等になりますのでご注意。

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.4

> この時、Excelアプリケーションから > 見ればAもBも同等なので、「A上でXXX」という > 観点はオカシイのです。 私も同じ考えです。 Excelアプリケーション = Excel.EXE ソース上では Excel.Application が1つ だけ起動して、その中でファイルAのマクロも ファイルBのマクロも実行される事になります。 > Bを開いた後にBをActivateすれば済む話だと > 思いますが… 素人向けには私もまず、その説明をしますが、 本来はエクセルオブジェクトをブックから 指定すべきなのかもしれません。 ↓このままじゃコンパイルエラーかもしれないけど、 Excel.Application.Workbooks("Book1").Worksheets("Sheet1").Range("A1") 日本国東京都中央区3丁目みたいな。 これがファイルBになると 日本国大阪府中央区3丁目みたいな。 日本国→Excel.Application 東京都→ファイルA 大阪府→ファイルB 中央区→Sheet1 3丁目→セルA1 みたいな。 マクロの記録とかで出てくるコードは東京都であることを 前提に「中央区3丁目」のみで処理しようとするから、 対象ファイルをActivateにしないといけないんだけど、 もっと根本的に、省略しないで処理するようなプログラム を書いてやればいいだけだと思います。 それぞれを変数に入れる事もできます。 Dim app As Excel.Application Dim wb As Excel.Workbook Dim ws As Excel.Worksheet Dim r As Excel.Range Set app = Excel.Application Set wb = app.Workbooks("Book1") Set ws = wb.Worksheets("Sheet1") Set r = ws.Range("A1") これをきちんとやっていれば、大阪から「東京都中央区」に 連絡する事も、東京から「大阪府中央区」に連絡する事も 可能です。 日本国の立場から命令するようにしてみてください。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

>ファイルBのマクロB1をファイルA上で実行する方法はわかる お分かりなら悩む必要は無いと思うんですけど? VBAではシングルスレッドなので、自動で複数 ブックのマクロを実行しようとしたら何がしかの マクロを実行しないとできません。 つまり、AのXXXがBのB1を実行してあげる わけです。この時、Excelアプリケーションから 見ればAもBも同等なので、「A上でXXX」という 観点はオカシイのです。 XXX(たまたまA上にある)を実行していたら、 B1(たまたまB上にある)を呼び出したという だけの話ですよ。 B1マクロに潜在バグである暗黙のオブジェクトを 使う記述(例えばSelectionとか対象物を指定 しないRange("~")など)があるなら、Bを開いた 後にBをActivateすれば済む話だと思いますが… OLEでExcelのプロセスを別途立ち上げて操作 する方法もありますが、やることは同じなので、 全く意味が無い(プロセスが増えるので負荷は 増大する)と分かるはずです。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

他のワークブックを開く Dim 他のブック As Workbook Set 他のブック = Workbooks.Open("~\B.xls") 他のワークブックを保存する 他のブック.Save 他のブックにあるマクロを実行する Run "B!xxx" ブック名 ! プロシージャ名 のように指定する。 エラーをハンドリングする Dim エラーメッセージ As String On Error Resume Next Run ブック名 & "!" & 関数名 エラーメッセージ = Err.Description On Error GoTo 0 これらの部品を適宜組み合わせ、ファイル名を 変えながらループすれば目的が達成できると 思います。

abierto
質問者

補足

早速の回答有難う御座います。 >他のブックにあるマクロを実行する >Run "B!xxx" >ブック名 ! プロシージャ名 のように指定する。 これですと、 (ファイルBのマクロB1をファイルA上で実行する方法はわかるのですが。。。) のように、ファイルA上でマクロxxxが実行されてしまいます。 ファイルA上で操作しながら、ファイルBのマクロxxxを実行できればと思うのです。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

ファイルを開かずにその結果をそのファイルに保存することはできないでしょう。

関連するQ&A

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

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

  • エクセルVBA初心者です

    参考書籍を教えてください 質問1 会社でエクセルマクロを使う機会が増えました。大抵のことはマクロの記録で対応してますが、細かいファイル操作が出来ません。VBAを勉強する必要があると思ってます。何か良い参考書はありませんか? 質問2 ブックAでマクロAを作りました。マクロAの中で、ブックBのマクロBを実行させてます。マクロBは、計算結果としてブックB上に新シートを作成し、終了します。その後、マクロAに戻りブックBの新シート上のセル2個を選択しコピーし、ブックAにてペーストさせようとしてます。 マクロAはブックA上で「マクロの記録」で作成しました。 実行させると、マクロBの終了時点でストップするようです。 何がマズイのでしょうか?

  • エクセルのマクロで別ファイル(エクセル)のマクロを実行させるには?

    エクセルにおいてマクロを組んでいます. 1.実行させたいマクロAが組んであるファイル(Aファイルとします)が多数あります。またマクロAはモジュール内(Module1)に作っております。 2.1のマクロAを別のエクセルファイル(Bファイルとします)のマクロBで実行させたい. 上記のようなことを行いたいのですが可能でしょうか?さらに言えば、マクロBによってマクロAのプロシージャを指定して実行させることは出来るでしょうか? 現在は、マクロBによってマクロAを組んであるAファイルを開き、Aファイルのマクロの中にファイルを開いたときにマクロAを実行させる(イベントドリブン)ようにしています. 直接、マクロBでAファイルのマクロAを動かせるようになればマクロAにイベントドリブンなコードを組む手間がなくなるので、なんとかそのような事が出来ないでしょうか? どうか、詳しい方ご教授ください。 よろしくお願いいたします。。。

  • 複数のエクセルファイルを1つのエクセルファイルのシートにコピーをマクロ

    複数のエクセルファイルを1つのエクセルファイルのシートにコピーをマクロで行いたい。 マイドキュメントのデーターというフォルダ内に エクセルファイルA(シート名みかん) エクセルファイルB(シート名りんご) エクセルファイルC(シート名バナナ) エクセルファイルD(シート名ぶどう) エクセルファイルE(シート名いちご) があります。 雛形は同じです。すべてA列~F列までデータが入っています。 行数はファイルによって違います。 また毎日自動で上書き更新され、毎日行数が変わります。 エクセルファイルZがあります。シートが7個あります。 ・変換 ・集計 ・みかん ・りんご ・バナナ ・ぶどう ・いちご エクセルファイルZを開きます。(各シートには昨日のデータが貼り付けてあります。) マイドキュメントのデーターフォルダも開いておきます。 エクセルファイルZにおいて「マクロの記録」を起動。 エクセルファイルZの 【みかん】~【いちご】までの5シートを全データDELETEします。 開いてあるフォルダ「データー」の中からエクセルファイルAを開きます。 (タスクバーにいます) ファイルAのシート【みかん】の全データ選択して エクセルファイルZの【みかん】というシートのA1セルにカーソルを あわせて貼り付けします。 開いてあるフォルダ「データー」の中からエクセルファイルBを開きます。 (タスクバーにいます) ファイルBのシート【りんご】の全データ選択して エクセルファイルZの【りんご】というシートのA1セルにカーソルを あわせて貼り付けします。 これと同じ操作を【バナナ】【ぶどう】【いちご】も行います。 エクセルファイルZにおいて「マクロの記録」を終了させます。 マクロができあがりました。 ファイルZを上書き保存して終了。再立ち上げで記録したマクロを実行。 エラーにはなりませんが、ファイルZの5種類各シートに ファイルA~Eのデータが貼りつきません。 何か無理な事をしているのでしょうか? もしかしてシート名が同じだと駄目?とためしにファイルZのシート名【みかん】~【いちご】を 【みかんZ】~【いちごZ】に変更してマクロを再記録しても 駄目でした。 よろしくお願いします。

  • EXCEL VBAを使ってマクロを組んだのですが、消えてしまいます。

    VBAを使ってマクロをEXCELに組んだのですが、貼り付け先のデータをダブルクリックするとデータが消えてしまいます。 組んでいるマクロは (前提) ファイルA・・コピー元データ ファイルB・・貼り付け先データ (内容) Aファイルでマクロを実行すると、Aファイルの内容がBファイルにコピーされるというものです。 Aファイルの元データは数式のため、Aファイル内でいったん値として貼り付けてから再度コピーして、Bファイルに貼りつけています。 Aファイルは自分で作成したものですが、Bファイルは他社作成のため、もろもろ変更ができません。 Aファイルにもロックが必要のため、保護をかけています。(ロック、表示ともに) マクロ実行後、Bファイルの貼りつけされたデータをダブルクリックすると、ダブルクリックしたセル内容が消えてしまいます。 まったく原因がわからず困っています。すみませんがどなたかわかるかたお願いいたします。

  • エクセルVBA(マクロ内でマクロを選択する)

    いつも有難うございます。 表題の件でご教示ください。 エクセルVBAのマクロ内でマクロを選択して実行したいと考えてます。 調べたのですが、単にマクロ内で他のマクロを呼び出す方法はありましたが 「選択して」という点が見つからず、恐縮ですがお願いいたします。 具体的には以下のような内容です。 (1)基本となるデータが1~100まであるとする (2)サブルーチンとしてのマクロ群A~Gがあるとする (3)データ1に対してはマクロAを行い、データ2、3に対してはマクロBを行い・・・という形でそれぞれ対応させるマクロが違う (4)データ50~70は同じマクロを実行したい (5)このときに実行するマクロで ・対象のデータを選択させる(入力BOXで開始番号(50)と終了番号(70)を指定する) ・A~Gのどのマクロを実行させるか選択させる ・データ50~70に対して、選択したA~Gのいずれかのマクロを順次実行していく というものを作りたいと考えています。 全体的なイメージは完成しているのですが、マクロ群を選択させる方法がわかりません。 (マクロ群A~Gはすでに作って使用です) 何卒、宜しくお願いいたします。

  • Excel VBAのマクロの記録について

    Excelマクロの初心者です。 マクロの記録のやり方の質問です。 今あるフォルダの中にファイルA、Bがある状態でファイルAのマクロの記録で、ファイルBのコピーを同じフォルダーに作る操作を記録しようとしましたが、うまく記録できません。 何かやり方が間違っているのでしょうか、ファイルAの中でのセルの色塗り等のマクロの記録はうまくできます。 マクロの記録ができない操作があるのでしょうか、あるとすれば記録できないものはどのような操作でしょうか?教えて下さい。

  • VBAで、excelファイルのマクロを実行したら、特定のフォルダのファ

    VBAで、excelファイルのマクロを実行したら、特定のフォルダのファイルの特定セルを確認し、その結果を反映する、というマクロを組みたいと思っています。 具体的には下記のマクロを組みたいと思っています。 ------------------------------------------------------ (1)マクロを組むファイル【worksheet】にてマクロを実行する (2)特定のフォルダのファイルのA1、A2、A3、A4の全てに”OK”という文字が入っているかを確認 ・C:\excel\1番\kakunin_1.xls にあるkakunin.xlsの、A1セルに”OK”という文字が入っていたら次はA2、A3、A4の順序で 確認する。 ・このとき、A1にOKと入っていて、A2には入っていなかった場合は、A2という文字を、【worksheet】のB1セルに結果を表示する ようにする。 ・特定のフォルダの構成は下記 C:\excel\1番\kakunin_1.xls |--\2番\kakunin_2.xls |--\3番\kakunin_3.xls ・上記の処理を、1番フォルダの【kakunin_1.xls】で実行し、【worksheet】のB1セルに結果を表示。 2番フォルダの【kakunin_2.xls】で実行し、【worksheet】のB2セルに結果を表示。 3番フォルダの【kakunin_3.xls】で実行し、【worksheet】のB3セルに結果を表示。 ------------------------------------------------------ VBAどころかプログラミング自体が初めてなので、例えば引数が何かも一々考えて1文ずつ読み込まなければいけない状態です。。 どなたかこの無知な自分に力を貸して頂けないでしょうか?

  • VBA_マクロ内でマクロ実行

    独学でVBAをやってる初心者です。 よろしくお願いします。 EXCEL2003を使ってます。 例) <A.xlsファイル> Sub File_A () Workbooks.Open Filename:="B" Call File_B Range("A1").Select Selection.Paste End Sub <B.xlsファイル> Sub File_B () Range("A2:T5").Select Selection.Copy End Sub A.xlsファイルを開きマクロFile_Aを実行させると B.xlsファイルのマクロFile_Bを実行することができません。 どうしたらうまく実行できますか? 教えてください。

  • Excelのマクロについて

    Excelのマクロについて excel2003で,マクロの自動記録を勉強中です。 [ツール]-[マクロ]-[新しいマクロの記録]でマクロ名を入力し,(マクロの保存先を「作業中のブック」として,)[OK]をクリックすると マクロの記録が始まります。 マクロの記録終了後, [ツール]-[マクロ]-[マクロ]で「マクロ」ダイアログボックスを見ると,マクロ名が表示されます。 この場合は実行も正常にできます。 しかし, ブックを一旦保存した後,開いて,マクロを実行しようと, [ツール]-[マクロ]-[マクロ]で「マクロ」ダイアログボックスを見ると,マクロ名が(マクロ名単独ではなく)ブック名とともに表示されます。 実行するとエラーになります。 何が悪いのか分かりません。なにか基本的なミスがあるのかも知れないと考えました。 原因(ミス)に心当たりのあるかた,是非教えてください。

専門家に質問してみよう