行をシマシマにする。グループごとにシマシマにする。
2019年7月10日
復讐の時間だよ!! \このうらみはらさでおくべきか~!!/ *1
行番号の取得、グループ番号の取得、グループごとに連番、辺りもキーワードかな?
少しでも役に立てば。
1行ごとに色を付ける

考え方は
- 行番号を取ってきて
- 2で割った余り(0:偶数、1:奇数)を出す
- 偶数奇数どっちかに色を付ける
- =ROW(そのセルのアドレス) で行番号取得
- =MOD(割られる数、割る数)で余り取得
- 条件付き書式で偶数下記数に色を設定(画像は偶数に色)
ここまではいいね? うん。私でもわかる
グループごとに色を付ける
考える
事前準備:グループでソート*2
- グループごとの連番を取得
- 上記グループ番号を2で割ったあまりを出す
- 上記余りの0か1に色を付ける
ベタな方法
一番上を1にして、グループが上の行と違ったら+1する、という方法を思いつくと思う。
=IF(H1<>H2,I1+1,I1)

こんな感じ。
ググって
=IF(A3<>A2,C2+1,IF(A3=A2,C2,COUNTIF($A$3:A3,A3)))
を見つけたが、おそらく、二つ目のIF分には意味がなく、このCOUNTIFは実行されないだろうと思う。
この式をMOD(~,2)の~に突っ込めば行と同じようにシマシマになる。
- 一番上の1のところには条件付き書式設定しない
- 偶数に色付ける
- グループ番号欄必須になる
- グループ名とグループ番号の列を固定する必要あり
追記
過去の自分がやりたいことがよくわからんがこういうことか
SUMPRODUCT? COUNTIF???
先日見つけた
=MOD(INT(SUMPRODUCT(1/COUNTIF($B$3:$B3,$B$3:$B3))),2)
のSUMPRODUCT(1/COUNTIF($B$3:$B3,$B$3:$B3))
の部分がよくわからない。INTは小数点以下切り捨て関数で・・・。
=SUMPRODUCT(1/COUNTIF(データ範囲,データ範囲))の解説は
bellcurve.jp
こちらが丁寧。φ(゚Д゚ )フムフム…ふむ?
自分用反芻(間違えてますw)

数式1
まずグループ内で1,2,3…って連番を振る。(n)
数式2
数式1の逆数を取る。(1/n)
数式3
数式2の小数点以下を除く→各グループの先頭のみが1になる
数式4
その行までの数式3を合計するとグループ番号になる

うーん分かったけど、次回使うときはまたググりそうだわ~(;´Д`)
是非フォローしてください
最新の情報をお伝えします
こんばんは。
リンク先
https://kokodane.com/2013_waza_064.htm
や
https://bellcurve.jp/statistics/blog/15370.html
で countif() の逆数を取ってる理由は、品名の初回の出現を数えるためではなさそうです。
式でやっていることは、
その行より上の範囲で、各品名が何回出てきているかを countif(範囲,範囲) で数え、
得た重複度の逆数 1/countif(範囲,範囲) を重みとして
(=範囲内に n 回出現する品名は、1回の出現が 1/n 回相当と見なして)、
sum() (または sumproduct() ) で品名を数え上げることで、
その行より上の範囲におけるユニークな品名数を求めているように見えます。
sum() を使う場合は countif() の第二引数の配列数式とする必要があるみたいです。
sumproduct() を使うとそれは不要らしい。(ここがよくわかってない)
ちなみに、https://kokodane.com/2013_waza_064.htm では
sumproduct() の結果を int() してますが、その理由はおそらく、
逆数を求めて sumproduct する計算が浮動小数点で行われるため計算結果を整数に
変換したかったからではないかと。
と思ったら、int() は端数切り捨てだった。なんで最も近い整数に丸めなかったんだろう
ありがとうございます。落ち着いたらもうひと記事書きます(><)
うーん。nを連番整数として1/nを合計すると1~2の間に収まるって事かなぁって思ってたんだけど、「1/でてくる回数」だから、合計すると1になるって感じの考え方なんですね。ROUNDだと引数増えるからINTなのかなぁ?
で、その結果の合計にSUMPRODUCT使ってる、と。
あ゛~配列数列よくわかってないんすよねぇ・・・。
しっかし、はてなブログのコメント欄使いにくいなぁぁぁぁwwww 表示されないこと多いしwww 酷いwww
> nを連番整数として1/nを合計すると
うーん。
1 + 1/2 = 1.5
1 + 1/2 + 1/3 = 11/6 = 1.83…
1 + 1/2 + 1/3 + 1/4 = 25/25 = 2.083…
1 + 1/2 + 1/3 + 1/4 + … → ∞
なので、
(a) n 個を全部 1/n の重みで数える
(b) n 個のうち初出のみ数えて2回目以降の出現は無視する
のどちらかのアプローチがいいのでは。
(a) はリンク先の人たちの発想だし、
(b) は elve さんが sumproduct(int(1/countif()) でやっていることですよね。
25/24 だったw
ほんとだ米欄すげー使いにくいww修正も削除して再投稿もできない?こんなんだったっけ