CONCATENATE を使用して外部参照を作成しましたが、ファイルが相互にリンクされていないため、外部ファイルから値が取得されません。INDIRECT() を使用しましたが、Excel ファイルが開かれている場合にのみ値が選択されます。他に解決策はありますか。
答え1
実際には、INDIRECT()
閉じたファイルでは機能しません。
これを回避する従来の方法は、スプレッドシート内の「目立たない」場所、または名前付き範囲を用意し、そこに、(閉じている場合もあれば開いている場合もある) 他のスプレッドシートを調べる DIRECT 数式を事前に記述しておくことです。次に、その事前に記述された数式を参照して、必要な値を提供します。参照を作成して渡すと、INDIRECT()
同じスプレッドシート内の DIRECT 数式が参照され、DIRECT 数式は、閉じたスプレッドシートを調べることはINDIRECT()
できません。
複数の可能性がある場合、設定が少し面倒になる可能性があります... たとえば、40 個の異なるスプレッドシートの特定のセルを調べたいとします。もちろん、一度に数式を書き込むセルは 1 つだけですが、その 1 つは 40 個のうちのどれでもかまいません。40 個の DIRECT 数式を記述し、値が必要な場所でINDIRECT()
わずかに異なるロジック、つまりテスト数式を使用する必要があります。IF()
ただし、標準の文字列式を使用して、先頭の「=」を省略し、式の残りの部分では使用しない文字 (おそらく「¢」文字) を使用して、これらの DIRECT 式を記述することができます。つまり、次のような 40 個の「式」が得られます。
¢A1
その後、完了したら、コピーして値として貼り付け、Find and Replace
その異常な文字を「=」に置き換えると、文字列が数式に変換されます。とても...面倒ですが...難しくはなく、時間もかかりません。
もちろん、参照するワークブックが 40 個あり、それぞれに 100 個の異なるセルがある場合、これはかなり面倒になる可能性があります... ただし、少なくとも、どのIF()
ワークブックから値を取得するかを選択するテストは、それほど難しくはありません。
ただし、これは閉じられている可能性のあるブックを調べる一般的なことですが、Excel に課される通常の要求と比較して、Excel が各場所でこれらすべてを実行することは、かなり大きな負担となることを覚えておいてください。数式内の関数を評価することは、Windows にアクセスしてファイルをバックグラウンドで開き、読み込み、値を見つけ、Windows にファイルを閉じさせて、現在のブックに値を配置するよりもはるかに簡単です。これらの参照が 40 個ある場合、40 個のマクロを同時に実行するようなものです。
ただし、それは確実に起こります。自分で試して、その後、ユーザーの範囲がそれを試すまで、それが顕著かどうかはわかりません。そのため、まずは試さずに、その理由だけでそれを避けないでください。