
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」に変わってしまう。
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名を表示するはずです。
merlionXXさん
ご回答ありがとうございました。
とてもわかりやすく、感動しました!
お教えいただいたやり方で、基本的にばっちりだったのですが、
実はこのファイルはコピーして複数の人で使い回す予定なのですが、
新しくコピーしていったん開いたあとで、セルを更新しないとファイル名が反映されないらしく、
ファイルを開いた時点で更新されるようにするには
どうしたらいいか、
今調査中です。
No.5
- 回答日時:
> 上書き保存したのですが、
上書き保存だけでは反映しません。
保存して終了後、再度開けば反映しているはずです。
閉じずに上書き保存だけでも反映させたければ保存時に再計算指示をすればいいと思います。
ThisWorkbookモジュールに
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Calculate
End Sub
でどうでしょう?
merlionXXさん
すみません、ご返信遅くなりました。
VBAを仕込んだテンプレートをコピーして、再度開いただけではファイル名は更新されなかった(セルを更新すればOK)のですが、
おっしゃる通り、再計算指示、
ThisWorkbookモジュールに・・
を仕込んだところ、コピーしたファイルを開いただけで、ファイル名が反映されるようになりました。
いろいろとありがとうございました。
大変参考になりました。
No.4
- 回答日時:
merlionXXです。
No4で回答したコードはまさにそこを解消したものなのですが・・・。
名前を付けて保存し、開けば自動的に新しいファイル名に変わるはずですが。
merlionXXさん
私もソースをみて、そうかな?と思ったのですが、
教えていただいたソースをまるまるコピって先ほどのものに
上書き保存したのですが、
やはりいったんセルを更新しないと、
更新されないようです。
もしかして私のやり方が悪いのかもしれません^^;
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
merlionXXさん
お返事行き違いになったようですね。
こちらもさっそく試させていただきました。
ありがとうございます。
さっきのファイルを開いた時点での自動反映は、
Workbook_Open()
か、
Auto_Open()
にお教えいただいた関数を組み込めばいいのかな?
というかんじです。
No.2
- 回答日時:
CELL関数のヘルプを見ると
CELL(検査の種類,対象範囲) とようになっており、「"filename":対象範囲を含むファイルの名前(絶対パス名) を返す」となっています。
対象範囲を省略しているので、自動的にアクティブシートのセルが取られているのでは?
試しに、
=CELL("filename",A1)
のように範囲指定を明示してあげると、他のブックを開いても値が変わることはありませんでした。
fujillinさん
ご回答ありがとうございました。
さっそく試してみたところ、おっしゃる通りで、
対象範囲を指定したことで、見事問題解消されました!
基本的な大事なところを見逃していたようですね。
どんぴしゃりなご指摘に感動です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで同じセルに箇条書きをし...
-
A1セルに入力したら、入力時間...
-
エクセルで既に入力してある文...
-
入力したところまでを自動的に...
-
Excel マクロ モジュラス43 vba
-
空白でないセルの値を返す方法...
-
Excelでセルに入力されたカラー...
-
IF関数で0より大きい数値が入力...
-
エクセルで一定の数値を超えた...
-
エクセルで時間の判定をしてい...
-
エクセル セルに文字を入力した...
-
エクセルで入力した数字を倍に...
-
excel 関数にて文字を0として認...
-
エクセルの数式がかぶって、選...
-
Excel:文字と数字の組合せ、次...
-
エクセルで入力時間を更新させ...
-
エクセル:コメントのようなも...
-
参照先セルに値が入っていない...
-
Wordのセル内にある文字の上部...
-
Excelでロト6の数字を決めたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
A1セルに入力したら、入力時間...
-
Excelで同じセルに箇条書きをし...
-
空白でないセルの値を返す方法...
-
エクセルで既に入力してある文...
-
IF関数で0より大きい数値が入力...
-
入力したところまでを自動的に...
-
Excelでセルに入力されたカラー...
-
【Excel】セル内の時間帯が特定...
-
【エクセル】指定したセルに入...
-
Excel:文字と数字の組合せ、次...
-
エクセルで、特定のセルの内容...
-
参照先セルに値が入っていない...
-
Excel 大小比較演算子による「...
-
エクセル セルに文字を入力した...
-
yyyy/mm/ddからyyyy/mmへの変換
-
excel 関数にて文字を0として認...
-
エクセルで時間の判定をしてい...
-
エクセルの数式がかぶって、選...
-
エクセル:コメントのようなも...
-
excel入力セルをクリックしただ...
おすすめ情報