• 締切済み

計算式内の参照先ファイルの変更

お世話になります。 現在、仕事で使うPCに、自動的に [All20120105.xls] という名前のエクセルファイルが作られるように設定されています。 (20120105←この部分はエクセルファイル作成日) このエクセルファイルを使って在庫管理をしている者です。 在庫管理を容易にするために、 別のエクセルファイル([在庫管理.xls])を自分で作っておき、 [All~]内のデータを参照しているのですが、 ='\\○○○\●●\[All20120105.xls]◎◎'!B2 このような計算式を[在庫管理.xls]に作ってあります。 お聞きしたいことは、 計算式内にある参照先ファイル名を当日のファイル名に置換する関数があるのかどうかです。 (2012/1/6に[在庫管理.xls]を開くと、計算式内の[All20120105.xls]◎◎の部分が [All20120106.xls]◎◎に変更されるように。) 置換機能を用いて、計算式内の文字列も置換出来るのは知っており、 今回の問題も自分一人がこのエクセルを使うのであれば解決できます。 しかし、どうしても一手間かかってしまうので、 自分以外の人が、そのエクセルを使うときに戸惑ってしまいます。 SUBSTITUTE関数では計算式内の文字列は置換できないのか、出来なかったように思います。 マクロに関してはほとんど知識ありません。 ご教示のほどよろしくお願い致します。

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.8

アナタのパソコンのデスクトップのパスが判りませんので,試験用にCドライブの直下にtestフォルダを作成してデータをコピーしていれておき, Sub Auto_Open()  Dim a As Variant  Dim i As Long  a = ActiveWorkbook.LinkSources(xlExcelLinks)  For i = 1 To UBound(a)  If a(i) Like "*All*.xls" Then   ActiveWorkbook.ChangeLink Name:=a(i), newname:="C:\test\ALL" & Format(Date, "yyyymmdd") & ".xls", Type:=xlLinkTypeExcelLinks   Exit Sub  End If  Next i End Sub のようにマクロを修正して実施してみます。 これでOKならネットワーク越しのアクセスに障害がある事が判りますし,これもダメならアナタのエクセルの設定の問題と思われます。 また,上手く行かないときは回答を貰ってアナタが「実際に動かしたそのマクロ」を,キチンと情報として返してください。 併せてエクセルを起動してから一連の手順の中で#REFの結果が現れるまでに,「どんなダイアログが実は出ていました」とか「どんな警告が現れるのでどうしています」みたいな具体的な目に見えるエクセルの様子を,漏れなくしっかり情報提供してください。

  • mar00
  • ベストアンサー率36% (158/430)
回答No.7

>オプションをクリックして有効に変えてからいじってますが、 これも関係あるのでしょうか。 2007を使った事がないので自信はないのですが、調べた限りでは オプションをクリックして有効にすればリンクは更新されるようですし 関係ないとは思うのですが。 確率的には低いと思いますが http://www.excel-jiten-rbn.net/formula-rbn/update_link_sink.html の一番下の注の部分を試してみてはどうでしょうか。

hakuju
質問者

お礼

ですよね。そう思い特にいじってなかったのですが… 今やってみましたが、残念ながら結果は同じでした。 ありがとうございます。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.6

Allの件はすみませんでした。 回答したマクロを動かして,仮に計算結果が#REFになっていたとしても,セルの数式自体は間違い無く正常に書き換わっている事をまず確認してください。 手元では回答したマクロを使って,All年月日.xlsを開いておかなくても,勿論ネットワーク越しでも,リンクが正常に付け変わる(#REFにはならない)事を確認しています。 また他の方から寄せられた置換を使ったマクロのアプローチでも,同様に「開いてからでないと出来ない」現象が起きているという事は,エクセルの問題と言うよりもアナタのパソコンがファイルの保存先に正しく接続できていない障害があるのかもしれません。 「¥¥コンピュータ名」の部分が問題かも知れません。 ネットワークドライブで指定していた場合は,いちどネットワークドライブを解除し,マイネットワークから目的のコンピュータにつないでリンク元を参照する式に書き直し,それに合わせてマクロを修正してみてください。 そもそも「手動操作で置換すれば出来る事は知っています」という元のご相談のお話でしたが,「目的のブックを閉じたまま実際に手動操作で置換操作を行い,それで正常にリンクが付け変わった」かどうかは確認をされたのでしょうか? 手動操作で正常動作を確認できたのでしたら,それを新しいマクロの記録にとって工夫して作成してみた方が簡単に結果を出せるかも?しれません。

