• ベストアンサー

【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% (7418/18948)
回答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

  • <ACCESS VBA -> EXCEL>getObjectしたEXCELファイルのシートを指定したい

    ACCESSのVBAマクロでEXCELファイルを指定してデータを取得しようとしています。 GetObject("C:\ファイル名.xls", "Excel.Sheet") でEXCELファイルを取得するまでは良いのですが、そのファイルのシートを指定する方法がわかりません。 基本かもしれませんが、ご教示をお願いします。

  • ファイル名を指定しないVBAは?

    既に開いているエクセルファイル(元ファイル)があり、 そこに、別のエクセルファイル(後ファイル)を開いてその情報を 「元ファイル」に取り込んだら、自動で「後ファイル」が閉じるように VBAマクロを組みました。 が、「後ファイル」は常に同じなので、ファイル名を指定して 開閉するようにしていますが、 「元ファイル」は、名前が常に違います。 ファイル名を指定せず、先に開いているファイルをActiveにするには どうしたらいいですか? 今は、新しいファイルを作成して、エラーが起こったら Windows("○○○.xls").Activate ○○○の部分に新しいファイル名を入れています。 よろしくお願いします。

  • マクロ VBA ファイル名を連番でつけたいのですが

    マクロ初心者なので教えて頂けるとうれしいです。 保存先フォルダにファイル名を自動で名前をつけて保存させるところまでできたのですが、 保存先フォルダに同名フォルダがある場合に、 もともと指定しているファイル名のお尻に連番をつけていくようにしたいのですが・・・ 例) 選択したシートをコピーして、 「A1+B1+見積書.xls」 という名前をつけて毎回保存していくのですが、 同名のファイルがある場合、 「A1+B1+見積書+1.xls」 「A1+B1+見積書+2.xls」 「A1+B1+見積書+3.xls」    …というふうにお尻に自動で連番をつけて 保存できるようにしたいのです。 宜しくお願い致します!

  • Excel2007のファイル名をxlsxからxlsに変更しても開けられません

    こんにちは。 自分のEXCELが2000なので、メール添付された2007のExcel fileの名前をxlsに変更しました。 あけようとすると 「ファイル形式が正しくありません」というメッセージがでてシートが表示されません。 何か良い方法はないでしょうか?よろしくお願いします。

  • VBA EXCELファイル選択⇒指定セルコピー

    マクロでこんなことできませんか? 完全でなくても構いませんので、できる範囲で教えてください。 宜しくお願いします。 マクロを起動すると、ファイルを選択するウインドウが開きます。ここで、あるExcelファイル(仮にC:\MYDOCUMENT\EXCEL\AAAA.xls)を選択すると、このファイルのセルB2,B3,B4,B5が、マクロを実行しているファイルの同じセルにコピーされ、更にセルB1に、AAAA.xlsの.xlsを抜いた数値のAAAAが入力されます。 AAAA.xlsは一度オープンになってもかまいませんが、自動的に閉じればベターです。

  • 【Excel VBA】ファイル名の指定

    Excel2003を使用しています。 C:\Book1 をコピーして貼り付ける場所を A: にするときに、貼り付け先のBook名を変更したく、そのBook名はその都度指定したいのですが、例えば、InputBox に入力した名前で貼り付ける等できるでしょうか? よろしくお願いします。

  • エクセルをファイル名を指定して実行

    初めて質問します。よろしくお願いいたします。 早速ですが、Excelで、毎回決まったシートを開きたいと思っています。 そこで、「ファイル名を指定して実行」で、ExcelのBook(a)のSheet(b)を指定して開くことは可能でしょうか? または、Excel自体で、マクロを使わずにそのような設定する方法はありませんでしょうか? ちなみに不特定多数の人間が保存をするので、そのシートで保存するという方法は使えません。 初歩的質問で恐縮ですが、どなたかアドバイスお願いいたします。

  • エクセルでのファイル名の一括変更 マクロ

    皆様お世話になります。 あるフォルダーの下位にユニークに名前の付けられた900個ほどのフォルダーがあり それれぞれの、フォルダーの中にA,Bというフォルダーがあります。 その中にa.xls,b.xlsなどというファイルが存在しています。 そのa.xlsやb,xlsの名称を変換したいのですが数量が非常に多いためマクロか、何かで変更する方法がありますか? ファイル名の条件として 開いたエクセルのC,4とH,4を合体させたファイル名にすると、非常にありがたいのですが。 よろしくお願いします。

  • フォルダを指定し、複数のエクセルファイルの情報を別ファイルに保存したい。

    エクセルのマクロで以下の実装を行いたいと思っています。 -------------------------------------------------------------- 1.あるフォルダを指定 2.そのフォルダの中に入っているエクセルファイルの特定列複数行(行数不明、データがなくなるまで)の情報を抜き出す 3.2で抜き出した情報を別ファイル(テキスト形式)に保存 -------------------------------------------------------------- ・2で指定するフォルダには複数ファイルがあります ・3で保存するファイル名は2で開いたファイル名と同じ名称にしたい(拡張子は別) フォルダの状態は以下のようになっています。 editor.xls ←マクロを組みたいエクセルファイル L folderA    L A1.xls    L A2.xls    L A3.xls      : L folderB    L B1.xls    L B2.xls    L B3.xls      : L forlerTextfile    L A1.txt ←作りたいファイル    L A2.txt    〃    L A3.txt    L B1.txt    L B2.txt    L B3.txt      : 分かりづらくて申し訳ありませんが、どなたかご教授いただけないでしょうか。 宜しくお願いいたします。

  • 該当するファイル名から抽出したい

    Excel2000&WindowsXPを使用しているものです。 以下のExcelファイルがあります。 Excel1 ファイル名:total.xls Excel2 ファイル名:みかん月間.xls Excel3 ファイル名:りんご月間.xls ”total.xls”というExcelファイルを開きます。この中には以下の内容があります。    A   B 1 りんご 2 みかん 3 その他 また、”みかん月間.xls”と”りんご月間.xls”には以下の内容があります(B列は変動)。 <みかん>     <りんご>    A   B    A   B 1 11/01 200   1 11/01 10 2 11/02 1650   2 11/02 2   ・          ・ 30 11/30 450  30 11/30 4   合 計 *****  合 計 ***** この時点でExcel1~3が開いているものとして、”みかん月間.xls”と”りんご月間.xls”のシート内にある【合計】セル右側の売上合計のみを”total.xls”のA列に該当する項目の右側に転記することは出来ますでしょうか?。なお、各月間ファイルは日本語(例ではくだもの名です。月間は無くても大丈夫です)・月間ファイルは複数あり、追加もしたいです。 よろしくお願いいたします。

専門家に質問してみよう