- ベストアンサー
Excel IFの重複 #value!エラーが出る
- ExcelのIF関数を重複させた場合、和暦を西暦に変換する関数で#value!エラーが発生します。
- 現在の関数では昭和の変換はできますが、平成の変換がうまくいかず、エラーが発生しています。
- エラーの原因については調査中ですが、解決策はまだ見つかっていません。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
FINDでなくCOUNTIFを使用すれば =IF(COUNTIF(A1,"昭*"),SUBSTITUTE(A1,"昭",)+1925,IF(COUNTIF(A1,"平*"),SUBSTITUTE(A1,"平",)+1989,)) 昭和、平成でいいなら、こういう方法もあります。 =YEAR(DATEVALUE(SUBSTITUTE(SUBSTITUTE(A1,"昭","S"),"平","H")&"/4/1"))
その他の回答 (7)
- imogasi
- ベストアンサー率27% (4737/17069)
(1)質問者が自分の質問するまでやっていた路線と違うことを言うので気に食わない化も知れないが (2)A1セルに入っているデータ例が書いてないので、正確にいえないが(「質問するなら、データ例を書くものだ) こういうIF関数で、日付を場合分けして、年号入りのデータを西暦にするのは馬鹿げている。 いかにエクセルが日付の扱いで背後で苦労しているかいつも私は思っている。(閏年、月の大小、曜日、年号の変わり目など複雑になる要素はいっぱいだから) それを初心者が自分でプログラム的なことを関数で実現しようなどというのは、その難しさを知らないからだ。プログラムを組める人がいたら、聞いてみるがよい。プログラムは大変長くなりテストも必要になる。 ーー A1に平成12年11月12日と文字列であった場合 数式バー部に2000/11/12と出ていたら、日付シリアル値で入っているということで、西暦にしたければ、セルの書式設定で 2001年3月14日のアイテムを選ぶ。もし西暦文字列にしたければ、=TEXT(A1,"yyyy年mm月dd日") と入れる。 ーー '平成12年11月12日のように文字列で入っている場合は、=DATEVALUE(A1)で日付シリアル値になるから、セルの表示形式で西暦初諸式を設定すれば良い。 文字列にしたければ、=TEXT(A1,"yyyy年mm月dd日") で良い ーー 上記では目的を達せられませんか。 昭21年11月20日とでもなっているのかな。 年月日の数字は全角でも、日付シリアル値に変えてくれるようだ。 もちろん1900年以後に当たる年号と年の場合ですが。
別解として、 =MID(A1,2,2)+1925*(LEFT(A1,1)="昭")+1988*(LEFT(A1,1)="平")
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 最初のFINDで既にエラーになります。 =IF(SUM(COUNTIF(A1,{"昭*","平*"})),以下はSUBSTITUTEの数式)
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答1,2です。 IF関数を重複して使っていますね。最初のIFでエラーになってしまっては全体がエラーとなりますが、最初のIFで正しい答えとなればエラー表示はされません。そのため昭のあるデータについては最初のIFの条件に合っていますので正しい答えが得られるのです。平のデータでは最初のIFでエラーとなりますので全体がエラーとなってしまいますね。
- keithin
- ベストアンサー率66% (5278/7941)
>平成の変換(平23→2011等)を試すと しょっぱなの「FIND("昭",A1)」の部分を別セルに書き出して計算させてみると判りますが,このエラーが続き全てを圧して#VALUEの原因になっています。 教科書的な定石としては IFERROR(FIND("昭",A1)) のようにして,昭があっても「なくても」エラーだけは出さないように組み立てます。 計算例: =IF(ISNUMBER(FIND("昭",A1)),SUBSTITUTE(A1,"昭","")+1925,IF(ISNUMBER(FIND("平",A1)),SUBSTITUTE(A1,"平","")+1989,"OTHER"))
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答1ですが平成の時の1989は1988に直すことが必要でしょう。 =IF(NOT(ISERROR(FIND("昭",A1))),SUBSTITUTE(A1,"昭",)+1925,IF(NOT(ISERROR(FIND("平",A1))),SUBSTITUTE(A1,"平",)+1988,))
- KURUMITO
- ベストアンサー率42% (1835/4283)
FIND関数はその文字がない場合にはエラー表示になります。 次のようにすればよいでしょう。 =IF(NOT(ISERROR(FIND("昭",A1))),SUBSTITUTE(A1,"昭",)+1925,IF(NOT(ISERROR(FIND("平",A1))),SUBSTITUTE(A1,"平",)+1989,))