行をシマシマにする。グループごとにシマシマにする。

復讐の時間だよ!! \このうらみはらさでおくべきか~!!/ *1

行番号の取得、グループ番号の取得、グループごとに連番、辺りもキーワードかな?
少しでも役に立てば。

1行ごとに色を付ける

f:id:elve:20190709234607p:plain

考え方は

  1. 行番号を取ってきて
  2. 2で割った余り(0:偶数、1:奇数)を出す
  3. 偶数奇数どっちかに色を付ける
  1. =ROW(そのセルのアドレス) で行番号取得
  2. =MOD(割られる数、割る数)で余り取得
  3. 条件付き書式で偶数下記数に色を設定(画像は偶数に色)

ここまではいいね? うん。私でもわかる

グループごとに色を付ける

考える
事前準備:グループでソート*2

  1. グループごとの連番を取得
  2. 上記グループ番号を2で割ったあまりを出す
  3. 上記余りの0か1に色を付ける

ベタな方法

一番上を1にして、グループが上の行と違ったら+1する、という方法を思いつくと思う。
=IF(H1<>H2,I1+1,I1)
f:id:elve:20190709235943p:plain
こんな感じ。

ググって

=IF(A3<>A2,C2+1,IF(A3=A2,C2,COUNTIF($A$3:A3,A3)))

重複したセルで連番を振る、または同番を振る | Excel備忘録

を見つけたが、おそらく、二つ目のIF分には意味がなく、このCOUNTIFは実行されないだろうと思う。

この式をMOD(~,2)の~に突っ込めば行と同じようにシマシマになる。
f:id:elve:20190710001727p:plain

  • 一番上の1のところには条件付き書式設定しない
  • 偶数に色付ける
  • グループ番号欄必須になる
  • グループ名とグループ番号の列を固定する必要あり
追記

過去の自分がやりたいことがよくわからんがこういうことか
f:id:elve:20220403072130p:plain

SUMPRODUCT? COUNTIF???

先日見つけた

=MOD(INT(SUMPRODUCT(1/COUNTIF($B$3:$B3,$B$3:$B3))),2)

Excel グループや項目ごとに行の色を塗り分ける~Excel(エクセル)2016,2013技

SUMPRODUCT(1/COUNTIF($B$3:$B3,$B$3:$B3))の部分がよくわからない。INTは小数点以下切り捨て関数で・・・。

=SUMPRODUCT(1/COUNTIF(データ範囲,データ範囲))の解説は
bellcurve.jp
こちらが丁寧。φ(゚Д゚ )フムフム…ふむ?

自分用反芻(間違えてますw)

f:id:elve:20190710070338p:plain

数式1
まずグループ内で1,2,3…って連番を振る。(n)

数式2
数式1の逆数を取る。(1/n)

数式3
数式2の小数点以下を除く→各グループの先頭のみが1になる

数式4
その行までの数式3を合計するとグループ番号になる

f:id:elve:20190710071617p:plain

うーん分かったけど、次回使うときはまたググりそうだわ~(;´Д`)

*1:マルセイに通じなかった

*2:シマシマにならんからね

どのくらい面白かった?

星を押して送信してね

平均 0 / 5. Vote count: 0

是非フォローしてください

最新の情報をお伝えします

6件のコメント

  • こんばんは。
    リンク先
    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修正も削除して再投稿もできない?こんなんだったっけ

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です