• ベストアンサー

【Excel VBA】ファイル名が一定でないファイルの指定方法

Excel2003を使用しています。 メールに添付されてくるExcelファイル(A)のデータを印刷するために、レイアウト等を整えたファイル(B)に値のみコピーというマクロをファイル(B)に作成したいと思っています。 この作業は、ファイル(A)とファイル(B)を並べて作業しますが、毎回メールに添付されてくるファイル(A)の名前が一定ではなく、ファイル名に日付が入っています。『2.07○○○.xls』のような感じですので、ファイル(B)にコードを記述するときに、Excelで開いているもう1つのファイルといったような指定の仕方は可能でしょうか? やはり、きちんと決まったファイル名でないと不可能であれば、添付されてきたファイルを、ある名前で一旦どこかに保存して…と考えていますが、もし、上記のような指定方法ができるのであれば、教えていただきたいと思い、質問させていただきました。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

こんにちは。 オープンしているブックが  ファイル(A)  ファイル(B) の2つなら、例えば Workbooks(Index) でとるとか。 Sub SampleProc()   Dim wb As Workbook   Dim i As Long      If Workbooks.Count <> 2 Then Exit Sub   For i = 1 To 2     Set wb = Workbooks(i)     If Not wb Is ThisWorkbook Then       Exit For     End If   Next   MsgBox wb.Name End Sub

rx-z5815
質問者

お礼

KenKen_SP さん、こんにちは。 いつもお世話になっております。 いろんな方法があるのですね。勉強になります。 記載していただいたサンプルコードを試してみました。 …が、何も起こりませんでした(^_^;) てっきり、ThisWorkbook ではないファイル名が表示されると思っていたのですが、なぜなんでしょう??

その他の回答 (7)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.8

> メールの添付ファイル欄から直接開いた状態では、参照できていない > のでしょうか…? 当方では問題なく、ThisWorkbook 以外のブック名が表示されますが... 調べるなら、 Dim wb As Workbook For Each wb in Workbooks   MsgBox wb.Name Next などとして、Workbooks コレクションを回して目的のブック名が表示される かチェックして下さい。 これで表示されないのであれば、別プロセスの Excel.exe 上のブックである 可能性が高いので、開き方についても再検討が必要です。 ちなみに、*.xls ファイルを DBL クリックして開いた場合、都度新規 Excel が立ち上がるような設定にしてます?  # たまに居ますので。。こういう設定にしている人

rx-z5815
質問者

お礼

KenKen_SP さん、こんにちは。 お礼が遅くなり申し訳ありません。 アドバイスいただいたように、Workbooks コレクションを回してチェックしたところ、目的のブック名は表示されたのですが、『PERSONAL.XLS』も表示されました…。 ということは、前回と同じ状況でチェックしましたので、ファイル(A)とファイル(B)の2つしか開いていないと思っていたのは、間違いだったということですよね?(^_^;) PERSONAL.XLS は、画面上には出ていないのですが。。。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.7

#4 お礼欄について 前提として、ファイル(A)、ファイル(B)の2つのみを開いた状態で コードを実行するものとしています。したがって、 > If Workbooks.Count <> 2 Then Exit Sub ブックが1つ、あるいは3つ以上開いた状態ではここで終了します。 また、 > Set wb = Workbooks(i) Workbooks(Index) で参照できるのは、同一プロセスにあるブックのみ です。つまり、VBA を実行している Excel.exe とは別の Excel.exe で 開かれているブックは参照できません。 上記以外に、 > …が、何も起こりませんでした(^_^;) という可能性は考えにくいのですが....

rx-z5815
質問者

お礼

