[[20180901155709]] 『IF関数について 簡略化』(hikaru) ページの最後に飛ぶ

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

 

『IF関数について 簡略化』(hikaru)

(1)=IF(B7<10,B7+24,B7)
(2)=IF(C7<C4,B7-1-B4,B7-B4)

(1)と(2)をミックスすると

(3)=IF(B7<10,IF(C7<C4,B7+24-1-B4,B7+24-B4),IF(C7<C4,B7-1-B4,B7-B4))

この関数でも機能しますが簡略化した関数にするためには
どうすればいいのですか?

こぅいう感じの関数を複数つなげていくと『引数が多すぎる』とエラーが
出てしまい。悩んでいます

< 使用 Excel:Excel2013、使用 OS:Windows7 >


【追加】
実際には こんな感じの関数を作ってます

=IF(B4="","",
IF(
OFFSET(F25,MATCH("*"&"あ"&"*",F26:F52,0),-4)<10,
IF(
OFFSET(F25,MATCH("*"&"あ"&"*",F26:F52,0),-2)<C4,
OFFSET(F25,MATCH("*"&"あ"&"*",F26:F52,0),-4)+24-1-B4,
OFFSET(F25,MATCH("*"&"あ"&"*",F26:F52,0),-4)+24-B4)),
IF(
OFFSET(F25,MATCH("*"&"あ"&"*",F26:F52,0),-2)<C4,
OFFSET(F25,MATCH("*"&"あ"&"*",F26:F52,0),-4)-1-B4,
OFFSET(F25,MATCH("*"&"あ"&"*",F26:F52,0),-4)-B4)))
(hikaru) 2018/09/01(土) 16:07


※追加は間違いです。
違う関数貼りました

【再追加】
《成功した関数》
=IF(B15="","",
IF(
OFFSET(F25,MATCH("あ",F26:F52,0),-2)<D25,
OFFSET(F25,MATCH("あ",F26:F52,0),-4)-1-B25,
OFFSET(F25,MATCH("あ",F26:F52,0),-4)-B25))

《失敗した関数》
=IF(B15="","",
IF(
OFFSET(F25,MATCH("あ",F26:F52,0),-4)<10,
IF(
OFFSET(F25,MATCH("あ",F26:F52,0),-2)<D25,
OFFSET(F25,MATCH("あ",F26:F52,0),-4)+24-1-B25,
OFFSET(F25,MATCH("あ",F26:F52,0),-4)+24-B25)),
IF(
OFFSET(F25,MATCH("あ",F26:F52,0),-2)<D25,
OFFSET(F25,MATCH("あ",F26:F52,0),-4)-1-B25,
OFFSET(F25,MATCH("あ",F26:F52,0),-4)-B25)))

※この失敗した関数を使えるようにしたいです
(hikaru) 2018/09/01(土) 16:26


 >失敗した関数を使えるようにしたい
 についてだけチェックしてみました。
 >簡略化
 に関しては何も答えてない返事で申し訳ないのですが^^;

 MATCH("あ",F26:F52,0)
 ↑これを●に置き換えてみると

《成功した関数》

 =IF(
 ├ B15=""
 ├ ,""
 └ ,IF(
    ├   OFFSET(F25,●,-2)<D25
    ├  ,OFFSET(F25,●,-4)-1-B25
    └  ,OFFSET(F25,●,-4)-B25
    )
 )

《失敗した関数》

 =IF(                                    <--このIFは引数が4つなので失敗する
 ├  B15=""
 ├ ,""
 ├ ,IF(                                 <--このIFは引数が2つで終わってる
 | ├   OFFSET(F25,●,-4)<10
 | └  ,IF(
 |     ├   OFFSET(F25,●,-2)<D25
 |     ├  ,OFFSET(F25,●,-4)+24-1-B25
 |     └  ,OFFSET(F25,●,-4)+24-B25
 |     )
 | )                                    <--つまりこの閉じ括弧が不要?
 └ ,IF(
    ├   OFFSET(F25,●,-2)<D25
    ├  ,OFFSET(F25,●,-4)-1-B25
    └  ,OFFSET(F25,●,-4)-B25
    )
 ))                                      <--閉じ括弧が1つ余ってるので失敗する

 ↓直してみたらこんな感じかな・・・?

 =IF(
     B15=""
    ,""
    ,IF(
         OFFSET(F25,●,-4)<10
        ,IF(
             OFFSET(F25,●,-2)<D25
            ,OFFSET(F25,●,-4)+24-1-B25
            ,OFFSET(F25,●,-4)+24-B25
        )
        ,IF(
             OFFSET(F25,●,-2)<D25
            ,OFFSET(F25,●,-4)-1-B25
            ,OFFSET(F25,●,-4)-B25
        )
    )
 )

 無理に1本の式にまとめようとし過ぎると、
 MATCH("あ",F26:F52,0)
 ↑この様な同じ計算を何度も書かないといけないし
 場合によっては無駄な計算コストによって再計算の度に待たされたりするし、
 (MATCHの様な検索系の関数は特に)
 同じ計算を2回以上書く様な場面なら、私なら別セルに書いて参照します。

 そもそも式を組む過程で、いきなり1本の式で考える方が難しいから、
 hikaruさんも元々はバラけさせてたんじゃないでしょうか?

 まぁ、その辺は「好み」の問題ですから全然いいんですけど^^;

(白茶) 2018/09/01(土) 18:21


 一応こんな感じには出来ますが、
 =IF(B15="","",OFFSET(F25,MATCH("あ",F26:F52,0),-4)-B25-(OFFSET(F25,MATCH("あ",F26:F52,0),-2)<D25)+(OFFSET(F25,MATCH("あ",F26:F52,0),-4)<10)*24)

 ここからまだ他にも条件式を追加するつもりでしたら、作業列を使う事をお勧めします。
 OFFSET(F25,MATCH("あ",F26:F52,0),-4)
 OFFSET(F25,MATCH("あ",F26:F52,0),-2)
 この2つの結果を別セルで計算させるだけで、格段に見やすくなりますよ。

 例)
 OFFSET(F25,MATCH("あ",F26:F52,0),-4) の結果をB1セルに出力
 OFFSET(F25,MATCH("あ",F26:F52,0),-2) の結果をB2セルに出力
 と予め計算させておけば、
 =IF(B15="","",B1-B25-(B2<D25)+(B1<10)*24)
 こうなり私的には初めの式より遥かに見やすく、修正なども容易になると思います。

(sy) 2018/09/02(日) 09:08


"白茶さん""syさん"ありがとうございます

"白茶"さんの言う通り、バラけさせて関数を作っていましたが一本化が上手く行かなくて・・・^^;
MATCH関数無しの"白茶"さんの関数 うまく行きました!!!

"syさん"の関数も ばっちりです!!!
予め別セルで計算!!
条件が追加になったとき、たしかに 見やすくなりますね!

ありがとうございました。^^
(hikaru) 2018/09/02(日) 11:02


コメント返信:

[ 一覧(最新更新順) ]


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