Excel カラムの指定を動的にしたい INDIRECT()

「=B1」のような決め打ちじゃなく「カラム:A1」に格納している列名を使いたい

作成日:2025-04-05, 更新日:2025-04-05

概要

A B C D E F G H
1 持込みA 持込みB 持込みC 持込みD 4/1 4/2 4/3
2 太郎 1 1 0 2 o o o
3 次郎 0 0 1 0 o o
4 三郎 2 2 1 0 o

のようなデータを下記のような形にしたい

A B C D E F G H I J K L M N O
1 持込みA 持込みB 持込みC 持込みD 4/1 4/2 4/3 集計 持込みA 持込みB 持込みC 持込みD
2 太郎 1 1 0 2 o o o 4/1
3 次郎 0 0 1 0 o o 4/2
4 三郎 2 2 1 0 o 4/3

4/2、4/3、4/4のそれぞれに「o」がついている人の持込みA~持込みDの各総数を知りたい
SUMIFで頑張るかマクロを頑張るか...

SUMIFで頑張る

これぐらいのデータなら目視でもいいんだけど、数が多いと面倒
だからといって、マクロってのも面倒そうだから、sumif()で頑張ることにする

▼「カラム: K2」に列Fに「o」がある列Bの総数を出力

=SUMIF(F2:F4, "o", B2:B4)

この場合、列F~列Hのそれぞれを対象に列B~列Eの総数が欲しいので面倒

K~N列に下記をセットすればOK...だけど、手動入力にしても、連続データとしてコピーってのも面倒

▼列F(4/1)のそれぞれをL2~O2にセット

=SUMIF(F2:F4, "o", B2:B4)
=SUMIF(F2:F4, "o", C2:C4)
=SUMIF(F2:F4, "o", D2:D4)
=SUMIF(F2:F4, "o", E2:E4)

▼列G(4/2)のそれぞれをL3~O3にセット

=SUMIF(G2:G4, "o", B2:B4)
=SUMIF(G2:G4, "o", C2:C4)
=SUMIF(G2:G4, "o", D2:D4)
=SUMIF(G2:G4, "o", E2:E4)

▼列H(4/3)のそれぞれをL4~O4にセット

=SUMIF(H2:H4, "o", B2:B4)
=SUMIF(H2:H4, "o", C2:C4)
=SUMIF(H2:H4, "o", D2:D4)
=SUMIF(H2:H4, "o", E2:E4)

列名を動的にセットして、SUMIFでがんばる

A B C D E F G H I J K L M N O
1 持込みA 持込みB 持込みC 持込みD 4/1 4/2 4/3 列名 集計 持込みA 持込みB 持込みC 持込みD
2 太郎 1 1 0 2 o o o F 4/1
3 次郎 0 0 1 0 o o G 4/2
4 三郎 2 2 1 0 o H 4/3

上記のように対象となる列名を列Jにセット
あとは「=SUMIF(F2:F4, "o", B2:B4)」の「F」を置き換えればOK

このときに使うのが「INDIRECT()」ってヤツ。カラムと文字を連結することが可能らしい

▼「F2:F4」を「カラム: J2」の値に置き換える

INDIRECT(J2&"2:"&J2&"4")

※「F2:F4」を「F」「2:」「F」「4」に分割して「F」が「カラム: J2」に置き換わる

あとはコピペすればいいんだけど...「列J」や一部の行数は固定だから「$」をつけたい

「=SUMIF(F2:F4, "o", B2:B4)」の
・「F」は固定(列名固定)で列Jとしたいから「$J●」
・「2」は固定(行数固定)で「2」としたいから「$2」。「4」も同様
・「B」は「C」「D」「E」と移動してほしいのでこのまま

▼こんな感じになる

=SUMIF(INDIRECT($J2&"2:"&$J2&"4"), "o", B$2:B$4)

→これを他のトコにコピペすれば完了