Excelで「複数の列のどこかに数値が入力されていたら1、すべて空欄なら0を表示したい」という処理は、集計表や管理シートでよく使われます。特に売上表や入力チェック表では、入力有無を自動判定できると作業効率が大きく向上します。この記事では、Excel関数とVBAの両方を使った方法を、初心者にもわかりやすく解説します。
今回実現したい内容
例えば、以下のような表があるとします。
| 名前 | D列 | E列 | F列 | 計 |
|---|---|---|---|---|
| Aさん | 10000 | 1 | ||
| Bさん | 200000 | 1 | ||
| Cさん | 200000 | 15000 | 1 | |
| Dさん | 0 |
条件は以下です。
- D列・E列・F列のどこかに数値があれば「1」
- 3列すべて空欄なら「0」
- 複数列に数値があっても結果は「1」
最も簡単なExcel関数
もっともシンプルなのはCOUNT関数を使う方法です。
=IF(COUNT(D2:F2)>0,1,0)
この式を「計」の列へ入力し、下へコピーします。
COUNT関数は「数値が入力されているセル数」を数えます。
この関数の意味を分解すると
式は以下の流れで判定しています。
| 部分 | 意味 |
|---|---|
| COUNT(D2:F2) | D~F列の数値セル数を数える |
| >0 | 1つでも数値があるか判定 |
| IF(条件,1,0) | 条件成立なら1、違えば0 |
つまり「数値が1個以上あれば1」という意味になります。
空白文字にも対応したい場合
場合によっては、数値だけでなく文字入力も判定対象にしたいケースがあります。
その場合はCOUNTA関数を使います。
=IF(COUNTA(D2:F2)>0,1,0)
COUNTAは「空白以外」を数える関数です。
VBAで処理する方法
VBAで自動化したい場合は、以下のコードでも実現できます。
Sub CheckInput() Dim lastRow As Long Dim i As Long lastRow = Cells(Rows.Count, "C").End(xlUp).Row For i = 2 To lastRow If Cells(i, "D").Value <> "" Or _ Cells(i, "E").Value <> "" Or _ Cells(i, "F").Value <> "" Then Cells(i, "G").Value = 1 Else Cells(i, "G").Value = 0 End If Next i MsgBox "処理が完了しました。"End Sub
VBAコードのポイント
この部分が判定処理です。
If Cells(i, "D").Value <> "" Or _ Cells(i, "E").Value <> "" Or _ Cells(i, "F").Value <> "" Then
Orを使うことで、「どれか1つでも値があるなら」という条件になります。
関数とVBAはどちらがおすすめ?
通常は関数のほうが簡単です。
| 方法 | 特徴 |
|---|---|
| 関数 | 簡単・管理しやすい |
| VBA | 大量データや自動処理向き |
数十~数百行程度なら関数で十分なケースが多いです。
よくある勘違い
COUNT関数は「数値のみ」をカウントします。
そのため、以下はカウントされません。
- 空白
- 文字列
- スペースのみ
文字入力も含めたい場合はCOUNTAを使う必要があります。
条件付き書式にも応用できる
この判定は条件付き書式にも応用可能です。
例えば、入力済み行を自動で色付けするといった管理表も作成できます。
実務でよくある活用例
この処理はさまざまな業務シートで利用されています。
- 売上入力チェック
- 経費精算確認
- 勤怠入力管理
- 在庫更新確認
- アンケート回収状況
特に「入力有無判定」はExcel実務で頻出です。
まとめ
Excelでは、複数列のどこかに数値があれば1、すべて空欄なら0という判定を簡単に実現できます。
もっともシンプルなのは以下の関数です。
=IF(COUNT(D2:F2)>0,1,0)
また、自動化したい場合はVBAでも同様の処理が可能です。用途に応じて、関数とVBAを使い分けると作業効率が大きく向上します。


コメント