今回の問題は何が正しいのかが、、、分からない
何時から何時までは何年なのか、、、分からない
これでは答えようが無い
けど、、、、出題者故、答えなくてはならない
と言う事で、式を書いてみました、、、
しかし上記故、、、不正解の可能性、、、99%
<考え方>
最大54321を得ている故
紀元前・後共に1900年1月1日~2048年9月20日
の日付のみしか出てこない
そこで紀元前2048年9月20日をシリアル値1としてDATEDIFで、、、
{=ABS(DATEDIF(ABS(REPLACE(B5,1,MATCH(0,0/MID(B5,ROW($1:$4),1),)-1,MID("mtsh",FIND(LEFT(B5),"明大昭平"&B5),1))+IF(LEFT(B5)="紀",-54322,54321)),REPLACE(B7,1,MATCH(0,0/MID(B7,ROW($1:$4),1),)-1,MID("mtsh",FIND(LEFT(B7),"明大昭平"&B7),1))+IF(LEFT(B7)="紀",1406648,1515291),"y")+(COUNTIF(B5:B7,"紀*")=1)*3800-4000)}
(からくちさん談)
------------------------------------------------------------------------------------
※角田さんから頂いた検証用シートです。ご利用下さい。
http://www.h3.dion.ne.jp/~sakatsu/index.htm
-------------------------------------------------------------------------------------
1. minさんの解答例 Q113_min_sanをダウンロード
2. 角田さんの解答例 Q113_Tsunoda_sanをダウンロード
3. ジョー3さんの解答例:404手(文字)
{=MAX(DATEDIF(MIN(IF(B5:B7="","",IF(LEFT(B5:B7)="紀",(6000-MID(B5:B7,4,4)&MID(B5:B7,8,6))*1,2191455+IF(LEFT(B5:B7)<"3",B5:B7,SUBSTITUTE(SUBSTITUTE(B5:B7,".","年",1),".","月")&"日")*1)))+{1,0},MAX(IF(B5:B7="","",IF(LEFT(B5:B7)="紀",(6000-MID(B5:B7,4,4)&MID(B5:B7,8,6))*1,2191455+IF(LEFT(B5:B7)<"3",B5:B7,SUBSTITUTE(SUBSTITUTE(B5:B7,".","年",1),".","月")&"日")*1)))+{1,0},"Y")-(((LEFT(B5)="紀")+(LEFT(B7)="紀"))=1))}
1)
4年
100年
400年
ゆえ
400年の倍数ずらすと、、、調整できるから、、、私は6000年ずらしました。
-4000~+4000ぐらいが、、、・・・・幅広がるから・・・・
2)
2月29日 2月28日の 調整のため
次の日を参考に見て、{1,0}
3/1 3/1 か、どうかをチェックしました。
・・・・・
投稿情報: jyo-3 | 2012年1 月21日 (土曜日) 午後 08時27分
解答を用意した人には頭が下がります。
私はワンセルでこんな長手数になる問題は
ぜんぜん、まとめられません。◇\(o・Q・o)/◇
投稿情報: くまぷー | 2012年1 月21日 (土曜日) 午後 08時36分
紀元前1977/5/21
紀元前1925/5/21
私のは52年になりますが???これは??
投稿情報: jyo-3 | 2012年1 月21日 (土曜日) 午後 09時10分
あ、、、
1900/1/1から1900/2/29の1日のずれは、、、考慮してない気がします。
投稿情報: jyo-3 | 2012年1 月21日 (土曜日) 午後 09時31分
>1900/1/1から1900/2/29の1日のずれは、、、考慮してない気がします。
あ、、その、、、-・・・(紀元前)・・・・・もですけど、、、
投稿情報: jyo-3 | 2012年1 月21日 (土曜日) 午後 09時35分
角田さんのは配列じゃないんだ!!
びっくりです!!
ユニーク大賞!!
投稿情報: くまぷー | 2012年1 月21日 (土曜日) 午後 10時04分
パソコン使えないから角田さんのファイルの中を見られないのでさっぱりです。
多分私のは全くダメだと思います。
多分こっちのほうがまだ良いのではないかな。
341{=SUM(SMALL(IF({1;0;1},IF(LEN(B5:B7)〉10,1-MID(B5:B7,4,4),IF(B5:B7〉"9",MID(18671988&19111925,MMULT((B5:B7〈{"弊","晶","第","盟","徽"})*1,1^ROW(1:5))*4-3,4)+MID(B5:B7,3,2),LEFT(B5:B7,4)*1))+((LOOKUP(,-("0 "&RIGHT(SUBSTITUTE(B5,{"-","/","."}," -"),8)))-LOOKUP(,-("0 "&RIGHT(SUBSTITUTE(B7,{"-","/","."}," -"),8))))*{1,0;0,0;0,-1}〈0)),{2;3})*{-1;1})}
携帯だからうまくいくかな?
投稿情報: min | 2012年1 月21日 (土曜日) 午後 10時06分
++
+-
-+
--
の場合が複雑ですね。
投稿情報: jyo-3 | 2012年1 月21日 (土曜日) 午後 10時19分
>携帯だからうまくいくかな?
minさん、どもです。
#N/Aがでてしまうことがけっこうあります。
でも携帯から、これだけ打つなんて頭が下がります。
検証用シートで試してみると
答がジョー3さん&角田さん派と
からくちさん派とわかれているようです。
投稿情報: くまぷー | 2012年1 月21日 (土曜日) 午後 10時23分
あら、
〈〉を
<>にしてもだめですかぁ
投稿情報: min | 2012年1 月21日 (土曜日) 午後 10時28分
>答がジョー3さん&角田さん派と
>からくちさん派とわかれているようです。
>答がジョー3さん&角田さん派と・・・・&minmax・・・・みたい、、、
投稿情報: jyo-3 | 2012年1 月21日 (土曜日) 午後 10時35分
>〈〉を <>にしてもだめですかぁ
もちろん、直していますよ~
私の修正ミスかもしれないけど
答がでるときと#N/Aになるときが・・・
投稿情報: くまぷー | 2012年1 月21日 (土曜日) 午後 10時36分
>〈〉を <>にしてもだめですかぁ
・・・・・
私のテストでは、、、エラーが出ません。。。
投稿情報: jyo-3 | 2012年1 月21日 (土曜日) 午後 10時38分
もしかしたら
スペース2個が
1個になっているのか?
" -"
はスペース2個です。
投稿情報: min | 2012年1 月21日 (土曜日) 午後 10時40分
>" -"
>はスペース2個です。
そ、、そうです。
投稿情報: jyo-3 | 2012年1 月21日 (土曜日) 午後 10時51分
>" -"
これだと思われる4カ所を
半角スペース2個にしてみましたが
#N/Aのままです。
投稿情報: くまぷー | 2012年1 月21日 (土曜日) 午後 11時40分
文字数341になっていますか?
配列数式になっていますか?
投稿情報: min | 2012年1 月22日 (日曜日) 午前 12時07分
やってないし、長いのばかりで解読する気力なしですw
皆さんようやる・・・・
投稿情報: y sakuda | 2012年1 月22日 (日曜日) 午前 12時43分
飲み会から、やっと帰って来た。
さぁ~、これから見よっと。
皆さん、どんなのか楽しみ♪
やっぱ、ここの常連さんは配列数式なのね。
わたしは、最古の紀元前2048年がシリアル値範囲(1~、1900年~)になり、
400年の倍数という事で4000年シフトさせて全てプラスにした上で
ABS(TRUNC(2000.0229 - 1980.0301))
という風に、月日を小数部にした引算にしました。
ちなみに、"紀元前"を外した「日付抽出のみ」では下記が一番短かった。
=VALUE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B5,"紀元前",""),MID(B5,5+(LEN(B5)>10)*3,1),"年"),"年","月",2)&"日")
5文字目(紀元前は8文字目)が区切り文字なので、その文字を取り出して
2つとも"年"に置換、その後、2つ目の"年"を"月"に置換、末尾に"日"を
付加すれば、日付変換可能な yyyy年m月d日 に統一されます。
あとは、先頭文字の大小順
[1]900 < [2]048 < [紀]元前 < [昭]和 < [大]正 < [平]成 < [明]治
とか、
紀元前(BC)だけ11文字~、他(AD)は ~10文字
を判定材料に使ったりですね。
投稿情報: 角田 | 2012年1 月22日 (日曜日) 午前 01時26分
>文字数341になっていますか?
>配列数式になっていますか?
配列数式にしています。
配列括弧無しで339です。
ですから、配列括弧の分を加えると341です。
投稿情報: くまぷー | 2012年1 月22日 (日曜日) 午前 06時42分
>長いのばかりで解読する気力なしですw
私の場合、長いのばかりで解読する能力なしです。m(__)m
投稿情報: くまぷー | 2012年1 月22日 (日曜日) 午前 06時46分
minmaxさん
角田さん
ジョー3
3っつ並べて、テスト・・・・
ほとんど、同じです。
ですが、、、
紀元前1907/12/13
紀元前1996/12/13
などが、違った計算になるようです。
投稿情報: ジョー3 | 2012年1 月22日 (日曜日) 午前 07時16分
>長いのばかりで解読する気力なしですw
>私の場合、長いのばかりで解読する能力なしです。m(__)m
わたしのが、、一番単純と思いますが、、、・・・
6000年ずらして、、、datedif・・・だから、、、
投稿情報: ジョー3 | 2012年1 月22日 (日曜日) 午前 07時20分
心配なケース
平成33.2.21
1900-2-22
私のは、121年と算定・・・でも、120年のはず、、、に、見える。
(minmaxさんも、角田さんも、きちんと120年)
・・・・・・・・・・・・・・・
・・・・・いいわけ、、
・・・・・・・・・・・・・・・
1900-2-29をなくしてるので、
計算時は、1900-2-21として、計算しております。
・・・・
投稿情報: ジョー3 | 2012年1 月22日 (日曜日) 午後 01時16分
>今回の問題は何が正しいのかが、、、分からない
>何時から何時までは何年なのか、、、分からない
>これでは答えようが無い
そそ、、、、で、、、
好きなように、、、解釈した。・・・
・・・
で、
面白すぎ&難しすぎだった。
投稿情報: ジョー3 | 2012年1 月22日 (日曜日) 午後 01時24分
ジョー3 のは、配列数式であるのを除けば、
私ので言う[ 4ymd1b & DEF1 ] に、ほぼ同じですね。
DATEDIF は[古⇒新]なので、MIN/MAX 噛ませて全部で4個の変換式が必要なので
2個で済む [数値化&絶対値] にしました。
配列数式で、そういう風にすれば、2個で済むのか~
でも、MIN( )+{1,0},MAX+{1,0} の +{1,0} の効果が分からないし、大外の MAX は?
私は、紀元前を[ 4000-年+1 ]にしましたが、そのお蔭で『-1999/2/29』が
出てしまって、エラーを避けるのに DATE(4001-年,月,日) になりました[4ymd1c]
ジョー3 のは、[年+1]をしないので 2/29 のエラーが出ない代わりに、
紀元前~紀元後 の時に 1年余分になるので、それを補正するのが末尾の
-(((LEFT(B5)="紀")+(LEFT(B7)="紀"))=1)
ですね。
あと、西暦・和暦を一緒にすれば 15文字*2 ⇒ 30文字短縮になりますよ。
IF(LEFT(B5:B7)<"3",
B5:B7,SUBSTITUTE(SUBSTITUTE(B5:B7,".","年",1),".","月")&"日")
↓
SUBSTITUTE(SUBSTITUTE(B5:B7,MID(B5:B7,5,1),"年",1),".","月")&"日"
投稿情報: 角田 | 2012年1 月22日 (日曜日) 午後 01時44分
> 平成33.2.21 ~ 1900-2-22
> 私のは、121年と算定・・・でも、120年のはず
わたしのでも、式(P)が同じ。
1日ズレを補正すると、1変換につき60文字増で、式(Q)では大きく後退。
投稿情報: 角田 | 2012年1 月22日 (日曜日) 午後 01時52分
> 角田さんのは配列じゃないんだ!!
> びっくりです!!
> ユニーク大賞!!
あぁ、やっぱり、「マニアック」な名前だけあって、ここは異世界だったか・・・
配列数式が「当たり前」で最大与党なんだ・・・
わたし、議場の隅っこに居る共産党の気分(笑)
投稿情報: 角田 | 2012年1 月22日 (日曜日) 午後 02時00分
ジョー3 の式を判り易くネスト(で表示されるかな?)
{=
MAX(
DATEDIF(
MIN(
IF(B5:B7="",
"",
IF(LEFT(B5:B7)="紀",
(6000-MID(B5:B7,4,4)&MID(B5:B7,8,6))*1,
2191455+IF(LEFT(B5:B7)<"3",
B5:B7,
SUBSTITUTE(SUBSTITUTE(B5:B7,".","年",1),".","月")&"日"
)*1
)
)
)+{1,0},
MAX(
IF(B5:B7="",
"",
IF(LEFT(B5:B7)="紀",
(6000-MID(B5:B7,4,4)&MID(B5:B7,8,6))*1,
2191455+IF(LEFT(B5:B7)<"3",
B5:B7,
SUBSTITUTE(SUBSTITUTE(B5:B7,".","年",1),".","月")&"日"
)*1
)
)
)+{1,0},
"Y"
)-(((LEFT(B5)="紀")+(LEFT(B7)="紀"))=1)
)
}
投稿情報: 角田 | 2012年1 月22日 (日曜日) 午後 02時10分
> ABS(TRUNC(2000.0229 - 1980.0301))
>という風に、月日を小数部にした引算にしました。
・・・・・
>DATEDIF は[古⇒新]なので、MIN/MAX 噛ませて全部で4個の変換式が必要なので
>2個で済む [数値化&絶対値] にしました。
・・・・
少数計算:危険性ありませんか?
たとえば、前に述べたデータ、、、
>紀元前1907/12/13
>紀元前1996/12/13
>などが、違った計算になるようです。
89年の筈が、、、
88.9999999999998で、
88に、、、なっちゃいませんか?
・・・・誤解ならごめん!!
投稿情報: ジョー3 | 2012年1 月22日 (日曜日) 午後 02時44分
>MIN( )+{1,0},MAX+{1,0} の +{1,0} の効果が分からないし、大外の MAX は?
角田さんに教えて頂いた、、
閏年29-平年28の場合の誤計算防止のつもりでした。
2/29---2/28 =あと1日で1年追加?
{1,0}によって、、
3/1---3/1 =もう1年追加で良い??
その、、maxで、、、
1年追加となりましたーーー
という、読みでした。・・・・・===余計なことしちゃってるかなーーー
投稿情報: ジョー3 | 2012年1 月22日 (日曜日) 午後 02時51分
>あと、西暦・和暦を一緒にすれば 15文字*2 ⇒ 30文字短縮になりますよ。
短縮苦手ーーーー(´д`)
minmaxさんの手にかかったら、、、これ、どこまで短縮するか?
それにしても、今回の
minmaxさんの式・・・・なんで、こんなに正確に動くのか分からん!!・・・・
(スペースの追加場所を間違えるとエラー頻発だが)
投稿情報: ジョー3 | 2012年1 月22日 (日曜日) 午後 02時56分
> 89年の筈が、、、
> 88.9999999999998で、
> 88に、、、なっちゃいませんか?
( ̄Δ ̄;)
なってます! 間違いなく失敗だぁ _| ̄|○
投稿情報: 角田 | 2012年1 月22日 (日曜日) 午後 03時13分
min さんの式もネスト。複雑だ!
途中の IF で ,FALSE が省略記述 になっているのが
判らなくて、カッコの対応が取れないと悩みました。
さて、どういう仕組みなのやら・・・
{=
SUM(
SMALL(
IF({1;0;1},
IF(LEN(B5:B7)>10,
1-MID(B5:B7,4,4)
,
IF(B5:B7>"9",
MID(18671988&19111925,
MMULT((B5:B7<{"弊","晶","第","盟","徽"})*1,
1^ROW(1:5))*4-3,
4)
+MID(B5:B7,3,2)
,
LEFT(B5:B7,4)*1
)
)
+
(
(
LOOKUP(,-("0"&RIGHT(SUBSTITUTE(B5,{"-","/","."}," -"),8)))
-LOOKUP(,-("0"&RIGHT(SUBSTITUTE(B7,{"-","/","."}," -"),8)))
)*{1,0;0,0;0,-1}<0
),
FALSE
)
,{2;3}
)*{-1;1}
)
}
投稿情報: 角田 | 2012年1 月22日 (日曜日) 午後 03時18分
からくち さんの式。う~ん、見るからに凄く短いぞ。
{=
ABS(
DATEDIF(
ABS(
REPLACE(B5,
1,
MATCH(0,0/MID(B5,ROW($1:$4),1),)-1,
MID("mtsh",FIND(LEFT(B5),"明大昭平"&B5),1)
)
+IF(LEFT(B5)="紀",-54322,54321)
),
REPLACE(B7,
1,
MATCH(0,0/MID(B7,ROW($1:$4),1),)-1,
MID("mtsh",FIND(LEFT(B7),"明大昭平"&B7),1)
)
+IF(LEFT(B7)="紀",1406648,1515291)
,
"y"
)
+(COUNTIF(B5:B7,"紀*")=1)*3800-4000)
}
投稿情報: 角田 | 2012年1 月22日 (日曜日) 午後 03時32分
> 89年の筈が、、、
> 88.9999999999998で、
そうだ、こうすれば良いんだ♪
=ABS(TRUNC((4000+年B5)&月日B5-(4000+年B7)&月日B7)/10000))
=ABS(TRUNC(TEXT(日付B5,"YYYYMMDD")-TEXT(日付B7,"YYYYMMDD")/10000))
投稿情報: 角田 | 2012年1 月22日 (日曜日) 午後 04時20分
> "弊","晶","第","盟","徽"
平,昭,大,明,紀 のコード上1つ後の文字というのは判った。
<= より < で「1文字短縮」という事だと思う。
そのあとが判らない。配列数式に頭が馴染んでいないせい?
投稿情報: 角田 | 2012年1 月22日 (日曜日) 午後 04時49分
>> "弊","晶","第","盟","徽"
>平,昭,大,明,紀 のコード上1つ後の文字というのは判った。
へーーー、、、まだ、気付いてなかった。
> <= より < で「1文字短縮」という事だと思う。
わーー、、、減量の・・・・テク???・・・・・・
投稿情報: ジョー3 | 2012年1 月22日 (日曜日) 午後 05時14分
> min さんの式
SUM(
SMALL(
IF({1;0;1}, B6の除外⇒偽側のFALSE値(0)
【B5/B7】
,
FALSE
)
,{2;3} 一番小さい値(0[FALSE]=B6)を除外&2番目・3番目の順に並べて
)*{-1;1} 2番目(小さい方)をマイナスにして、SUMで『大 - 小』にしている
)
ここまでは、やっと判った。 ・・・けど、肝心の中核部分が難しい
投稿情報: 角田 | 2012年1 月22日 (日曜日) 午後 05時39分
>ここまでは、やっと判った。 ・・・けど、肝心の中核部分が難しい
うわーー、、すげーーー・・・解析が・・・
・・・・・・
いつもの、、
sakudaさんみたいに、、、、・・・・・
・・・・・・・・・すごいーーー
投稿情報: ジョー3 | 2012年1 月22日 (日曜日) 午後 05時54分
> min さんの式 「年」部分
IF(LEN(B5:B7)>10,
1-MID(B5:B7,4,4) '紀元前(11~13文字)の年
,
IF(B5:B7>"9", '[1]900<[2]048<[9]<[紀]元前<[昭]和<[大]正<[平]成<[明]治
//和暦、改元年(明治[1867],平成[1988],大正[1911],昭和[1925])
MID(18671988&19111925,
MMULT(
(B5:B7<{"弊","晶","第","盟","徽"})*1,
1^ROW(1:5)
) '⇒明治(1),平成(2),大正(3),昭和(4)
*4-3,4)
+MID(B5:B7,3,2) '改元の年+和暦の年(1年大きく算出される?)
,
LEFT(B5:B7,4)*1 '西暦の年
)
)
> IF(B5:B7>"9",
そうか、LEFT( ,1)は無くても良い訳だ!
> "弊","晶","第","盟","徽"
平,昭,大,明,紀 のコード上1つ後の文字
[紀]元前<[昭]和<[大]正<[平]成<[明]治
> MMULT(B5:B7<{"弊","晶","第","盟","徽"}*1,1^ROW(1:5))
{紀昭大平,紀昭,紀昭大,紀昭大平明,紀}*{1,1,1,1,1}
明治⇒{0,0,0,1,0}*{1,1,1,1,1}⇒1
大正⇒{1,0,1,1,0}*{1,1,1,1,1}⇒3
昭和⇒{1,1,1,1,0}*{1,1,1,1,1}⇒4
平成⇒{1,0,0,1,0}*{1,1,1,1,1}⇒2
明治(1),平成(2),大正(3),昭和(4)
でも、この並びになった意味が?
FIND(LEFT(B5:B7,1),"昭大平明")
> MID(18671988&19111925,
MID(19251911&19881867,
の方が簡単では?
投稿情報: 角田 | 2012年1 月22日 (日曜日) 午後 06時46分
角田さん
凄い解析。かなりの実力の方
逆の立場だったらあきらめていると思います。
結構いい線いってます。
find使えば多少短くなるとは思っていましたがmmultのほうが分かりにくいと思って採用しました。
まだpc使えないから後程
投稿情報: min | 2012年1 月22日 (日曜日) 午後 07時29分
> '改元の年+和暦の年(1年大きく算出される?)
勘違いでした。合ってます。
投稿情報: 角田 | 2012年1 月22日 (日曜日) 午後 08時01分
駄目だ、後半の LOOKUP(月日の大小による補正?)が皆目判らない!
投稿情報: 角田 | 2012年1 月22日 (日曜日) 午後 09時35分
今回の問題、当初400年の倍数をずらして最初はdatedifでやっていました。
そうなると、紀元前の紀元前1900-2-29なんてあり得ない日の判定ができない。
それでいいと思っていましたが、コメントを見ていると違うみたいでした。
では、うるう年があるかないかに依存しない式を書くことに。
単純に年の差を求めて、
それに月日の大小を判定して調整してやることにしました。
つまり、1901/2/29などというあり得ない日付が入力されても判定できるようにしました。
それにしても奥が深い問題でしたね。
まず、
>IF({1;0;1}, B6の除外⇒偽側のFALSE値(0)
その通りです。
たとえば、ジョー3さんの場合、b6に何かが入力されていたら、誤計算または、エラーになってしまいますのでそれを回避しています。
投稿情報: min | 2012年1 月22日 (日曜日) 午後 11時43分
>後半の LOOKUP(月日の大小による補正?)が皆目判らない!
前半の年の差を求めるのは解説していただいていますので、
月日の大小を求める補正の式について、、
まず、
"0 "&RIGHT(SUBSTITUTE(B5,{"-","/","."}," -"),8)
については、
b5には、必ず「-」、「/」、「.」のどれかが区切りに使われています。
したがって、
たとえば、「/」があれば
右から8文字は
「 -月 -日」になり、頭に「0 」を付けることによって
「0 -月 -日」となります。
これに-をかけることによって
2000年?月?日のシリアル値にマイナスをかけた数値になります。
その他の
場合はシリアル値に変換できないのでマイナスをかけるとエラーになります。
そのうえで、LOOKUPはエラーを無視しますので
LOOKUP(,{エラー,数値,エラー}であった場合、
数値の部分を答えとします。
同様にb7も同じ式で数値を求めます。
そして「b5の結果」-「b7の結果」で差を求めます。
投稿情報: min | 2012年1 月23日 (月曜日) 午前 12時20分
(「b5の結果」-「b7の結果」)*{1,0;0,0;0,-1}
の{1,0;0,0;0,-1}の部分のうち真ん中の「0,0」はダミーなので
>IF({1;0;1}, B6の除外
としているので、たとえば、真ん中を「"あ",1」などとしても影響はありません。
あくまでも
「{1,0」と「0,-1}」の部分しかみません。
投稿情報: min | 2012年1 月23日 (月曜日) 午前 12時32分
(「b5の結果」-「b7の結果」)
これについては、
-「b5の月日」--「b7の月日」
となり、すなわち
「b7の月日」-「b5の月日」
となります。
「b7の月日」-「b5の月日」<0
は「b7の月日」-「b5の月日」がマイナスだったら
TRUE
すなわち、B5の月日の方がB7の月日より大きかったら1をたすとなります。
(「b7の月日」-「b5の月日」」)*{1,0;0,0;0,-1}<0
については、
{B5の月日の方が大きい,そのまま;ダミー,ダミー;そのまま,B7の月日の方が大きい}
となります。
ここまで書いてみて、とりあえずわかってもらえるような表現になっているのか不安。。
投稿情報: min | 2012年1 月23日 (月曜日) 午前 01時02分
> " -"はスペース2個です。
これを見落としてた(そもそも、スペースなんて無いと)。
だから、幾ら見ても「右から8文字」が理解できなかった。
(スペース 半角のロ)
紀元前yyyy/m/d ⇒ 0ロロ-mロロ-d
紀元前yyyy/m/dd ⇒ 0ロ-mロロ-dd
紀元前yyyy/mm/d ⇒ 0ロ-mmロロ-d
紀元前yyyy/mm/dd ⇒ 0-mmロロ-dd
yyyy-m-d ⇒ 0ロロ-mロロ-d
yyyy-m-dd ⇒ 0ロ-mロロ-dd
yyyy-mm-d ⇒ 0ロ-mmロロ-d
yyyy-mm-dd ⇒ 0-mmロロ-dd
昭和yy.m.d ⇒ 0ロロ-mロロ-d
昭和yy.m.dd ⇒ 0ロ-mロロ-dd
昭和yy.mm.d ⇒ 0ロ-mmロロ-d
昭和yy.mm.dd ⇒ 0-mmロロ-dd
なるほど、確かに、月と日だけ抜き出せてますね。
2012-3-1
{"-" , "/" , "."}
"0ロロ-3ロロ-1" "02012-3-1" "02012-3-1"
2000/3/1 #VALUE #VALUE
間にスペースが挟まっていても日付変換するとは知らなかった!
投稿情報: 角田 | 2012年1 月23日 (月曜日) 午前 01時37分
" 0"&のスペース1個も味噌です。
投稿情報: min | 2012年1 月23日 (月曜日) 午前 01時52分
間違い
"0 "&のスペース1個も味噌です。
投稿情報: min | 2012年1 月23日 (月曜日) 午前 01時56分
みなさん凄すぎ(-.-)
これだけ解析して頂いてはじめて「ほぉー」と、うなずいています。
自分がやったものは結局 600文字を超えてるのに
うるう年が合わせられず 投稿にいたらず終了。
次元が違うんですね。きっと!!
投稿情報: 春 | 2012年1 月23日 (月曜日) 午前 08時31分
皆さんありがとうございました。
とくに、、
からくちさん:面倒な、出題をお願いしました。ありがとうございました。
角田さん、 :暦について、教えられました。ありがとうございました。
minmaxさん :技術的な工夫、ありがとうございました。
大変、楽しく遊べました。・・・・(ちょっと苦しかったが)・・・
・・・・・・・・・・・・・
投稿情報: ジョー3 | 2012年1 月23日 (月曜日) 午後 12時54分
からくち さんの式
REPLACE(B5,
1,
MATCH(0,0/MID(B5,ROW($1:$4),1),)-1,
MID("mtsh",FIND(LEFT(B5),"明大昭平"&B5),1)
)
MATCH(0,0/MID(B5,ROW($1:$4),1),)-1
紀元前1900/1/1 ⇒ {0/紀,0/元,0/前,0/1} ⇒ {#V,#V,#V,0} ⇒ 4-1=3
2012-1-1 ⇒ {0/2,0/0,0/1,0/2} ⇒ {0,#D,0,0} ⇒ 1-1=0
明治40.1.1 ⇒ {0/明,0/治,0/4,0/0} ⇒ {#V,#V,0,#D} ⇒ 3-1=2
MID("mtsh",FIND(LEFT(B5),"明大昭平"&B5),1)
紀元前1900/1/1 ⇒ MID("mtsh",FIND("紀","明大昭平紀元前1900/1/1"),1) ⇒ ""
2012-1-1 ⇒ MID("mtsh",FIND("2","明大昭平2012-1-1"),1) ⇒ ""
明治40.1.1 ⇒ MID("mtsh",FIND("明","明大昭平明治40.1.1"),1) ⇒ "m"
紀元前1900/1/1 ⇒ REPLACE("紀元前1900/1/1",1,3,"") ⇒ 1900/1/1
2012-1-1 ⇒ REPLACE("2012-1-1",1,0,"") ⇒ 2012-1-1
明治40.1.1 ⇒ REPLACE("明治40.1.1",1,2,"m") ⇒ m40.1.1
~~~~~~~~~~~
ABS(
DATEDIF(
ABS(B5年月日+IF(LEFT(B5)="紀",-54322,54321)),
B7年月日+IF(LEFT(B7)="紀",1406648,1515291),
"y")
)
+(COUNTIF(B5:B7,"紀*")=1)*3800-4000)
投稿情報: 角田 | 2012年1 月23日 (月曜日) 午後 02時26分
+(COUNTIF(B5:B7,"紀*")=1)*3800-4000)
紀~紀 ⇒ -4000
紀~他 ⇒ -200
他~紀 ⇒ -200
他~他 ⇒ -4000
投稿情報: 角田 | 2012年1 月23日 (月曜日) 午後 02時30分
紀2048/9/20<紀1900/1/1<BC1<AD1<1900/1/1<2048/9/20
[54321] [1] [1] [54321]
↓ ↓ ↓ ↓
B5年月日+IF(LEFT(B5)="紀",-54322,54321)
↓ ↓ ↓ ↓
ABS[-1] ABS[-54321] [54322] [108642]
↓ ↓ ↓ ↓
紀1900/1/1 > 紀2048/9/20 2048/9/21 2197/6/12
紀元前の大小が逆転して月日も変わってる?
> 紀元前2048年9月20日をシリアル値1として
という事か!
投稿情報: 角田 | 2012年1 月23日 (月曜日) 午後 02時59分
角田さん、詳細な分析、ありがとうございます。
今回は角田さんが参加してくれなかったら
どうなっていたことやら・・・
問題が大家の力量を大きく超えてしまったので
いろいろ、コメントできずに申し訳ありませんでしたm(__)m
しかし、ジョー3さんの情熱・・・
minさんの技術には頭が下がります。
仮にもなんらかの答を出した方々・・・
>みなさん凄すぎ(-.-) ×2
投稿情報: くまぷー | 2012年1 月23日 (月曜日) 午後 09時38分
角田さんの式を見てみました。
なんか今回は難しく考えすぎたのかなと思った。
S**.**.**の方は考えたけど
昭和**年**月**日にするのをすっかり忘れていたし。
で、角田さんのを見ていたら単純に減らしてみたくなってやってみました。
250文字
=INT(ABS((IF(LEN(B5)>10,1-MID(B5,4,4),YEAR(LEFT(B5,4)&"年1月1日"))+TEXT(SUBSTITUTE(MID(B5,6+(LEN(B5)>10)*3,5),".","/"),"M.DD")/100)-(IF(LEN(B7)>10,1-MID(B7,4,4),YEAR(LEFT(B7,4)&"年1月1日"))+TEXT(SUBSTITUTE(MID(B7,6+(LEN(B7)>10)*3,5),".","/"),"M.DD")/100)))
これではだめなんでしょうか?
まだ、余計なカッコを外すことや「/100」を「%」に置き換えることで240文字くらいになるとはおもいますが、
さらに、配列数式にすればもっと大幅に減ると思いますけど。
投稿情報: min | 2012年1 月23日 (月曜日) 午後 10時51分
あぁ~言われてみれば、よくよく見れば・・・
何で、そこに気付かないワタシ! _| ̄|○
紀元前 1-YEAR(MID(B5,4,10))
紀元前 1-MID(B5,4,4)
西暦和暦 IF(LEFT(B5,1) 「/100」を「%」に置き換えることで
上でジョー3 の指摘で小数誤差が出てるんで、yyyymmddで整数演算後に1万割です。
投稿情報: 角田 | 2012年1 月23日 (月曜日) 午後 11時42分
>さらに、配列数式にすればもっと大幅に減ると思いますけど。
1・・・・・・
た、、たた、、、、、
たんしゅくおう・・・・・と、、、、、、
投稿情報: jyo-3 | 2012年1 月23日 (月曜日) 午後 11時45分
もうちょっと減らしてみました。
194
=INT(ABS(IF(LEN(B5)>10,1-MID(B5,4,4),YEAR(LEFT(B5,4)&"年1月1日"))-1/("m33."&MID(B5,6+(LEN(B5)>10)*3,5))-IF(LEN(B7)>10,1-MID(B7,4,4),YEAR(LEFT(B7,4)&"年1月1日"))+1/("m33."&MID(B7,6+(LEN(B7)>10)*3,5))))
あっているのか保証はありません。
配列数式なら145文字でした。
投稿情報: min | 2012年1 月23日 (月曜日) 午後 11時48分
あっ、不等号が・・・
西暦和暦 YEAR(LEFT(B5,4)&"年1月1日")
西暦和暦 IF(LEFT(B5,1)<"昭",YEAR(B5),YEAR(LEFT(B5,4)&"年1月1日"))
DATEDIFを使わない整数演算だから、4000も要らなかったですね。
初期の式のシリアル値の縛りを引き摺ったか・・・
投稿情報: 角田 | 2012年1 月23日 (月曜日) 午後 11時49分
=ABS(TRUNC(
=INT(ABS(
あぁ~、順番変えるだけで、2文字短縮かぁ~
!
投稿情報: 角田 | 2012年1 月24日 (火曜日) 午前 12時02分
配列数式だとこんな感じ
{=INT(ABS(SUM(IF({1;0;1},(IF(LEN(B5:B7)>10,1-MID(B5:B7,4,4),YEAR(LEFT(B5:B7,4)&"年1月1日"))-1/("m33."&MID(B5:B7,6+(LEN(B5:B7)>10)*3,5)))*{1;0;-1}))))}
です。
ん、147かな?
投稿情報: min | 2012年1 月24日 (火曜日) 午前 12時09分
("m33."&MID(B7,6+(LEN(B7)>10)*3,5))
紀元前・西暦・和暦どれでも、月日部分の「1月1日からの日数?(閏年ベース)」
m33.1/23 m33.1-23 区切文字が混ざってても日付変換するとは!
それを
+1/日数
-1/日数
? 判らない ?
投稿情報: 角田 | 2012年1 月24日 (火曜日) 午前 01時27分
ほほーーー
147
きちんと動いてます。
すごいですねーーー。・・・・・・すばらしい。
投稿情報: ジョー3 | 2012年1 月24日 (火曜日) 午前 09時02分
ここで思い出した。
最初の頃の、、わたしの、予想(コメントで)・・・・
>>しかし、確かにこのままでは尋常ならざる文字数に・・・
>予感だけは、、、どなたかが、、、すっきり・・・・
>100文字台で、、、、・・・・・・も、も、もちろん、、、
>自分が自信!!・・・では、、ないですーーー・・・・・けど、、、、
あたったーーー・・・・・
(俺の自慢することでもないが)
投稿情報: ジョー3 | 2012年1 月24日 (火曜日) 午前 09時32分
角田さん:参加して、進行をリードして頂き、感謝でした。
minmaxさん、、、角田さんを、、もてなして頂いて、、ありがとうございました。
てことで、、
次の、sakudaさんの問題は、、息抜きできるかなーーー
きょう・・・出題かなーーー
あ、、、
超簡単かも知れない、、、問題、、
「牛」・・・・を、作りました。
投稿情報: ジョー3 | 2012年1 月24日 (火曜日) 午前 09時38分
> +1/日数
> -1/日数
カッコの位置を間違えてた。
{=INT(
ABS(
SUM(
IF({1;0;1}, //B6 除外
(IF(LEN(B5:B7)>10,
1-MID(B5:B7,4,4), //紀元前の年
YEAR(LEFT(B5:B7,4)&"年1月1日") //西暦・和暦の年
)-1/("m33."&MID(B5:B7,6+(LEN(B5:B7)>10)*3,5)) //通算日(1/1~,2/29有)の逆数?
,FALSE
)*{1;0;-1} //B5 - B7
)
)
)}
投稿情報: 角田 | 2012年1 月24日 (火曜日) 午前 10時30分
1月1日, 1月2日, 1月3日 12月30日, 12月31日
1/1 > 1/2 > 1/3 > ~ > 1/365 > 1/366
年[2000]から引くと
1999.0 > 1999.5 > 1999.666 > ~ > 1999.9972603 > 1999.9972677
ほ~、月日の順の大小関係が出来上がってる!
こんな、右斜め上38度な向きの並みではない発想がポンポン出て来る
minmax さんの脳みその解剖をしてみたい(笑)
でも、ここまで細かい小数を使ってるから、月日で1~2日差くらいの時には
私もジョー3に指摘された小数誤差の影響が出て来ますよね。
投稿情報: 角田 | 2012年1 月24日 (火曜日) 午前 10時52分
1999.0 > 1999.5 > 1999.666
ブ~~~ 不等号の向きが逆~~~
1月1日, 1月2日, 1月3日 12月30日, 12月31日
1/1 < 1/2 < 1/3 < ~ < 1/365 < 1/366
年[2000]から引くと
1999.0 < 1999.5 < 1999.666 < ~ < 1999.9972603 < 1999.9972677
投稿情報: 角田 | 2012年1 月24日 (火曜日) 午前 11時09分
汗汗 逆数の方の大小までひっくり返してしまった(汗)
1月1日, 1月2日, 1月3日 12月30日, 12月31日
1/1 > 1/2 > 1/3 > ~ > 1/365 > 1/366
年[2000]から引くと
1999.0 < 1999.5 < 1999.666 < ~ < 1999.9972603 < 1999.9972677
投稿情報: 角田 | 2012年1 月24日 (火曜日) 午前 11時12分
場合のチェックしてて、、、、
分からなくなってしまった。
紀元前2024/2/29
紀元前1959/2/28
の場合は、、
私の式は、65年と算出され、、
他の式は、64年と算出される。。
はてはて、この場合は、どうだっけねーーーー
なんか、229---228 に、さらに紀元前が絡むと・・・頭が混乱してくる。
投稿情報: ジョー3 | 2012年1 月24日 (火曜日) 午前 11時42分
様々な場合のチェックその4?(だっけ)
紀元前2057/3/1
紀元前2024/3/1
なぜかminさんの驚異の短い式だけ、、
32年、、あとは全部33年、、
なぜか分からない・・・(式の全貌がまだ理解できてないから比較だけ)
>でも、ここまで細かい小数を使ってるから、月日で1~2日差くらいの時には
>私もジョー3に指摘された小数誤差の影響が出て来ますよね。
なのかどうかは分からない。
でも、目視では、、33年ですよね-
投稿情報: ジョー3 | 2012年1 月24日 (火曜日) 午後 02時02分
> DATEDIFを使わない整数演算だから、4000も要らなかったですね。
やっぱり「4000+年」は必要です。
紀元前1920/11/30~紀元前2004/1/3 ⇒ 84年
(-1919&"1130")-(-2003&"0103") ⇒ -19191130-(-20030103) ⇒ 838973 ⇒ 83年
((4000+(-1919))&"1130")-((4000+(-2003))&"0103") ⇒ 20811130-19970103 ⇒ 841027 ⇒ 84年
投稿情報: 角田 | 2012年1 月24日 (火曜日) 午後 03時17分
あれ?
わたしの &MMDD じゃなくて、minmax さんの -1/通算日 の方だと
やっぱり[ 4000+ ]は無くて大丈夫なのか・・・
ちゃんと84年になる。う~ん
投稿情報: 角田 | 2012年1 月24日 (火曜日) 午後 03時24分
> なぜかminさんの驚異の短い式だけ、、
> 32年、、あとは全部33年、
やっぱり小数誤差ですね。
INT(32.999999999999800) ⇒ 32
投稿情報: 角田 | 2012年1 月24日 (火曜日) 午後 03時36分
>次の、sakudaさんの問題は、、息抜きできるかなーーー
> きょう・・・出題かなーーー
いや、まだこの回のバトルが続いているので
もう少ししてからの方が良いかと・・・
>「牛」・・・・を、作りました。
送って下さい。m(__)m
このお題では久々に、ますたあさん登場か!!
投稿情報: くまぷー | 2012年1 月24日 (火曜日) 午後 05時56分
>いや、まだこの回のバトルが続いているので
もう、私の心は、、、ぼこぼこ、、、、、かも、、、、
投稿情報: ジョー3 | 2012年1 月24日 (火曜日) 午後 06時02分
>このお題では久々に、ますたあさん登場か!!
あはは、、、ばればれ、、、でも、、、、、
もう少し、、、産みの苦しみを・・・・・
投稿情報: ジョー3 | 2012年1 月24日 (火曜日) 午後 06時03分
私は、角田さんのを適当にいじってだけなので、演算誤差まで考えていません。
たとえば、
144文字
{=INT(AVEDEV(IF({1;0;1},(IF(LEN(B5:B7)>10,1-MID(B5:B7,4,4),YEAR(LEFT(B5:B7,4)&"年1月1日"))+("m33."&MID(B5:B7,6+(LEN(B5:B7)>10)*3,5))%%)*{2;0;2})))}
だとどんなぐあいでしょ?
>もう少ししてからの方が良いかと・・・
それは残念。。
投稿情報: min | 2012年1 月24日 (火曜日) 午後 07時55分
>いや、まだこの回のバトルが続いているので
>もう少ししてからの方が良いかと・・・
くまちゃーーん、、、、
だしてくれーーーーー、、、、
しんもんだいで、息抜きしないと・・・・・
・・・・・・・・・・・・・・・・
あの問題は、、、、・・・・・
・・・・・・・・・・・・・・・
行き詰まってしまう。
=気分転換しましょう!!
投稿情報: ジョー3 | 2012年1 月24日 (火曜日) 午後 07時55分
>くまちゃーーん、、、、
>だしてくれーーーーー、、、、
じゃあ、ちょっと待って下さい。
では113回と114回の2元中継ということで・・・
投稿情報: くまぷー | 2012年1 月24日 (火曜日) 午後 08時42分
>2元中継ということで・・・
はは、、、、
・・・・・・・・・・・・・・・・・
どんなだろーーーー・・・・
・・・・・・・・・・・・・・・・・・
投稿情報: ジョー3 | 2012年1 月24日 (火曜日) 午後 08時47分
ず~と働いておりましたので、結局間に合いませんでした、、
完全に仕上がってもいませんが、一応やっていたということで・・・・、、、
{=YEAR(ABS(IF(COUNTIF(5:7,"紀*")=1,SUBSTITUTE(SUBSTITUTE(TEXT(IF(LEN(B5)"z",3-(B5:B7>"昭")),MID("0MTSH",FIND(LEFT(B5:B7)," 明大昭平紀"&PI()),1))*{1;0;-1}))))-1900}
投稿情報: む印 | 2012年1 月28日 (土曜日) 午後 06時14分
あれ、またきれてしまいました、、、
やり直し、、
{=YEAR(ABS(IF(COUNTIF(5:7,"紀*")=1,SUBSTITUTE(SUBSTITUTE(TEXT(IF(LEN(B5)<11,B5,B7),"rr.m.d")&"日",".","年"),"年","月",2)-EDATE(MID(VLOOKUP("紀*",B:B,1,),4,10),YEAR(LEFT(IF(LEN(B5)<11,B5,B7),4)&"年1月1日")*24),SUM(REPLACE(B5:B7,1,IF(B5:B7>"z",3-(B5:B7>"昭")),MID("0MTSH",FIND(LEFT(B5:B7)," 明大昭平紀"&PI()),1))*{1;0;-1}))))-1900}
こんどからは、ちゃんとプレビューしてから投稿しますm(__)m
投稿情報: む印 | 2012年1 月28日 (土曜日) 午後 06時17分
む印さん、、どうもです。
動かしてみました。
紀元前、紀元前が特に??
たとえば、
紀元前1948/3/2
紀元前1903/12/14
多くの方45年
む印さん44ねんですね、
・・・・・・
投稿情報: ジョー3 | 2012年2 月 2日 (木曜日) 午後 04時48分