KenKen_SP さん、こんにちは。 再度の回答ありがとうございます。 >前提として、ファイル(A)、ファイル(B)の2つのみを開いた状態で コードを実行するものとしています。 これは、コードの内容でわかりましたので、確認しました。 2つのみ開いた状態でマクロを実行しました。 >Workbooks(Index) で参照できるのは、同一プロセスにあるブックのみ です。つまり、VBA を実行している Excel.exe とは別の Excel.exe で 開かれているブックは参照できません。 ファイル(A)のほうは、メールに添付されてきたExcelファイルなのですが、メールの添付ファイル欄から直接開いた状態では、参照できていないのでしょうか…? 上記のアドバイスをいただいて、このへんに問題があったのかなと思ったのですが、いかがでしょうか?

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.6

vbのヘルプで Dir を参照してみてください。 ' 指定した拡張子を持つファイル名を返します。複数の *.INI ファイル ' が存在すると、最初に見つかったファイル名を返します。 MyFile = Dir("C:\WINDOWS\*.INI") ' 引数を指定せずに再度 Dir 関数を呼び出すと、 ' 同じフォルダにある次の *.INIファイルを返します。 MyFile = Dir 基本的には上記です。 MyFile = Dir("D:\MyData\207*.xls") MyFile = Dir("D:\MyData\207????.xls") というような。 こういうことではなかったかな。

rx-z5815
質問者

お礼

再度の回答ありがとうございます。 ワイルドカードで指定するほうのファイルがメールに添付されているファイルなので、その添付ファイルが保存されているフォルダを指定してやれば、教えていただいた方法でできるのでしょうね。 丁寧に説明していただいて助かりました。 ありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.5

ファイル(B)のどこかのセルにファイル(A)のブック名を入力して マクロで使えばいいだけでは? 日付が昨日の日付限定なら BOOKA = Format(Date-1,"m.dd") & "FILE_A.XLS" とする手もありますし

rx-z5815
質問者

お礼

回答ありがとうございます。 >ファイル(B)のどこかのセルにファイル(A)のブック名を入力して 最終手段として、↑の方法で…と思っていました。 日付も規則性はないのですが、昨日の日付など限定されるようならば、教えていただいたような方法もあるのですね。勉強になりました。

  • stingy
  • ベストアンサー率37% (144/379)
回答No.3

マクロの起動方法によりますが、 ActiveWorkbookとThisWorkbookを利用してみては? (A)をアクティブにし、(B)のマクロを起動する。 キーボードのショートカットからならできるはずです。

rx-z5815
質問者

お礼

回答ありがとうございます。 >ActiveWorkbookとThisWorkbookを利用してみては? >(A)をアクティブにし、(B)のマクロを起動する。 なるほど、ファイル(A)から(B)のマクロを実行するわけですね。 この方法で、コードを書いてみたところ、うまくいきました。 ありがとうございました。

  • yossy0426
  • ベストアンサー率24% (32/130)
回答No.2

どうもです。 保存先フォルダーにファイルAとBしかなければ ファイル名を変数にして、開いているエクセルのファイルのファイル名を所得してIF文でAならマクロ実行、Bならスルー って感じでは? あまりスマートではありませんが・・・・・

rx-z5815
質問者

お礼

回答ありがとうございます。 >保存先フォルダーにファイルAとBしかなければ 残念ながら、ファイル(B)のほうには、他にもファイルがありまして…。他の方の回答も参考にさせていただきながら、もう少し考えてみます。 ありがとうございました。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

ワイルドカードで指定するのはだめですか。 『*』ですべてのファイル、『*.xls』ですべての.xlsファイル、『2.07???.xls』で2.07の後3文字の.xlsファイル、『2.07*.xls』で2.07の後任意の文字数の.xlsファイル が指定できるとおもいますが・・・。

rx-z5815
質問者

お礼

回答ありがとうございます。 ワイルドカードで指定する場合は、ファイル(A)が保存されているフォルダの指定等も必要になってくるのでしょうか? メールに添付されて送られてくるファイル名は、ある程度の規則性がありそうなので、教えていただいた方法でも試してみたいと思い、ヘルプや参考書を見てみたものの、実際にはどのように記述すればいいのかイマイチ理解できなくて…。

関連するQ&A

専門家に質問してみよう