エクセルバージョン
マイクロソフト365
本日は関数で空白セルが複数あるデータを空白のないデータにする方法について解説していきたいと思います。
今回の下記のような飛び飛びの空白データから空白を削除したデータが作成できるようになります。
【飛び飛び空白データ】
【完成後】
それではいってみましょう!
Menu
空白削除手順
➀データがあるセルの行番号を取得します(ROW関数)
②取得した行番号を昇順に並び替えます(SMALL関数)
③データ列と②で取得した行番号を連結して文字を作成して参照させて出来上がります(INDIRECT関数)
大まかにこんな感じで出来上がります(*^^)v
【今回のサンプルデータ】
A列に空白が混在しています。
データがあるセルの行番号を取得する
ますデータが存在するセルの行番号を取得します。
これを実現させるためにIF関数を使用していきます。
If関数
まずB1セルに =if と入力してTabキーを押して、下記赤枠をクリックして関数の引数ダイアログを表示させます。
関数の引数ダイアログが表示されたら以下のように入力します。
第1引数(論理式)→ A1セルが空白ではなかったら A1<>””
第2引数(値が真の場合)→ データの行番号を取得 ROW()
第3引数(値が偽の場合)→ シートの最終行番号を取得 ROWS(A:A)
これでA1セルが空白ではなかったらデータの行番号を取得して、空白だったらページの最終行番号を取得するといったことを実行します。
OKボタンでB1セルに自動で下記のような数式が出来上がります。
1 | =IF(A1<>"",ROW(),ROWS(A:A)) |
あとはB1セルの右下にカーソルを合わせると十字キーのフィルハンドルが出現するのでデータ分オートフィルさせます。
すると下記のB列のような結果になります。
【結果】
ここまで出来てしまえばあとは簡単です!
SMALL関数とINDIRECT関数
INDIRECT関数で列をA列に指定して、B列の行番号をSMALL関数で昇順に並び替え、文字を連結させ参照させると、A列の入力があるデータが先に並んで、空白データはシートの最終行番号なので後ろに並び変わります。
C1セルに下記の1文をコピペしデータ分オートフィルさせます。
1 | =INDIRECT("A"&SMALL(B:B,ROW()))&"" |
完成です\(^^)/
あとはいらないB列は非表示などにすればいいわけです。
関連記事
【関数】並び替えを得意とするSORTBY関数を使用して空白を削除する方法こちら
【VBA】空白セルの削除上詰めする方法はこちら
まとめ
関数が複雑になる場合は、このようにセルを活用したほうが簡単に作成できると思います。
そうすることによって複雑な関数も簡単に作成することが可能になります(^O^)
以上です(^^)
複数の空白セルを非表示
複数の空白セルを削除
【関数】複数の空白セルを削除(SMALLとINDIRECT)
複数の空白セルに一括入力
複数の空白行
空白セルの個数
セルの中の空白
【VBA】セル内の文字列の空白を削除(Trim,RTrim.LTrim)