FILTER関数の結果を横に並べる|TRANSPOSEの書き方(Excel 2021・2019の代替も)

FILTER関数の結果を横に並べる|TRANSPOSEと組み合わせる方法

FILTER関数で取り出した名前を横に並べるには、結果をTRANSPOSE関数で囲みます。都道府県ごとに該当する人を横並びに表示する例で、式の入力場所、コピーの方向、該当者がいないときの対処を説明します。

目次

まず動かしてみよう|この記事のサンプルをその場で試せます

練習用ファイルをダウンロードしなくても、記事と同じデータ・同じセル番地のサンプルをここで動かせます。黄色いセルを書き換えると、結果がその場で変わります。各解説の最後にある「▶ この式を試す」を押すと、このツールの該当セルへ移動します。

FILTERの結果を横に並べる基本式

A7:A9に氏名、B7:B9に都道府県、A3に抽出したい都道府県を入力します。結果の先頭となるB3へ、次の式を入力してください。

B3に入力:FILTERの結果をTRANSPOSEで横に並べる
数式=TRANSPOSE(FILTER($A$7:$A$9,$B$7:$B$9=$A3,"該当なし"))
ひとことでA3の都道府県の人の氏名を、横に並べる
$A$7:$A$9
取り出す範囲です。氏名の列だけを指定します($ で固定)
$B$7:$B$9=$A3
条件です。都道府県が A3 と同じ行だけが TRUE になります。B4へコピーすると、条件のセルだけが A3 → A4 に変わります
"該当なし"
該当する人がいないとき(0件)に表示する文字です
TRANSPOSE(…)
FILTERが縦に取り出した結果の、縦と横を入れ替えます
データの流れ
① 都道府県が「埼玉県」の行の氏名を、縦に取り出す(黄色)
A7木村洋子A8田中康規A9堀川千里
▼
② 縦横を入れ替えて、B3から横に並べる結果
B3木村洋子C3田中康規

FILTERが該当する氏名を縦に抽出し、TRANSPOSEが縦横を入れ替えます。A3が埼玉県なら、サンプルの木村洋子・田中康規がB3、C3へ横に並びます。

数式は右へコピーしない

注意Microsoft 365・Excel 2024・2021では、B3の式だけで結果が右へスピルします。C3以降へ同じ式をコピーすると、結果どうしがぶつかる原因になります。表示先は空けておきましょう。
ポイント別の都道府県も表示したい場合は、A4に都道府県を入力し、B3の式をB4へコピーします。データ範囲は $ で固定しているため動かず、条件セルだけが $A3 から $A4 に変わります。

該当者がいない・空白が0になる場合

ポイントFILTERの第3引数「該当なし」は0件のときの表示です。空白にしたいなら "" に変更できます。元データの氏名が空白の行を除きたい場合は、抽出条件にも空白除外を加えます。
B3に入力:元データの空白行を除いて、横に並べる
数式=TRANSPOSE(FILTER($A$7:$A$100,($B$7:$B$100=$A3)*($A$7:$A$100<>""),"該当なし"))
ひとことで都道府県が一致し、かつ氏名が空白でない行だけを横に並べる
$A$7:$A$100
取り出す範囲です。データが増えてもよいように、7〜100行と広めにします
($B$7:$B$100=$A3)*($A$7:$A$100<>"")
都道府県が一致し、かつ氏名が空白でない行だけを 1 にします(* は「かつ」)。抽出範囲と同じ行数(7〜100行)にそろえます
"該当なし"
0件のときに表示する文字です
補足見た目だけ空白のスペースは、<>“” では除外できません。
ポイント抽出範囲と条件範囲は同じ行数にします。ここではどちらも7~100行です。見た目だけ空白のスペースは、<>"" では除外できません。

Excel 2019・2016で横に抽出する方法

FILTERが使えない場合は、都道府県ごとの連番を補助列へ作ります。サンプルと同じD7へ次の式を入力し、D9までコピーします。

