• ベストアンサー

IF関数で出納帳の残高の式をコピーした場合

はじめまして、こんばんは。 いろんな方の質問と回答を参考に現金出納帳を作成中です。 出納帳の様式を  A    B    C 収入   支出   残高 として、C1には繰越残高を、C2に、 IF(AND(A2="",B2=""),"",C1+A2-B2) と入力し、C2の式をC列にコピーしました。 A列、B列どちらかに値があるとうまくいくのですが、 一度、A列、B列ともに空白の行を参照してしまうと、 C列は空白のセルになり、それ以降のC列に上の式が 通用しなくなり、#VALUE!になってしまいます。 この場合は、この式にさらに、関数を追加しなければいけないのでしょうか? それか、もっと簡単にできるコピーできる式があるのでしょうか? どちらでも構いませんので是非教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • goomania
  • ベストアンサー率56% (84/149)
回答No.4

>出納帳の様式を > A    B    C >収入   支出   残高 >として、C1には繰越残高を・・・・・ との記述がありますので、C1には「開始残高」が入力されているものと考えられます。 現金出納帳の考え方として「現在残高」は最終異動があった「前回残高」に今回の「収入」を加え「支出」を差し引くと言う考え方が自然ですのでご質問者の出納帳もそのような考え方でお作りになろうとしているのだと思います。 もうひとつの考え方として、「現在残高」は 「開始残高」に今までの「収入の総和」を加えて 「支出の総和」を差し引いたものと考えるこきともできます。 ちなみに、その考え方でC2に記述すべき関数を考えると 以下のようになります。この方式だと、ご質問者のご希望をかなえられるような気がするのですが・・・ =IF(AND(A2="",B2=""),"",SUM($C$1,+SUM(A$2:A2)-SUM(B$2:B2))) なお、A1、B1に値が入力されていた場合は、収入、支出の各々の総和はA1、B1の値を無視して計算するようになっています。 ただ、ひとつ疑問なのが、現金出納帳で「収入」も「支出」も発生しない行というのがあるのでしょうか?

okan128
質問者

お礼

で・で・できましたぁ!思い描いていたとおりに! 私の頭は凝り固まってしまってこんな考え方は浮かびませんでした。 発想の転換?というのでしょうか。小学生の頃から算数嫌いだった私には目からウロコで、なおかつ計算式の意味も理解できました。 とても勉強になりました。 本当にありがとうございました。 ちなみに空白セルは摘要欄(A列より左側)でセル内改行や結合すると残高以降の列に作った別の項目で支障が出て、修正が大変なので2行3行と使ってしまった箇所があるんです。そのため収入、収支セルに空白が発生してしまいました。要領が悪いんですね・・

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

しばらく考えてみましたが、 >一度、A列、B列ともに空白の行を参照してしまうと、 >それ以降のC列に上の式が通用しなくなり、#VALUE!になってしまいます。 ということは、収入と支出が必ずしも、両方立つわけではない、という意味ですね。 そうすると、#VALUE! になるということではありませんか? 標準的にどんな式が良いのか、私にはわからないのですが、以下のような式はいかがですか?ただ、INDIRECTという揮発性関数を使用していますので、入力しなくても、保存を要求されます。 C2:~ =IF(COUNT(A2,B2)=0,"",INDIRECT("C"&MATCH(10^15,$C$1:C1,1))+SUM(A2,-B2)) COUNT(A2,B2)は、文字列の長さ 0 ("")でも、ブランクでも、同等に扱います。 今回の場合は、収入・支出の列には、文字列の長さ0は、入らないようにお見受けしました。 INDIRECT("C"&MATCH(10^15,$C$1:C1,1)) 変則的ですが、最終行の数字の入っているセルを探すテクニックです。 なお、 SUM(A2,-B2) は、表計算初期の時代の使い方で、文字列が入ると、0と扱うテクニックです。 今のところ、こんに式しか思いつきません。

okan128
質問者

お礼

ご丁寧な回答ありがとうございます。 早速やってみたのですが、うまく出来ませんでした・・ 私の初歩レベルでは理解しながらというのは難しく、そのまま入力してしまったからでしょうか。 でも、いろんな技を教えていただきとても参考になりました。引き続き勉強して、色々な関数を理解できるように頑張りますね。

noname#63022
noname#63022
回答No.2

=IF(AND(ISBLANK(A2),ISBLANK(B2)),"",$C$1+A2-B2) A列,B列 空白の場合です。

okan128
質問者

お礼

ご回答ありがとうございます。 教えていただいた式でやってみました。 A列B列が空白の時はC列も空白になり、見た目は理想どおりなのですが、C列にこの式をコピーしていくと$C$1と絶対番地なので残高がすべてC1セルを基に計算してしまうようです。 そこで$を外すとやはりエラーになってしまいます。説明が解りづらくすみません。この式も参考にさせていただき何とか応用をきかせて頑張ってみますね。

  • HAL007
  • ベストアンサー率29% (1751/5869)
回答No.1

>>IF(AND(A2="",B2=""),"",C1+A2-B2)                ~~~ここがブランクの原因。 IF(AND(A2="",B2=""),C1,C1+A2-B2) これで上のセルの数値が入ります。

okan128
質問者

お礼

早々のご回答ありがとうございます。 教えていただいたとおりで、できました!! 書類の提出期限が迫っており、とても困っていたので本当に大感謝です。 欲張って質問させていただくと、これでさらにA列B列ともに空白セルの場合C列にも値が入らないようにすることはできるでしょうか? 現状は、A列B列どちらかに値が入っているセルがほとんどなのでC列でダブった値をクリアするだけで十分なのですが、とても勉強になるので教えていただければ幸いです。

関連するQ&A