アカウント名:
パスワード:
以下の条件でやってみる。
ついでに、数式をなるべく短くすることを考える。(以下では、月はA1セルに格納されているものとする。)
まず、愚直にテーブル引きで実装して、
=INDEX(A1,31,28,31,30,31,30,31,31,30,31,30,31)
月の値はいずれも30日に近いから、30から差分を増減させるように書き換えると、
=30+INDEX(A1,1,-2,1,0,1,0,1,1,0,1,0,1)
これって2月(28日)を別にすると、大の月(31日)と小の月(30日)がほぼ交互に並んでいるように見え
これ短くていいですね。
私がExcelでやると愚直にテーブル使ってこんな感じ↓です(A1セルに月が入っている前提)。ちょっと長いですね。
=MOD(QUOTIENT(62648012,(4^A1)),4)+28
Cで書くと意図が明瞭になるのに、Excel関数だとすごくわかりづらい…。
ぎょゑ^^;Excel2013以降ならビット演算関数が使えるので、多少は見通しが良くなります。BITAND(62648012,3*4^A1)/4^A1+28
というか、その手法を見て気がついてしまった。Excelは文字列演算ができるんだから、素直に10進整数で行けるじゃんか〜=MID(323233232303,A1,1)+28
うん、短い。
おお、こちらの方が意図が明瞭で解りやすく、かつ短いですね。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
一つのことを行い、またそれをうまくやるプログラムを書け -- Malcolm Douglas McIlroy
in my case (スコア:1)
以下の条件でやってみる。
ついでに、数式をなるべく短くすることを考える。
(以下では、月はA1セルに格納されているものとする。)
まず、愚直にテーブル引きで実装して、
=INDEX(A1,31,28,31,30,31,30,31,31,30,31,30,31)
月の値はいずれも30日に近いから、30から差分を増減させるように書き換えると、
=30+INDEX(A1,1,-2,1,0,1,0,1,1,0,1,0,1)
これって2月(28日)を別にすると、大の月(31日)と小の月(30日)がほぼ交互に並んでいるように見え
Re: (スコア:2)
これ短くていいですね。
私がExcelでやると愚直にテーブル使ってこんな感じ↓です(A1セルに月が入っている前提)。ちょっと長いですね。
=MOD(QUOTIENT(62648012,(4^A1)),4)+28
Cで書くと意図が明瞭になるのに、Excel関数だとすごくわかりづらい…。
Re: (スコア:1)
ぎょゑ^^;
Excel2013以降ならビット演算関数が使えるので、多少は見通しが良くなります。
BITAND(62648012,3*4^A1)/4^A1+28
というか、その手法を見て気がついてしまった。
Excelは文字列演算ができるんだから、素直に10進整数で行けるじゃんか〜
=MID(323233232303,A1,1)+28
うん、短い。
Re:in my case (スコア:2)
おお、こちらの方が意図が明瞭で解りやすく、かつ短いですね。