この記事では、エクセルで0以外を抽出(0以外の数値セルを詰めて取り出す:データ:行ごと:抜き出す:関数:マクロ)する方法について詳しく解説していきます。
ポイントは、以下の3つです。
・FILTER関数を使う方法
・INDEX関数とIF関数を組み合わせる方法(FILTER関数が使えない場合)
・マクロを用いる方法と関数との違い
エクセル操作は1つ1つ追っていけば必ずうまくできるため、ぜひ本記事を参考にスキルアップにつなげてくださいませ♪
エクセルで0以外を抽出する方法【FILTER関数】
それでは以下のサンプルを用いてFILTER関数を使う方法を確認していきます。

B2セルに以下の数式を入力します。
=FILTER(A2:A7,A2:A7<>0)
ENTERで処理を確定させます。
FILTER関数は、指定した条件に合致するデータを抽出する関数です。書式は以下の通りです。
=FILTER(範囲, 条件式1, [条件式2], …)
第1引数で抽出対象の範囲を指定し、第2引数以降で条件式を指定します。条件式は複数指定することが可能です。
上記の例では、A2:A7の各セルが0ではない(<>0)データを抽出するよう指定しています。抽出結果は数式を入力したセルから下方向に自動的にスピルされます。
FILTER関数を使えば、目的の条件に合致するデータをまとめて抽出できるので非常に便利です。
ただし、Excel 2021以降でしか使えないので注意が必要です。それ以前のバージョンでは、次に説明するINDEX関数とIF関数の組み合わせで代替しましょう。
1つずつ丁寧に理解することがポイント♪
エクセルで0以外を抽出する方法【INDEX関数とIF関数を組み合わせる】
FILTER関数が使えない環境の場合は、INDEX関数とIF関数を組み合わせる方法で同様の処理を実現できます。
B2セルに以下の数式を入力します。
=IFERROR(INDEX($A$2:$A$7,SMALL(IF($A$2:$A$7<>0,ROW($A$2:$A$7)-ROW($A$1)),ROW(1:1))),””)

ENTERで処理を確定させます。

必要に応じてオートフィルを行いましょう。

INDEX関数は、指定した位置にあるデータを返す関数です。IF関数とROW関数を組み合わせることで、条件に合致するデータの位置を特定しています。
IF関数で「$A$2:$A$7の各セルが0ではない」場合に、そのセルの行番号から$A$1の行番号を引いた値を返すようにしています。ROW関数は行番号を返す関数で、$A$1のように$で固定することで常に同じ行番号を返すようにしています。
IF関数の結果は、{4,FALSE,6,2,FALSE,5}のような配列になります。FALSEは条件に合致しなかったセルを表します。この配列をSMALL関数に渡すことで、FALSEを無視してk番目に小さい値(k番目の行の位置)を求めることができます。
最後に、求めた位置をINDEX関数のインデックスに指定することで、目的のデータを取得しています。IFERROR関数でエラー処理を行い、空白セルを表示するようにしています。
INDEX関数とIF関数の組み合わせは、FILTER関数の代替として覚えておくと便利ですね。
エクセルで0以外を抽出する方法【マクロ】
最後にマクロでの抽出方法を見ていきます。マクロは以下のように記述します。
Sub ExtractNonZero()
Dim i As Long
Dim j As Long
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
j = 1
For i = 2 To lastRow
If Cells(i, 1).Value <> 0 Then
Cells(j, 2).Value = Cells(i, 1).Value
j = j + 1
End If
Next i
Range("B1").CurrentRegion.SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
End Sub
セルA2から最終行までを1行ずつループで処理します。値が0ではない場合に、2列目のj行目にその値をコピーし、jを1つ増やしていきます。
これにより、0以外の値だけが2列目に詰めて抽出されます。
最後に、抽出結果の下にある空白セルを削除しています。CurrentRegionで抽出結果の範囲を取得し、SpecialCellsで空白セルを特定した上で、Deleteメソッドで削除しています。
これにより、0以外の値だけが連続したデータとして表示されます。
マクロを使えば、関数だけでは実現が難しい柔軟な処理が可能になります。ただし、マクロを実行するにはExcelのマクロ有効化が必要なので、環境に応じて使い分けることが大切ですね。
まとめ
この記事では、【Excel】エクセルで0以外を抽出(0以外の数値セルを詰めて取り出す:データ:行ごと:抜き出す:関数:マクロ)する方法について詳しく解説しました。
FILTER関数、INDEX関数とIF関数の組み合わせ、マクロによる3つのアプローチとその仕組みを紹介しました。
関数は手軽に使える一方、マクロは自由度の高さが魅力です。状況や目的に応じて、適切な方法を選択しましょう。
エクセルの扱いに慣れ、さらに快適な毎日を過ごしていきましょう!