データの空白セルを無視して上から順に詰めて表示させたい

下図のA列のようにデータ間に不要な空白セルがある場合って邪魔なことがありますよね。

そういった場合はD列のように上から順番に詰めていくことができます。

1.以下の関数を「D1」セルの挿入します。




=IFERROR(INDEX($A$1:$A$15,SMALL(IF($A$1:$A$15<>"",ROW($A$1:$A$15)),ROW(A1))),"")

この関数を挿入後、通常だったらEnterで確定すれば良いのですが、こちらは配列となっているので
「Ctrl+Shift+Enter」を同時に押して確定します。
すると下記赤字部分のように式の前後にカッコ{}が自動で足されます。
これで正常に動作するようになりますので、確定は必ずこの方法にしてください。

{=IFERROR(INDEX($A$1:$A$15,SMALL(IF($A$1:$A$15<>"",ROW($A$1:$A$15)),ROW(A1))),"")}

0710_1

式を簡単に解説しますと

・IFERROR 式の値がエラーで返ってきたときにブランク表示させる。式の一番最後の「,"")」にかかってます。

・INDEX この後の「$A$1:$A$15」にかかってます。この範囲を指定しています。

・SMALL この後のIFにかかっており、IFで返ってきた値の小さい順に表示させる役割となってます。「,ROW(A1)」にかかっています。

・IF 「もし~だったら」の結果を返します。この後の「($A$1:$A$15<>"",ROW($A$1:$A$15)」にかかっています。「$A$1:$A$15<>""」指定した範囲内のブランク以外のセルで「ROW($A$1:$A$15)」行番号を表示。

・ROW 行番号を返します。

ざっくり言うと、「指定した範囲内で空白セル以外のセルを探し、該当するセルの行番号を確認し、行番号の小さい順に表示させていく」という意味になっています。

※「D1」のところに「A1」の「データ」という文字は拾ってこなくていいという場合、「ROW(A1))),"")」のところを「,ROW(A1)+1)),"")」とすれば良いです。

応用で、横方向に詰めたい場合は「ROW」のところを「COLUMN」に変更すればOKです。

以上