INDEX 関数と SEQUENCE 関数を用いた並び替え

Excel にて、新しく表を作成するために、元のデータを並び替えて配置したい場合が多々ある。

例1:数行置きに単語を配置する

例1の場合、INDEX 関数と SEQUENCE 関数を使うことを意識するよりも、bool 型の配列とインデックスの組み合わせを意識することの方が大事かもしれない。

=LET(
    倍数, 3,
    area, TOCOL(A2:A99, 1),
    rows, ROWS(area),
    seqArr, SEQUENCE(rows * 倍数),
    boolArr, MOD(seqArr - 1, 倍数) = 0,
    index, INT(MOD((seqArr - 1) / 倍数, rows) + 1),
    IF(boolArr, INDEX(area, index), "")
)

3行連続で単語を入力する場合は、次のような数式になる。

=LET(
    倍数, 3,
    area, TOCOL(A2:A99, 1),
    rows, ROWS(area),
    seqArr, SEQUENCE(rows * 倍数),
    index, INT(MOD((seqArr - 1) / 倍数, 倍数)) + 1,
    INDEX(area, index)
)

例2:折り返す

参考:(キッズ外務省)世界いろいろ雑学ランキング | 外務省 (mofa.go.jp)

例2の場合、2次元なので、インデックスを考えるのに少しだけ苦労する。

=LET(
    area, C3:H5,
    rows, ROWS(area),
    cols, COLUMNS(area),
    seqArr, SEQUENCE(rows*2, cols/2),
    rowIndex, INT((seqArr - 1) / cols) + 1,
    colIndex, MOD(seqArr - 1, cols) + 1,
    INDEX(area, rowIndex, colIndex)
)

ちなみに、MAKEARRAY 関数を使う場合は、次のような数式になる。

=LET(
    area, C3:H5,
    rows, ROWS(area),
    cols, COLUMNS(area),
    MAKEARRAY(rows*2, cols/2, LAMBDA(r,c,
        INDEX(area, INT((r+1)/2), c+rows*(MOD(r-1,2)))
    ))
)

今回の場合は、MAKEARRAY 関数を使うより、SEQUENCE 関数を使った方が分かりやすいと思う。

以上

コメントする

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