hakuju
質問者

お礼

詳しく有難うございます。

hakuju
質問者

補足

>回答したマクロを動かして,仮に計算結果が#REFになっていたとしても,セルの数式自体は間違い無く正常に書き換わっている事をまず確認してください。 正常に書き換わってます。 >ネットワークドライブで指定していた場合は,いちどネットワークドライブを解除し,マイネットワークから目的のコンピュータにつないでリンク元を参照する式に書き直し,それに合わせてマクロを修正してみてください。 この部分が私の知識では理解できませんでしたが、 現在使用しているPCは個人のPCではなく会社のPCですので、 ネットワークドライブ(?)で指定しているのかもしれません。 マイネットワークを開くとローカルネットワークのところに、 店舗内の別パソコンとの共有フォルダ(?)と 他店舗のパソコンとの共有フォルダ(?)があり、 店舗内共有部分に在庫管理エクセルなどのフォルダを作ってました。 一応デスクトップにフォルダを移動させて、修正しましたが、結果は同じです。 >ネットワークドライブを解除 これができるのかどうか…。会社からいろいろ制限かかってるかもしれません。 >「目的のブックを閉じたまま実際に手動操作で置換操作を行い,それで正常にリンクが付け変わった」かどうか ブックを閉じたままではできませんでした。 無意識に[All~]のbookをひらいた状態でCtrl+hで置換作業をしていたみたいです。

  • mar00
  • ベストアンサー率36% (158/430)
回答No.5

ANo.4です。 >ただやはりリンク先bookは開いておく必要があるみたいですね。 当方Excel2003を使用していますが、all○○.xlsと同じフォルダから 在庫管理.xlsを開くだけでできる事を確認しています。 オプションの設定によるものだと思うのですが。 違っていたら、すいません。

hakuju
質問者

お礼

ありがとうございました。

hakuju
質問者

補足

当方Excel2007です。 お二方の意見を聞いているとどうもそのような感じみたいですが、 オプションのどの設定をいじったらいいのかわかりません。 在庫管理.xlsmを開くことで、 セキュリティの警告が出て「リンクの自動更新が無効にされました」 と表示されます。 これはマクロを組む前から毎回表示されており、(VLOOKUPで他のbookとリンクしています) オプションをクリックして有効に変えてからいじってますが、 これも関係あるのでしょうか。

  • mar00
  • ベストアンサー率36% (158/430)
回答No.4

'リンクしているブックが1つという前提ですが Sub AUTO_OPEN() Dim LinkFLName As String LinkFLName = "all" & Format(Date, "yyyymmdd") & ".xls" Cells.Replace What:="all*.xls", Replacement:=LinkFLName, _ LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _ False, ReplaceFormat:=False End Sub 'リンクしているall○○.xlsという所をすべて置換えします。

hakuju
質問者

お礼

ありがとうございます。 リンクしている[All~]がついてるbookはひとつだけです。 コンピュータ名が不要な分、こちらの方が汎用性高いみたいですね。 ただやはりリンク先bookは開いておく必要があるみたいですね。 開く順番だけ指示すればよくなったので、この方法でいこうかと思います。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