D7に入力(D9までコピー):都道府県ごとの連番キーを作る
数式=B7&COUNTIF($B$7:B7,B7)
ひとことで都道府県名の後ろに、「同じ都道府県の何人目か」を付ける
B7
都道府県名です
COUNTIF($B$7:B7,B7)
7行目から今の行までに、同じ都道府県が何回出たかを数えます。範囲の最初だけ固定($B$7)して、下へコピーします
データの流れ
① 木村洋子・田中康規は埼玉県(1人目・2人目)、堀川千里は神奈川県(1人目)結果
D7埼玉県1D8埼玉県2D9神奈川県1
ポイント埼玉県が2件なら「埼玉県1」「埼玉県2」というキーができます。都道府県名を条件にするこのサンプルでは、末尾に連番を付けて区別できます。一般の商品名などで使う場合は区切り文字も含め、別の組み合わせが同じキーにならないようにしてください。

B3へ次の式を入力し、右方向へ必要な人数分コピーします。その後、別の都道府県の行へ下方向にコピーします。

B3に入力(右・下へコピー):補助キーで、1人ずつ横に取り出す
数式=IFNA(INDEX($A$7:$A$9,MATCH($A3&COLUMN(A1),$D$7:$D$9,0)),"")
ひとことで都道府県と連番をつなげたキーを探して、氏名を取り出す
$A3&COLUMN(A1)
探すキーです。都道府県(A3)と、列の番号(COLUMN(A1)は 1。右へコピーすると COLUMN(B1) で 2)をつなげます
$D$7:$D$9
補助キー(埼玉県1・埼玉県2・神奈川県1)の範囲です
$A$7:$A$9
氏名の範囲です。キーが見つかった行の氏名を返します
IFNA(…,"")
見つからないとき(人数が足りない分)は、空白にします
データの流れ
① 「埼玉県1」を探すと、氏名の1行目
キー埼玉県1B3木村洋子
▼
② 右へコピーして「埼玉県2」を探すと、2行目結果
キー埼玉県2C3田中康規
ポイントCOLUMN(A1)は1、右へコピーするとCOLUMN(B1)で2になります。条件と連番で1人目、2人目を順に探し、見つからない分は空白になります。

横並びにならない・エラーになるときの確認表(#SPILL!・#CALC!)

症状確認すること
#SPILL!右側に値や数式、結合セルがないか
#CALC!FILTERの第3引数を省略し、該当行が0件になっていないか
#VALUE!氏名範囲と条件範囲の行数が同じか
想定より結果の行数が増えるFILTERの抽出範囲に複数列を含めていないか
注意氏名だけを1行に並べるなら、FILTERの第1引数は氏名の1列にします。表全体をTRANSPOSEすると、表全体の行列が入れ替わるため、別の配置になります。

氏名だけを横1行にするなら、TOROW関数でも書ける(Microsoft 365)

Microsoft 365では、TRANSPOSEの代わりに TOROW 関数を使っても、同じ結果になります。TOROWとTRANSPOSEの使い分け(複数列を抽出したとき、縦に戻すTOCOLなど)は、FILTER関数の結果を横に並べる方法|TOROW・TRANSPOSEとの組み合わせで解説しています。

B3に入力:TOROW関数で、横1行にする(Microsoft 365)
数式=TOROW(FILTER($A$7:$A$9,$B$7:$B$9=$A3,"該当なし"))
ひとことでFILTERの結果を、TOROWで横1行にする(TRANSPOSEと同じ結果)
TOROW(…)
縦に並んだ結果を、横1行に並べる関数です。氏名の1列だけを抽出するなら、TRANSPOSEと同じ結果になります
補足複数列を抽出したときの違い(TOROWは全データを1行につなげ、TRANSPOSEは表の縦横を入れ替える)は、関連記事で解説しています。

複数条件や横方向の表を扱う場合

「都道府県が一致し、氏名が空白でない」のようなAND条件は * でつなぎます。条件の書き方はFILTERのAND・OR条件、表示先のエラーは#SPILL!の原因と直し方で確認できます。

仕様の確認:Microsoft公式・FILTER関数

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次