• ベストアンサー

excelでファイル名を自動入力する方法

excelでファイル名をセルに自動入力する方法を探しています。 =MID(CELL("filename"),SEARCH("[",CELL("filename"))+1, SEARCH("]",CELL("filename"))-SEARCH("[",CELL("filename"))-5) 上記の方法で自動入力可能なのですが、あとから同時に他のファイルを開いたりすると、そのファイル名がセルに入力されてしまい、困っています。 複数ファイルを同時に開いても、当該ファイル名を入力するようにはどうしたらよいでしょうか? 【詳細】 ファイル1.xlsのセルA1に上記式をセットしてある状態でファイル1.xlsを開くと、セルA1には「ファイル1」と入力されているが、あとからファイル2.xlsを開くと、セルの内容が「ファイル2」に変わってしまう。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

ユーザー定義関数をつくったらどうでしょうか? 以下の手順をおためしください。 1.Altキー+F11キーで Visual Basic Editor画面を呼び出します。 2.画面上部のメニューバーから挿入、標準モジュールで出てきたコードウィンド(右側の白い広い部分)に以下のコードをコピペします。 '*****ここから下をコピペ***** Function myFile() myFile = ThisWorkbook.Name myFile = Left(myFile, InStrRev(myFile, ".") - 1) End Function '*****ここより上までをコピペ***** 3.Alt+F11キーでワークシートへもどります。 4.お好きなセルに、 =myFile() と入力すればBOOK名を表示するはずです。

paradii
質問者

お礼

merlionXXさん ご回答ありがとうございました。 とてもわかりやすく、感動しました! お教えいただいたやり方で、基本的にばっちりだったのですが、 実はこのファイルはコピーして複数の人で使い回す予定なのですが、 新しくコピーしていったん開いたあとで、セルを更新しないとファイル名が反映されないらしく、 ファイルを開いた時点で更新されるようにするには どうしたらいいか、 今調査中です。

その他の回答 (4)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

> 上書き保存したのですが、 上書き保存だけでは反映しません。 保存して終了後、再度開けば反映しているはずです。 閉じずに上書き保存だけでも反映させたければ保存時に再計算指示をすればいいと思います。 ThisWorkbookモジュールに Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Calculate End Sub でどうでしょう?

paradii
質問者

お礼

merlionXXさん すみません、ご返信遅くなりました。 VBAを仕込んだテンプレートをコピーして、再度開いただけではファイル名は更新されなかった(セルを更新すればOK)のですが、 おっしゃる通り、再計算指示、 ThisWorkbookモジュールに・・ を仕込んだところ、コピーしたファイルを開いただけで、ファイル名が反映されるようになりました。 いろいろとありがとうございました。 大変参考になりました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

merlionXXです。 No4で回答したコードはまさにそこを解消したものなのですが・・・。 名前を付けて保存し、開けば自動的に新しいファイル名に変わるはずですが。

paradii
質問者

お礼

merlionXXさん 私もソースをみて、そうかな?と思ったのですが、 教えていただいたソースをまるまるコピって先ほどのものに 上書き保存したのですが、 やはりいったんセルを更新しないと、 更新されないようです。 もしかして私のやり方が悪いのかもしれません^^;

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

No1で回答したコードを少し変更させてください。 Function myFile() Application.Volatile '自動再計算 myFile = ThisWorkbook.Name 'BOOK名取得 If InStr(myFile, ".") > 0 Then '拡張子がある場合 myFile = Left(myFile, InStrRev(myFile, ".") - 1) '拡張子を削除 End If End Function

paradii
質問者

お礼

merlionXXさん お返事行き違いになったようですね。 こちらもさっそく試させていただきました。 ありがとうございます。 さっきのファイルを開いた時点での自動反映は、 Workbook_Open() か、 Auto_Open() にお教えいただいた関数を組み込めばいいのかな? というかんじです。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

CELL関数のヘルプを見ると  CELL(検査の種類,対象範囲) とようになっており、「"filename":対象範囲を含むファイルの名前(絶対パス名) を返す」となっています。 対象範囲を省略しているので、自動的にアクティブシートのセルが取られているのでは? 試しに、  =CELL("filename",A1) のように範囲指定を明示してあげると、他のブックを開いても値が変わることはありませんでした。

paradii
質問者

お礼

fujillinさん ご回答ありがとうございました。 さっそく試してみたところ、おっしゃる通りで、 対象範囲を指定したことで、見事問題解消されました! 基本的な大事なところを見逃していたようですね。 どんぴしゃりなご指摘に感動です。