閉じたブックに対する参照を数式で可変にする方法はありません。(実際にやってみると判りますが,INDIRECT関数を使ってもできません) 手を使わない前提で考えるなら,マクロに頼るしかありません。 手順: ブックを開く ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける Sub Auto_Open()  Dim a As Variant  Dim i As Long  a = ActiveWorkbook.LinkSources(xlExcelLinks)  For i = 1 To UBound(a)  If a(i) Like "*ALL*.xls" Then   ActiveWorkbook.ChangeLink Name:=a(i), newname:="\\コンピュータ名\フォルダ名\ALL" & Format(Date, "yyyymmdd") & ".xls", Type:=xlLinkTypeExcelLinks   Exit Sub  End If  Next i End Sub 「\\コンピュータ名\フォルダ名\」の部分を具体的な正しい内容に書き換え,ファイルメニューで終了してエクセルに戻る ブックを保存し,閉じて開き直す。 マクロが自動でリンク元を書き換えてくれる。 #具体的なマクロの書きぶり,新しいマクロの記録で「編集メニューからリンクの編集で新しい参照元にリンクを付け替える」をマクロに録って調べてみると,参考にできます #別のアプローチ 参照元のブック名が毎回「違う」から問題になります。 >仕事で使うPCに、自動的に >[All20120105.xls] >という名前のエクセルファイルが作られるように設定されています こちらに仕込みを入れて,自動的にAll20120105.xlsというブックと「同時に同じ内容で」例えばALL.xlsというブックを(上書きで)保存するように仕込んでおけば,作業中のブックは常に「ALL.xls」を参照していればよいだけのお話になります。

hakuju
質問者

お礼

詳しくありがとうございます。 指示通りコピーペーストしてマクロを組んでみたのですが、 うまいこと今日の日付に変わってくれません。 在庫管理のエクセルを作成した日付のまま表示されてしまいます。 もちろんマクロ有効エクセルブックで登録しています。 >「\\コンピュータ名\フォルダ名\」の部分を具体的な正しい内容に書き換え フォルダ名に日本語が入っていたのでそれがいけないのかと思い、別フォルダを作成。 アルファベットのみのフォルダに変更しましたが、ダメでした。 >ActiveWorkbook.ChangeLink Name:=a(i), newname:="\\コンピュータ名\フォルダ名\ALL" & >Format(Date, "yyyymmdd") & ".xls", Type:=xlLinkTypeExcelLinks コピーペーストするとバックスラッシュが¥(半角)になりますが、 それは問題ないですよね? >#別のアプローチ こちらにすごく惹かれましたが、 (たぶん)保護されているアプリケーションを起動することで 自動生成されるようになってるので、仕込みをいれることは難しいですよね…??

hakuju
質問者

補足

1日経って、気付いたことがあり、入力を変えたところいけました♪ excellのファイル名がAll~だったのに対し、 ご教示頂いたのがALL~(すべて大文字)だったためうまくいってなかったようです。 ただ、やはりAll~ファイルを開かないと連動してくれないようで#REF!が表示されてしまいます。 やはりbookを開かずに…というのは難しいですかねぇ。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

本日よりも1日前のファイルでしたら次のような式になりますね。 =INDIRECT("\\○○○\●●\[All"&TEXT(TODAY()-1,"yyyymmdd")&".xls]◎◎!B"&ROW(B2))

hakuju
質問者

お礼

ありがとうございます。 基本的には当日の作業なので大丈夫です。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

例えば ='\\○○○\●●\[All20120105.xls]◎◎'!B2 上の式を次のように変更します。 =INDIRECT("\\○○○\●●\[All"&TEXT(TODAY(),"yyyymmdd")&".xls]◎◎!B"&ROW(B2)) これで本日の日付のファイルのデータが表示されます。

hakuju
質問者

お礼

No.3様が仰っているように、bookを開いている状態であれば、この式で大丈夫なようでしたが、 bookが閉じている状態では出来ないみたいでした。。 出来れば参照先bookは開かずに作業がしたいので…。 回答ありがとうございました。

