ISBLANK関数で判定を行うと、参照先のセルに何らか関数が入力されていて、その計算結果としてセルの表示が空欄となっている場合等には、正しい判定が出来ません。
ですから、例えば、L4セルに数値が入力されている場合のみに、M4セルの値からL4セルの値を差し引いた値を表示し、L4セルが空欄か、或いは文字列が入力されている場合には何も表示しないようにする際に、
=IF(ISBLANK(L4),"",M4-L4)
という関数としてしまうと、H4セルが空欄である場合にはL4セルには何も表示されないにも関わらず、L4セルには関数が入力されているために、ISBLANK関数では空欄とは見做されず、M4-L4の計算結果が表示されてしまいます。
又、L4セルに関数ではなく、何らかの文字が入力されている場合には、引き算を計算する事は出来ませんから、エラーが発生してしまいます。
それに、L4セルに数値が入力されているのか否かだけで判定を行ったのでは、L4セルにだけ数値が入力されていて、Mセルに数値が入力されていない場合でも、計算が行われてしまいます。
ですから、L4セルとM4セルの両方に数値が入力されている場合にのみ、M4セルの値からL4セルの値を差し引いた値を表示し、それ以外の場合には何も表示しない様にする場合には、
=IF(AND(ISNUMBER(L4).ISNUMBER(M4)),M4-L4,"")
という関数とした方が良いと思います。
又、O4セルに入力されている関数である
=IF(OR(H4="",I4=""),"",(M4-L4)/(G4*H4))
の中の
(M4-L4)/(G4*H4)
という部分に関してですが、
M4-L4
の値は、既にN4セルで計算されていますし、
G4*H4
の値も、既にM4セルで計算されていますから、再度計算する事は二度手間になります。
ですから、
(M4-L4)/(G4*H4)
の部分は、
N4/M4
とする方が、一般的です。
これらの事を勘案しますと、L4セルの数式は次の様になります。
=IF(AND(ISNUMBER(G4),ISNUMBER(H4)),G4*H4,"")
M4セルの数式は次の様になります。
=IF(AND(ISNUMBER(G4),ISNUMBER(I4)),G4*I4,"")
O4セルの数式は次の様になります。
=IF(AND(ISNUMBER(L4),ISNUMBER(N4)),N4/L4,"")
そして、上記の式であれば、L列、M列、O列の数式は、B列の入力値が「売」の場合と、「買」の場合のどちらであっても、同じ計算式となりますから、B列の入力値に応じて、計算式を変更する必要はありません。
但し、N列だけは、B列の入力値が「売」の場合と、「買」の場合では、値のプラスとマイナスが逆転しますから、IF関数をE;入れ子にして使用し、次の様な数式となります。
=IF(AND(ISNUMBER(L4),ISNUMBER(M4)),IF(ISNUMBER(FIND("買",B4)),M4-L4,IF(ISNUMBER(FIND("売",B4)),L4-M4,"")),"")
お礼
kagakusukiさん、ANo.3で教えて頂いた通りの関数を全て入れて試しましたら 完全に作動しました。 買越、売越にも対応しており、完全な関数です。 サポートエンジニアさんの関数は買、売のみでしか計算されないようです。 ですのでkagakusukiさんのANo.3で教えて頂いた関数が正解です。有難うございました。 という事でベストアンサーに選ばせて頂きます。 本当にありがとうございました。<(_ _)>