関連するQ&A

  • VBA(マクロ)を使わずファイル名の数字のみ抽出

    ファイル名の抽出方法は、ググったらわかりましたが、ファイル名からの数字のみ抽出する方法は可能でしょうか? =MID(CELL("filename"),SEARCH("[",CELL("filename"))+1, SEARCH("]",CELL("filename"))-SEARCH("[",CELL("filename"))-5) =MID(CELL("filename",$A$1),FIND("[",CELL("filename",$A$1))+1,FIND("]",CELL("filename",$A$1))-FIND("[",CELL("filename",$A$1))-5) 例: 123abc456.xls → 123456 sample123.xls → 123   マクロは考えていないです。よろしくお願いします。

  • 別ファイルのシート名表示

    教えてください。 シート名表示ですが、開いているファイル(製造データ1.xls)の シート名表示 =MID(CELL("filename",$A$1),FIND("]",CELL("filename",$A$1))+1,31) にて可能ですが、別ファイル(製造データ2.xls)のシート名を関数にて表示させる方法を教えてください。 製造データ1.xlsのA1セルに表示させたいのですが・・・ (製造データ2.xlsのシートは1つのみです) 製造データ1と製造データ2は同一フォルダに格納されてます。 よろしくお願いします。

  • 別のbookのシート名を自動に貼り付ける

    http://www2.odn.ne.jp/excel/waza/sheet.html#SEC8 参考にして、シート名をセルに表示させたいです。 参考book [s.xls]シート名はそれぞれa,b,c,とあるとします。 表示させたいbookは[x.xls] こちらのシート名はd,e,fとします。 x.xlsの各シートa1の欄に、s.xlsのシート名を自動で表示させたいです。 dのシートにaのシート名 eのシートにbのシート名 fのシートにcのシート名 2枚目のシートが変更できませんでした。 すべてaのシート名が表示されてしまいます。 =MID(CELL("filename",s.xls$A$1),FIND("]",CELL("filename",s.xls$A$1))+1,31) にしました。 よろしくお願いいたします。

  • =CELL("filename")で取得したファイル名をHYPERLI

    =CELL("filename")で取得したファイル名をHYPERLINK関数で使いたい。 エクセルで「目次」というファイルを作り、そこからHYPERLINK関数で別のファイルにリンクを貼りたいと思っています。 万が一ファイルの場所が移動した場合にも、リンクが切れないように、=CELL("filename")で取得したブック名をHYPERLINK関数で使ったらどうかと思うのですが、うまくできません。 考えた方法は、 (1)ファイル名(テスト1)sheet1のA1のセルに=CELL("filename")と入力したものをコピーして、ファイル名(目次)sheet1のA1にリンク貼り付けする。 (2)(1)で表示された(目次)sheet1のA1のファイル名をHYPERLINK関数の中に使って、リンクを貼れるようにする。 としたいのですがどのように書けばいいのでしょうか。 よろしくお願いいたします。

  • 【その2】エクセルのシート名をひっぱる方法ありますか?

    午前中に質問させていただき、おかげさまで解決しました。 ↓こちらが教えていただいたものです。 =MID(CELL("filename",$A$1),FIND("]",CELL("filename",$A$1))+1,31) 実は、教えていただいた関数の他に もっと簡単なものが合った気がするという 情報がありました。 興味があるので、もしご存知の方が いらっしゃいましたらご連絡下さい。 宜しくお願いします。

  • エクセル 関数の値を参照したい

    ファイル1.xls のsheet1の セルE5に =cell("filename") を格納すると セルE5 にファイル1.xls と表示されます。 ファイル2.xls のあるセルに =[ファイル1.xls sheet1]E5 を入力すると ファイル2.xls と表示されてしまいますが 値を参照して ファイル1.xls と表示させたい場合はどうしたらよいでしょうか?

  • Sheet名をセルに表示

    宜しくお願いいたします 先日、Excel自動入力で「mu2011]様から教えていただき Sheetの名前をA1セルに表示する事が出来ました(他も全て上手くいきました) そこで、勉強のつもりでExcelを立ち上げて、再び同じように =MID(CELL("filename",$A$1),FIND("]",CELL("filename",$A$1))+1,10)と入力しても「#VALLE」が表示されてエラーとなりますが何処か違うのでしょうかSheet1には名前を入れてあります ちなみに、最初に教えていただいた時にはコピペで関数を貼り付けたら上手くいきましたので前と同じ方法でページに行きコピーして 新規にExcelを立ち上げて同じようにペーストしてもエラーとなります?? 何処かExcelの設定がおかしいのでしょうか。

  • フォルダ名表示をするには?

    D:\1111\2222\3333\aaa.xls という状態の時、Excelのセル内に「2222」を表示させるにはどのようにすればよいでしょうか? 自ファイルのあるフォルダ「3333」の表示は =MID(CELL("filename"), FIND("♪",SUBSTITUTE(CELL("filename"),"\","♪",LEN(CELL("filename"))-LEN(SUBSTITUTE(CELL("filename"),"\",""))-1))+1, FIND("♪",SUBSTITUTE(CELL("filename"), "\","♪",LEN(CELL("filename"))-LEN(SUBSTITUTE(CELL("filename"),"\",""))))-FIND("♪", SUBSTITUTE(CELL("filename"),"\","♪",LEN(CELL("filename"))-LEN(SUBSTITUTE(CELL("filename"), "\",""))-1))-1) という形で出来るということは検索して出てきました。 開始位置と文字数の問題だと思いますが、どこをどう調節すれば上の階層のフォルダ名取得になるのかわかりません。 ご教授のほどお願い致します。  注:マクロを使う予定はありませんのでエクセルVBAマクロを使っての解答はお控えください。

  • エクセル関数 シート名をセルに反映させたい

    シート名をセルに反映させたいのですが,以下のようなことができるでしょうか。 =CELL("filename",A1)を使えば,シート名を反映させられるようであることは,ネットで調べて分かったのですが,たとえば,シート2を作成した時に,シート1のA2のセルのところに,自動でシート2の名前を入力できるような関数はありますか?その後,シート3を作成した時に,同様にシート1のA3のところに自動で入力したいのですが,そのようなことが可能でしょうか。 説明が下手で申し訳ないのですが…

  • ネット上Excelで、シート名をセルに表示するに

    Excel2003です。ネットワーク上に保存してあるExcelのA1セルに拡張子なしのファイル名を表示するにはどうしたらいいでしょうか? 自分のPCに保存してある場合は以下で表示出来るのですがネットワーク上に保存すると表示されなくなってしまいます。=REPLACE(LEFT(CELL("filename",$A$1),FIND(".",CELL("filename",$A$1))-1),1,FIND("[",CELL("filename",$A$1)),)

専門家に質問してみよう