Excelで下の図のように縦方向に並んでいる情報を、グループ化して横方向に並べ直したい、という場合があったので、対応方法を考えてみました。
FILTER関数を利用すると、簡単に横並び表示を実現することができます。
ただし、古いExcelでは利用できない関数となっているので、注意が必要です。
NorthDetailでは、最新のExcelが利用できる「Microsoft 365」を利用していますが、そちらでは利用可能な関数となっています。
利用できないバージョンの場合は、後述の方法を確認してください。
下記の縦並びの表を例として説明します。
最終的な目標は、下の図の内容です。
まず、横並びで表示させたい「対象者」を並べます。
全件が対象であれば、UNIQUE関数を利用して並べることができます。
【=UNIQUE(A3:A8)】
先頭セルに以下の式を入力します。
【=TRANSPOSE(FILTER(B3:B8, A3:A8 = A12))】
「FILTER」関数でフィルターをかけたデータ範囲を表示できます。
上記の例では、B3~B8の「支払額」の情報を、対象者:「Aさん」で絞った値の一覧を表示します。
これだけだと、縦方向に情報が並んでしまうため、「TRANSPOSE」関数を利用します。
「TRANSPOSE」関数は、行と列を入れ替えて表示する関数です。
これで、対象者:「Aさん」の行に横並びで情報が表示されます。
上記②の式を、以降の行にコピーすることで、
以降の行も情報が横並びで表示されます。
FILTER関数を利用できない場合は、いくつかの関数を組み合わせて実現することができます。
利用できる場合と比べると、少し複雑な方法となります。
下記の縦並びの表を例として説明します。
最終的な目標は、下の図の内容です。
まず、縦方向に情報が並んでいる表のA列(「対象者」)を昇順で並び替えします。
横並びで表示させたい「対象者」を並べます。
全件が対象であれば、UNIQUE関数を利用して並べることができます。
【=UNIQUE(A3:A8)】
先頭行、先頭列(データ表示部分)のセルに以下の式を入力します。
【=VLOOKUP(E3, A:B, 2, FALSE)】
VLOOKUP関数で、該当の対象者で一番最初に合致する「支払額」の値を取得します。
※VLOOKUP関数についての詳細はこちら。
先頭行の2列目に以下の式を入力します。
【=IF(COUNTIF($A:$A, $E3)>1, VLOOKUP($E3, INDEX($A:$A, MATCH($E3, $A:$A, 0)+1):$B$8, 2, FALSE), "")】
式の説明は以下の通りです。
最初のIF関数は、データが存在する場合のみ以降の式を実行する判定のために利用します。
【例)2つ目のデータがあるかの確認:IF(COUNTIF($A:$A, $E3)>1, "データがある", "データがない")】
MATCH関数で該当の対象者と一致する「支払額」の値が列のどの位置に来るかを確認して、+1とずらすことで、それ以降のデータを確認します。
【MATCH($E3, $A:$A, 0)+1】
INDEX関数とVLOOKUP関数を利用して、それ以降のデータで最初に該当する「支払額」を取得します。
以降の列に、下記で強調表示している数値部分を1→2→3と一つずつずらして入力します。
【=IF(COUNTIF($A:$A, $E3)>2, VLOOKUP($E3, INDEX($A:$A, MATCH($E3, $A:$A, 0)+2):$B$8, 2, FALSE), "")】
※この部分は上記④の2列目では1としていたので、次の列の3列目では2にずらしています
先頭行の式を、以降の行にコピーすることで、
以降の行も情報が横並びで表示されます。
Excelのバージョンによって対応できる内容が違うので2つの方法を紹介しました。
Excelを自分だけで利用する場合は、自分のExcelのバージョンだけを考えれば良いのですが、他の人に渡して使ってもらう場合などは、そのバージョンも考慮して対応する必要があるので注意が必要です。