関連するQ&A

  • EXCELでの関数の一部を参照にする方法

    いつもお世話になっております。 早速ですが質問させていただきます。 今回直面している問題なのですが 関数の一部を参照にしたいということです。 例を出しますと A1セルに ='[File_****_東京.xls]1'!$B2 というようにしておいて、この参照関数?内の『****』を 別シートに入力してある数値を参照したいというものです。 『****』の部分には日付がはいります。 このファイルを複数の人間が扱うことを想定しておりまして 出来るだけ関数の変更を少なくしたいわけです。 SUBSTITUTE関数を試したのですがやはり文字列だけの変更しか出来なく セルには関数が文字列として表示されてしまいます。 わかる方、いらっしゃいましたらご教授宜しくお願いします。

  • エクセルの関数で、セルに書いたファイル名を参照

    エクセルの関数で、セルに書いたファイル名を参照する方法が知りたいです。 エクセル関数初心者レベルです。 別のファイル(開いた状態)に欲しいデータがあって、そのデータをexcel関数(できればOFFSET関数等)を使って他のファイルで参照します。 その際、その関数に記載されるファイル名を別のセルに記入して、それを参照させるようにしたいのですが、どうすればよいのでしょう。 たとえば、afile.xlsというファイルのbsheetというシートのA1セルに欲しいデータ(数字または文字)があるとします。 afile.xlsを開いた状態で、別のファイル(new.xlsとします)のセルに、"="で参照させると =[afile.xls]bsheet!$A$1 という関数が入り、データも表示されています。 ここで、たとえばnew.xls上の B2セルに " afile.xls " とベタ打ちして、 上掲の=[afile.xls]bsheet!$A$1の [afile.xls] のところをB2セルを参照させるようにしたいです。単純にB2と打ち変えてみたりもしたのですが、うまくいかないようで。 どなたか教えて頂けるとたすかります。よろしくお願いいたします。

  • Excelで参照先のファイル名を変更しましたが・・・

    Excel2000を使用しています。 あるExcelのデータは、別のExcelのデータを参照しに行っている のですが、その参照先のファイル名を管理上の都合で変更しました。 その後、参照する関数も、全て新しいファイル名に直したのですが、 そのExcelを開くとき、「ブックにはほかのファイルへの自動リンク が設定されています~」で「はい」を選ぶと、ファイルを参照する ウインドウが表示され、そこには以前のファイル名がデフォルト表示 されています。 これはどうすれば直るのでしょうか?

  • 参照文字列から検索文字列を置きの件

    >SUBSTITUTE(SUBSTITUTE(文字列,検索文字1,置換文字1),検索文字2,置換文字2)  上記の関数は8桁以上は出来ません、他の方法の関数があれば、  よろしくお願いします。(13桁)  尚、マクロ以外でできますか。  例、 A-福岡      B-佐賀

  • 文字列の置換

    文字列を下記のように置換したいのですが ABC123 → AB123D (上記で固定でなく123の数字は変わっていきます) SUBSTITUTEでABCをABには置換できるのですが 数字の後にCをDの位置に移動させる なにか計算式や関数などありますか? これができるならば さらにネストすることはできますか? (上記のような変化をするイレギュラーの置換は式の中で1つだけです) =SUBSTITUTE(SUBSTITUTE・・・・ よろしくおねがいします。 エクセル2000でもできるやり方を希望します。

  • エクセル関数>参照ファイル名をセルから呼び出す

    別ファイル(ブック)のセルを表示させたいのですが、例えば =[あいうえお.xls]かきくけこ!$A$5 とせずに、 ファイル名は A1セル の文字列を充てる、というようなことは出来ないでしょうか? 関数が分からない人でも、簡単に参照したいファイル名を変えられるようにしたいのです。 よろしくお願い致します。

  • エクセルで誤って参照先のファイル名を変えてしまった・・

    エクセルで別のブックのデータを参照にした関数を組んだのですが、謝って参照先のファイルの名前を変えてしまいました。関数がうまく起動しなくなったので、参照先のファイル名を元に戻したのですが、やはりうまく起動せず、下のセルにもその関数を入れようとする度に、参照先を入力しなければならなっくなってしまいました。(一度、参照先を入れなおしたところも再度、入力しなければならないようです。) なにか、いい方法はないでしょうか? 関数の計算式の中で、これはこのファイルを表す、みたいに再定義するなどの方法があるのでは?という話も先輩に聞いたのですが、あるのでしょうか?また、それよりもいい方法があればよろしくお願いいたします。

  • エクセル2000でファイル間セル参照とセル値でファイル名参照

    ロータス123では出来た、元々あるファイルからある数値(セル)を新規ファイルへ参照したい式がエクセルでわかりません。 ファイルは電気検針等毎月使いますが、今月の数値-前月の数値で使用量を計算します。 しかし、検針日(2004年11月)西暦(1つのセル)、月(1つのセル)でこの月の部分を変更することにより前月のファイル(2004-10.XLS)の今月の数値(セル)を2004-11のファイルの前月の数値へ参照させるにはどうしたらいいでしょうか。 ロータスでの式は 「IF($D$2=1,@@("<<c:\検針\"&@STRING($B$2-1,0)&"-12.123>>E2"),@@("<<c:\検針\"&@STRING($B$2,0)&"-"&@STRING(@CHOOSE($D$2,0,12,1,2,3,4,5,6,7,8,9,10,11),0)&".123>>E2"))」でした。(たぶん@CHOOSE($D$2..は「$D$2-1」でもいいかもしれませんが今月-1で1ヶ月前をあらわしてます。@STRING(..は数値を文字列に変換しています。) B2は西暦で、D2は月です。1月の時だけ西暦を-1し、12月分を参照すし、それ以外は、セルの西暦-月をファイル名として参照させています。 別ファイルの参照式は「’(絶対パス)¥[(ファイル名.xls)](シート名)!’(セル)」 で試しましたが、「[ 」以降もセル値を反映させることが出来ませんでした。 「[ 」以降関数を入力しても入力通りの参照ファイルを探しにいきます。 よい式や関数はあるでしょうか。

  • Vlookup関数の参照元ファイルについて

    当たり前の事なのかもしれませんが教えてください。 友人宅で使用しているエクセルファイルがメールで届きました。 そのファイルを私のPCで確認したところ、 Vlookで参照している参照元データは添付されていないのですが、 ちゃんとデータを表示しているのです。 その関数を別のファイルに貼り付けても検索ができますし、 検索値に別の値(参照元データにある)を入力しても 列番号を変更しても、ちゃんと検索表示しています。 Vlook関数を張り付ける際に「値の更新:○○,xls」というウィンドウは開きますが、 ○○,xlsというファイルは存在しませんし、更新は「キャンセル」しています。 参照元データは友人宅のネットワークサーバーにある別のエクセルファイル(○○,xls)です。 もちろん、私のPCとは繋がっていません。 私のPCにはそのファイルはありません。 私の認識では、Vlookupで別のファイルを参照している場合、 参照元ファイルがないとエラー値となると思っていました。 エクセルファイルは一旦別のファイルを参照すると参照元データを全て記憶しているのでしょうか? それとも参照元ファイルの実態はなくても、コピーした時点でデータとして一緒にどこかに存在するのでしょうか? 「値の更新」?をしなければ、その架空の参照元ファイル?から検索が可能なのでしょうか? もしそうだとすると、職場で別ファイルを参照している関数付きのエクセルファイルを 相手先に誤って添付してしまった際に、 添付していないはずの参照元ファイルのデータが相手先に検索出来てしまう、、 という事になります。(そのような事は滅多にありませんが・・) 因みに私はexcel2007 友人はexcel2010を使用しています。 送られてきたファイルは.xlsxですが、参照元ファイルは2003で作成した.xlsのようです。 私の認識不足で恥ずかしい限りですが、教えください。

  • ファイルアドレスの間接的な変更について

    ファイルアドレスの間接的な変更について エクセル上のあるセルが\C\●●●●\○○○○\△△△△\2007-09[\あいうえお.xls]かきくけ!$A$2を参照していて、これを\C\●●●●\○○○○\△△△△\2008-12\[\あいうえお.xls]かきくけ!$A$2に変更したい。(フォルダが異なるが同一名のファイルの同一セルを参照) 2007-09、2008-12とおいているところは年月を表しており、更新したいファイルには他に2006-05、2004-03を参照しているなど、参照先が混在しているため範囲を一括して置換することはできない。 ただこの年月には一定の法則があるため基準となる年月を入力すればどの月に変更するべきなのかは=EDATE( )を使って表示することができる。 私はそれらのセルを&INDIRECT( )&を使って参照式と結び、基準月を入力することによりファイルの置換まで一括でできないかを試みたところエラーになってしまった。 置換をしたりセル内の参照式を直接いじらずに変更する数式をご存じありませんか?

専門家に質問してみよう