• ベストアンサー

IF関数のTRUEとFALSEが逆になってしまいます

升目の大変多い申請書を作っています。 シートAのA1にある2桁の数字を、各桁毎にシートBの別々のセルに返したくて次のような式を作りました。 シートBのA1 =IF('シートA'!BN30<10,"0",LEFT('シートA'!BN30)) シートBのB1 =IF('シートA'!BN30<10,'シートA'!BN30,MID('シートA'!BN30,2,1)) 最初、いくつかのセルで結果が出ましたが、途中からのセルで論理式がTRUEでなくFALSEになってしまい結果を得ることができません。FALSEをTRUEに戻す方法があれば教えてください。 宜しくお願いします。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

実際のシートを見ないと原因の特定は?ですが・・・ 枠が印刷された書類に印刷する時に質問のようなことをすることがあります。 最大桁数だけを定義して算式を作っています。IFでの判定も不要にできます。 例えば、Sheet1のA1に『1桁~4桁の数値』が入力される可能性があり、この数値を Sheet2のC3、D3、E3、F3に場所を固定して出力します。  C3:=MID(RIGHT(REPT(" ",4)&Sheet1!$A$1,4),1,1)  D3:=MID(RIGHT(REPT(" ",4)&Sheet1!$A$1,4),2,1)  E3:=MID(RIGHT(REPT(" ",4)&Sheet1!$A$1,4),3,1)  F3:=MID(RIGHT(REPT(" ",4)&Sheet1!$A$1,4),4,1) 非常にきれいな式になります。  RIGHT(REPT(" ",4)&Sheet1!$A$1,4) の4がそのセルの最大桁数で、  切り取る前に全て4文字文字列に換えています。  上記は数値の前に半角スペースを埋めていますが、前ゼロにするには、  C3:=MID(RIGHT(REPT("0",4)&Sheet1!$A$1,4),1,1) のようにします。 処理する前に、同じ桁数にしてしまうので、余分な判定が不要になります。 ご参考に。

kanjukukaki
質問者

お礼

お粗末な質問に丁寧なご回答ありがとうございます。 実は、質問とは別に1桁~10桁の数値が入力される可能性があるセルをどうしたものかと悩んでました。この式なら引用できそうです。 感謝、感謝。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

#2です。だいぶん問題が変りましたね。 シートBの A1に=VALUE(IF(シートA!A1<10,0,MID(シートA!A1,1,1))) B1に=VALUE(IF(シートA!A1<10,シートA!A1,MID(シートA!A1,2,1))) C1に=VALUE(IF(シートA!B1<10,0,MID(シートA!B1,1,1))) D1に=VALUE(IF(シートA!B1<10,シートA!B1,MID(シートA!B1,2,1))) E1に=VALUE(IF(シートA!C1<10,0,MID(シートA!C1,1,1))) F1に=VALUE(IF(シートA!C1<10,シートA!C1,MID(シートA!C1,2,1))) といれ、各列下方向に式を複写してください。 結果はシートBでは数字で入ります。 シートAのA,B、C列は数字が入っていて、つきの12以下 日の月末日以内は満たされているものとします。 上記で内容がおかしい行か列が出ますでしょうか。

kanjukukaki
質問者

お礼

再回答ありがとうございます。 問題の要点も表現できないお粗末な質問に丁寧なお答え、感謝、感謝です。 お蔭様で今日中に申請書が作成できそうです。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

>シートAのA1にある2桁の数字を、各桁毎にシートBの別々のセルに返したくて A1とBN30との関係は?? A1はBN30の書き間違い?? --- むしろシートAのBN列の各行にある2桁の数字の上1桁と下1桁に分けて、シートBの(例えば)A列とB列に分けたい、が問題ではないですか。 それなら シートBのA1セルには =IF('シートA'!BN30<10,"0",LEFT('シートA'!BN30,1)) シートBのB1セルには =RIGHT(シートA!BN30,1) で旨く行きそうです。0でも0を返す。 もし3桁の数字がシートAのBN30に入っていると狂います。 =IF('シートA'!BN30<10,"0",LEFT(RIGHT(シートA!BN30,2),1) または=IF('シートA'!BN30<10,"0",LEFT(RIGHT(シートA!BN30,2))でもよい。

kanjukukaki
質問者

お礼

早々のご回答ありがとうございます。 説明が下手で恐縮ですが今やっていることは次のことです。 申請書は個別のマスに区切られていて入力できる文字は1文字のため別シートで一気に入力した文字を1文字ずつ該当する個別のセルに返していく作業です。 こんな感じです。 シートAのA1に 16 シートAのB1に 6 シートAのC1に 20 と入力したら(これは年月日をいれるセルです) シートBのA1に 1 シートBのB1に 6 シートBのC1に 0 シートBのD1に 6 シートBのE1に 2 シートBのF1に 0 となってくれれば良いのです。 用紙はA4、セルはA1からGL94を使い31行目までは質問した式で問題はなかったのですが32行目から変になり、IF関数の入力小窓(?)の論理式欄に=IF('シートA'!BN30<10,"0",LEFT('シートA'!BN30))を入れると「=TRUE」ではなく「=FALSE」と表示がでてしまうのです。 貴重な時間を使っていただきありがとうございました。

  • alarm_set
  • ベストアンサー率19% (6/31)
回答No.1

ご質問の主旨とは、ずれるかもしれませんが・・ 2桁の数字を分けたいのであれば、 シートBのA1 =INT(Sheet1!A1/10) シートBのB1 =MOD(Sheet1!A1,10) としてみてはどうでしょうか?

kanjukukaki
質問者

お礼

早々のご回答ありがとうございます。 説明が下手で恐縮ですが今やっていることは次のことです。 申請書は個別のマスに区切られていて入力できる文字は1文字のため別シートで一気に入力した文字を1文字ずつ該当する個別のセルに返していく作業です。 こんな感じです。 シートAのA1に 16 シートAのB1に 6 シートAのC1に 20 と入力したら(これは年月日をいれるセルです) シートBのA1に 1 シートBのB1に 6 シートBのC1に 0 シートBのD1に 6 シートBのE1に 2 シートBのF1に 0 となってくれれば良いのです。 用紙はA4、セルはA1からGL94を使い31行目までは質問した式で問題はなかったのですが32行目から変になり、IF関数の入力小窓(?)の論理式欄に=IF('シートA'!BN30<10,"0",LEFT('シートA'!BN30))を入れると「=TRUE」ではなく「=FALSE」と表示がでてしまうのです。 貴重な時間を使っていただきありがとうございました。

関連するQ&A