- ベストアンサー
エクセル関数の解読について
さっそくですが、ブック1があり、エクセル関数のvlookupを使って別ブック2から参照してあります、組み込まれている下記の関数の仕組みを解読したいのですが、別ブック2が行方不明で手元にはありませんのでわかりません。下記の関数は一つのブックから2つ(名称と価格)のシートから抽出しているのでしょうか? =IF($A2="","",IF(A1="",VLOOKUP($A2,'\\Tsclient\s\本体\[サンプル1.xls]名称'!$A$3:$H$1000,9,FALSE),VLOOKUP(A2,価格!A:G,1,FALSE))) どなたかお分かりでしたらお助けください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
A1がブランクだったら、 別のブック2の名称のシートから抽出し、 A1がブランクでない場合は、 ブック1の価格のシートから抽出しています。
その他の回答 (6)
- tondekesky
- ベストアンサー率68% (17/25)
No.4です。横からすみません。 No.5さんが掲示くださったURLはご覧になったでしょうか? リソース不足(メモリ不足)になる原因として >(略)Excel 97 以降バージョンでは 16376 以上(略)のセル範囲を参照する数式を入力した場合、または関数を入力した場合に発生します。 とリンク先に書かれています。 ご自身が組んだ式の最後のVLOOKUP部分「VLOOKUP(A2,価格!A:G,1,FALSE)」にて A列からG列の全てのセルを指定されてますよね。 ご利用のExcelのバージョンを教えて下さっていませんが、 A列だけでも16376 以上のセルが選択されているのが原因ではないかと思いますが、いかがでしょうか。 そのため「参照範囲を小さくすると問題にないのですが」という状況になっているものと思います。 >以前はなぜリソース不足がでないんでしょうか? 現物見てないし分かりませんが、質問者様が書かれた >ブック2から抽出するのに使っていた上記の関数を組んだのですが という記述から察しますに、この関数は、以前の関数をコピペしたものではなく、 質問者様ご自身が、自分で考えて作ったもの、ですよね。 恐らく、以前の関数では A:G という記述はされていなかったのではないか、$A$3:$H$1000も範囲が狭かったのではないかと思います。 「参照先のセル範囲が増えた、今後も増える」ということでしたらAccessの利用が快適です。 御社では、ファイルのバックアップは取っていらっしゃらないのでしょうか? サーバーにファイルを保存しているのなら、IT担当がファイルをバックアップしている可能性があります。 それがあれば(簡単に)復元してもらえるので、元々のブック2を利用できますよ。 といっても、バックアップされた日時以降に書き換えられたファイルの中身は失われますが。
- shinkami
- ベストアンサー率43% (179/411)
自身ないですが >'¥¥Tsclient¥s¥本体¥[サンプル1.xls]名称'!$A$3:$H$1000,9,FALSE ¥¥は、以前は一つ上のディレクトリーだったような 試してみましたがエラーになります。 そちらで試して下さい 今のファイルが「ドキュメント」にあるとして 「'c:¥ドキュメント¥Tsclient¥s¥本体¥[サンプル1.xls]名称'!$A$3:$H$1000,9,FALSE」 ※「¥」は半角
補足
参照範囲を小さくすると問題にないのですが以前と同様の範囲にするとリソース不足がでます。逆に以前はなぜリソース不足がでないんでしょうか?
- MackyNo1
- ベストアンサー率53% (1521/2850)
>新にブック3をつくり以前のようにブック2から抽出するのに使っていた上記の関数を組んだのですが「リソース不足・・・」と表記がでるのですが原因はなんでしょうか? 一般的には、そのブックに外部参照式を多用している時やシートに多数の関数などが入力されている場合や、あるいは多くのアプリケーションを同時に立ち上げている場合などに、リソース不足が発生しやすいのですが、そのような状況ではないでしょうか? ご使用のエクセルのバージョンが明記されていませんが、例えば外部参照式に関連する情報として以下のサポート技術情報があります。 Excel 2003 で外部参照式を含むブックを保存するとメモリ不足になる http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B410964
- tondekesky
- ベストアンサー率68% (17/25)
そうですね、条件に応じて検索するシートを使い分けているようです。 ある場合は名称シートを検索、それ以外の場合は価格シートを検索、という風に。 表の埋まり具合によって、「名称」を表示させたり「価格」を表示させたい意図があるように見えますが、期待した結果は返ってきてますか?? IF関数とVLOOKUP関数を理解して、冷静に分解してみるとご自分でも分かるようになれると思うのでお時間のある時にそれぞれの関数で遊んで見ると面白いですよ。 とりあえず次のようになると思います。範囲A、範囲Bは後述します。 >IF($A2="","", ブック1の$A2が""(空)の場合は""(空)を表示する、$A2が""(空)でない場合は、 >IF(A1="",VLOOKUP($A2,'\\Tsclient\s\本体\[サンプル1.xls]名称'!$A$3:$H$1000,9,FALSE), (※ここで改めてIF関数で条件式が盛り込まれている) ブック1のA1が""(空)の場合は、 範囲Aの1列目から、ブック1の$A2と完全に一致するセルの行を検索し、その行の9列目の値を表示する、 ブック1のA1が""(空)でない場合は、 >VLOOKUP(A2,価格!A:G,1,FALSE))) 範囲Bの1列目から、ブック1のA2と完全に一致するセルの行を検索し、その行の1列目の値を表示する、 ●範囲A ブック1の存在するフォルダの一つ上に上り、「\Tsclient\s\本体」フォルダの中の[サンプル1.xls](ブック2?)のシート「名称」の$A$3:$H$1000 ●範囲B ブック1のシート「価格」のA:G この式で期待する結果が返っているなら、個人的には最後のVLOOKUP式をただA2と書いても同じではないかと感じます。 つまり、=IF($A2="","",IF(A1="",VLOOKUP($A2,'\\Tsclient\s\本体\[サンプル1.xls]名称'!$A$3:$H$1000,9,FALSE),A2)) で良いのではないかなぁ、と。 というのも、VLOOKUP関数での検索対象は必ず「指定範囲の1列目」であり、検索対象が存在する場合に表示させたい値の入っている列(範囲の先頭から○番目)の指定も「1」=「1列目」としているので、最後のVLOOKUP関数は意味がないように感じます。指定する列を間違えているなら、VLOOKUP(A2,価格!A:G,■,FALSE)の■の部分を正しい数値に変更すればOKと思います。 私が間違っていたらごめんなさい。
- mu2011
- ベストアンサー率38% (1910/4994)
>下記の関数は一つのブックから2つ(名称と価格)のシートから抽出しているのでしょうか? ⇒以下の通りです。 (1)ブック1のA2が空白なら空白 (2)ブック1のA2が空白以外でA1が空白の場合 A2をキーにブック2(サンプルファイル)のデータ表の9列目(?)を抽出、 但し、列番号>データ表列範囲の為、数式は#REFエラーになります。 (3)ブック1のA2が空白以外でA1が空白以外の場合 A2をキーにブック1の価格シートから同一の内容を抽出、 意図が判りません。 結論としては、不完全な数式の為、解読するだけ不毛のような感じです。
- Turbo415
- ベストアンサー率26% (2631/9774)
if関数はif(○,△,□)が基本です。意味は○だったら、△をする、それ以外は□をすると言うことです。 また、ネストしている場合は、if(○,△,if(●,▲),□))となります。この場合はもし、○だったら、△をするが、もし●だったら▲をする。○か●以外は□をすると言うことです。 この場合だと最初の○の意味はA2のセルが空白だったらと言うことで△の意味はは空白にする。次の●の意味はA1が空白だったらで、▲はLAN上の「Tsclient」と言うところにある「本体」というフォルダの中にある「サンプル1」という名のエクセルファイル(ブック)の名称というシートを参照してVlookup関数で探して表示しろ、それ以外はこのファイル(ブック)の「価格」シートを参照して表示しろと言う意味です。 ちなみにFALSEはその数値と完全に一致しない場合はエラーを表示すると言う意味です。 これを省略すると近似値で探して表示します。
補足
詳しいご説明ありがとうございます。 追加の質問でANo.1の補足でかかせてもらったのですがお手数ですがご回答お願いしてもよろしいでしょうか。
補足
ありがとうございます。追加質問なのですが別ブック2が行方不明という事で新にブック3をつくり以前のようにブック2から抽出するのに使っていた上記の関数を組んだのですが「リソース不足・・・」と表記がでるのですが原因はなんでしょうか? 以前とまったく一緒の条件とおもうのですが、それに容量も十分にあります。