[[20041104102146]] 『数式を{ }で囲む』(シーマス) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『数式を{ }で囲む』(シーマス)

数式を入力した後で{}で囲むことがありますよね
これは、動作的には何が行われているのでしょうか?

又、このような式を簡単にするには、

=IF(ISERROR(SUM(IF(INDIRECT(VLOOKUP(A184,リスト!$A$1:$B$150,2,0)&"!$A$8:$A$130")=$A$3,INDIRECT(VLOOKUP(A184,リスト!$A$1:$B$150,2,0)&"!$K$8:$K$130"),0))),"",SUM(IF(INDIRECT(VLOOKUP(A184,リスト!$A$1:$B$150,2,0)&"!$A$8:$A$130")=$A$3,INDIRECT(VLOOKUP(A184,リスト!$A$1:$B$150,2,0)&"!$K$8:$K$130"),0))+VLOOKUP(A184,'6月'!$A$86:$G$190,7,0))

何か方法がありますか?

PS:掲示板入力時にうまく改行が出来ません。[Shift]+[Enter]以外にコマンドは、何を使えばよいのでしょうか?


 配列数式に関しては
http://pc21.nikkeibp.co.jp/special/hr/
で詳しく説明がされています。
数式に関しては、レイアウトと何をどうしたいのかを明記してください。
誰かが、いい数式を考えてくれるかも・・・
(ケン)


ありがとうございます。

配列関数って言うんですね。知らずに使っていました。

数式に関しては、レイアウトといわれてもどう明記していいのかわからないので試行錯誤してみます。

とにかく、再計算に3〜5秒ほどかかっていまして、も〜たいへん!
アクセス使いた〜い!


 ご提示の数式についてですが・・・。
多少でも計算の負担を軽減できる可能性として、
ISERRORで何をチェックしているかを確認してください。
ISERRORでチェックしている数式と、
ISERRORがFALSEの場合の処理の一部が
同じになっているので、それだけ計算負担は増えます。
VLOOKUP(A184,リスト!$A$1:$B$150,2,0)の部分だけのチェックだけで
すむのなら前半の

=IF(ISERROR(SUM(IF(INDIRECT(VLOOKUP(A184,リスト!$A$1:$B$150,2,0)&"!$A$8:$A$130")=$A$3,INDIRECT(VLOOKUP(A184,リスト!$A$1:$B$150,2,0)&"!$K$8:$K$130"),0))),・・・

 この部分は
=IF(ISERROR(VLOOKUP(A184,リスト!$A$1:$B$150,2,0)),・・・
これでいいのではないかと思うのです。
テストデータを作ってまでの検証まではしておりませんので
この方法でどれくらい軽減できるものかはわかりませんし、
この提案があっているかどうかもちょっと確認しにくいですね。
バックアップしたうえでご自身でご確認をお願いします。
悪しからずご了承ください。
(みやほりん)


いろんな場所で試してみました。
本当のエラーが出て(入力した式は、正しくありません)うまくいかないですね。

多分、シート枚数が多すぎるのだと思います。その為、再計算を行う範囲が広すぎるのでしょう。

ありがとうございました。今後の参考にします。


 諦めが早いですねぇ。
「入力した式は、正しくありません」はカッコの数があわず、
Excel側でもカッコの補完候補位置が決められないときに出ます。
修正のときにカッコを多く消しすぎたか残しすぎたかどちらかでしょう。
よーく確認すれば、(少なくとも入力は)できます。
私が提示した修正箇所は

=IF(ISERROR(SUM(IF(INDIRECT(VLOOKUP(A184,リスト!$A$1:$B$150,2,0)&"!$A$8:$A$130")=$A$3,INDIRECT(VLOOKUP(A184,リスト!$A$1:$B$150,2,0)&"!$K$8:$K$130"),0))),"",・・・

 ↓
=IF(ISERROR(VLOOKUP(A184,リスト!$A$1:$B$150,2,0)),"",・・・
つまり、最初のIF関数の空白セット「,"",」直前までです。
空データで追試しているため再計算自体は早くなっているかどうか
なんともいえませんが、数式のコピー速度は速くなるようです。
(みやほりん)


ごめんなさい。
確かに動きます。

私は、この部分が<(SUM(IF(INDIRECT>削られていることでそんなに削って大丈夫なの?っと疑問に思っていました。理屈は、なんとなくわかったのですが、やはり障害が大きく・・・と言うのもリスト内にあるはずのシートを勝手に削除したりするので検索に入った時点でシート名は、リストにあるのに実際のシートが無いことで<#REF!>が出てしまいます。要求が厳しくまったくエクセルをワープロソフトとしてしか扱えない人にエラー表示が出るたびに呼び出されるのは大変!まだまだ未熟なためにいろいろな部分での解決法が見つからないのはつらいです。

一度ファイルをコピーして「みやほりん」さんに教えていただいた方法と、エラー処理を条件付き書式設定で見えなくするなどして、実行させてみます。

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


 なんか誤解があるような?
理屈としては
VLOOKUP(A184,リスト!$A$1:$B$150,2,0))
がエラー#REF!になったときだけ空白になる数式構造なので、
#REF!はでないと思うのです。
<(SUM(IF(INDIRECT>はシートがあったときにだけ計算を行う部分なので、
実際にシートがあるかどうかの判断は<VLOOKUP(>部分だけのチェックで
充分なはずです。
修正後の数式全体を提示。

=IF(ISERROR(VLOOKUP(A184,リスト!$A$1:$B$150,2,0)),"",SUM(IF(INDIRECT(VLOOKUP(A184,リスト!$A$1:$B$150,2,0)&"!$A$8:$A$130")=$A$3,INDIRECT(VLOOKUP(A184,リスト!$A$1:$B$150,2,0)&"!$K$8:$K$130"),0))+VLOOKUP(A184,'6月'!$A$86:$G$190,7,0))

 (みやほりん)


度々ごめんなさい。

おっしゃる通りだと思います・・・が、上記式を使っても(私が入力した式も同じなんですが)実際シートが存在しない場合<#REF!>が出てきます。

<A184>を参照したときに値が無い場合は、空白になりますが<A184>を参照してリスト内に値があり、シートを見に行った時にシートが存在しないときにエラーが出ているように感じます。

正直、私が間違った操作をしているのかもしれませんので、もう少し試行錯誤をしてみます。

度々、お付き合い頂きありがとうございます。

何かのきっかけでうまくいったらご報告します。

とりあえず今回教えて頂いた方法で「気持ち」早くなったように思えるので大変ためになりました。(シーマス)


 大きな勘違い、見落とししてました。
リストに実在するシート名が必ずあるとは限らないんですね。
再トライ。
以下でどうでしょう。
=IF(ISERROR(INDIRECT(VLOOKUP(A184,リスト!$A$1:$B$150,2,0)&"!$A$8:$A$130")),"",SUM(IF(INDIRECT(VLOOKUP(A184,リスト!$A$1:$B$150,2,0)&"!$A$8:$A$130")=$A$3,INDIRECT(VLOOKUP(A184,リスト!$A$1:$B$150,2,0)&"!$K$8:$K$130"),0))+VLOOKUP(A184,'6月'!$A$86:$G$190,7,0))
(みやほりん)


出来ちゃいました。

すごいです!^0^/

他力本願になってしまいましたが早速全セルに移植して動作の確認を取りたいと思います。

最後までお付き合い下さってありがとうございました。(シーマス)


 こちらの勘違いでかえって手間を取らせたようです。
すみませんでした。
(みやほりん)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.