【Excel】TRANSPOSEを使わない行列入れ替え参照【備忘録】


行列入れ替え参照といえば

TRANSPOSE関数が有名です。
大体「Excel 行列 入れ替え 関数」とかでググるとTRANSPOSE関数の記事がたくさん出てきます。
ただ、TRANSPOSE関数って配列関数なんですよね。
数式を編集するたびにCtrl+Shift+Enterで確定しなきゃいけないし、オートフィルも使えない…ので、場合によってはちょっと不便です。
なので、INDEX関数(とその他情報関数?)を利用した数式を残しておきます。
これで毎回「-"TRANSPOSE"」って除外用の検索演算子使ってググる手間が省けるぜ。

サンプルデータ

5行×3列の表を3行×5列に変換します。

参照先の左上になるG2のセルに以下の数式を入力し、後は縦横にフィルでドラッグするだけ。

=INDEX($B$2:$D$6,COLUMN(B2)-COLUMN($B$2)+1,ROW(B2)-ROW($B$2)+1)

INDEX関数の引数について

  • 配列:絶対参照で参照元の表全体
  • 行番号:参照元の表示対象のセルの列番号 - 参照元の表の左上のセルの列番号(絶対参照)
  • 列番号:参照元の表示対象のセルの行番号 - 参照元の表の左上のセルの行番号(絶対参照)

表示したいセルは相対参照にすることで、コピーとかフィル使ったときにちゃんと場所がずれていきます。
参照元の表と基準となる参照元の表の左上のセルを絶対参照にしておかないと、相対参照のセルから正しい位置が割り出せません。

式が長くなるので、参照元の表の配置が絶対に変わらないのであれば、INDEX関数の第2、第3引数を予め計算しておいて以下のような形にするのもありっちゃありです。

  • 行番号:COLUMN(B2)-COLUMN($B$2)+1 → COLUMN(B2)-3
  • 列番号:ROW(B2)-ROW($B$2)+1 → ROW(B2)-3

ただし、参照元の表が動くと参照先の表が死ぬ。(絶対参照されていれば、参照元の表の位置が動いた場合に式も連動します)
まあ、あと「式」で書いておけば流用ができます。(計算内容覚えなくても式を移植して参照変えればいいだけ)

頻繁に使うなら、ユーザ関数切るのもいいかも。

やったねたえちゃんこれでTRANSPOSE関数から解放されるよ!