この記事では、エクセルで数値が範囲内にあるか(一定の範囲内:値が入っていたら〇:もしこの中にあれば抽出・表示)で処理する方法について解説します。
とVBAマクロの両方での処理を紹介していますので、好みに応じて使用してくださいませ!
エクセルで指定のセル範囲に数値があるかどうかを判定し、あれば〇、無ければ×、と別セルに表示する方法【B2セルからD8を選択してみた場合】
指定したセル範囲内に数値が1つでも存在するかを判定し、存在する場合は別シートに〇を表示する方法を紹介します!
この処理は、COUNTIF関数とISNUMBER関数、IF関数を組み合わせて実現できます。
今回は、判定対象をセル範囲B2:D8としてみましょう。
ここで、判定結果を出したいセルに、以下の数式を入れます。
=IF(COUNTIF(Sheet1!B2:D8,”<>”&””)>0,IF(SUMPRODUCT(–(ISNUMBER(Sheet1!B2:D8)))>0,”〇”,”×”),””)
別シートにコピペでも使用できるような形式(sheet1参照)としています!
文字列のみの場合は判定×のままです。
数値1を入れれば、判定が〇に変わりますね。
数式の詳細説明
COUNTIF(Sheet1!B2:D8,”<>”&””) : Sheet1のB2:D8の範囲内に空白以外のセルが何個あるかを数える
SUMPRODUCT(–(ISNUMBER(Sheet1!B2:D8))) : ISNUMBER関数の結果を配列で取得し、TRUEを1、FALSEを0に変換して合計する。つまり、数値のセルの個数を数える
IF(COUNTIF(…)>0, IF(SUMPRODUCT(…)>0,”〇”,”×”) , “×”) : まず空白以外のセルがあるかチェックし、ある場合は数値のセルがあるかチェック。数値のセルがある場合は〇、ない場合は×を表示
VBA(マクロ)の場合
次に、同じ処理をVBAマクロで実装してみましょう。
ただ以下では、シート2のA1セルに判定結果を出すものとしています。
Sub CheckNumberInRangeAndDisplay()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim rng As Range
Dim cell As Range
Dim hasNumber As Boolean
Set ws1 = ThisWorkbook.Sheets("Sheet1")
Set ws2 = ThisWorkbook.Sheets("Sheet2")
Set rng = ws1.Range("B2:D8")
hasNumber = False
For Each cell In rng
If Not IsEmpty(cell) Then
If IsNumeric(cell.Value) Then
hasNumber = True
Exit For
End If
End If
Next cell
If hasNumber Then
ws2.Range("A1").Value = "〇"
Else
ws2.Range("A1").Value = "×"
End If
End Sub
Alt+F11でVBE画面を開いて上記コードをコピペしましょう。
Alt+F8でマクロ選択画面を開きCheckRangeAndDisplay関数を実行します。
エクセルで指定の数値範囲内のそのセルの値が入っているかどうか判定し、あれば〇と隣の列に表示する方法【A列の数値が10~20に入っているか、隣に判定結果を表示】
指定した数値の範囲内にセルの値が収まっているかを判定し、条件を満たす場合は隣の列に〇を表示する方法です。
ここでは、A列の数値が10~20に入っているか、隣に判定結果を表示する処理をしてみます。
IF関数と論理演算子を組み合わせることで対応できます!
B列のセルに以下の数式を入力しましょう。
=IF(AND(A1>=10,A1<=20),”〇”,”×”)
エンターで処理確定させます。先頭のセルの右下にカーソルを合わせると出てくる十字(フィルハンドル)を下にドラッグし引っ張る(オートフィル)ことで一括処理できました。
数式の説明
AND(A1>=10,A1<=20) : A1セルの値が10以上かつ20以下の場合にTRUEを返す
論理式 – IF(AND(A1>=10,A1<=20),”〇”,””) :
AND関数の結果がTRUE(条件を満たす)なら〇を表示し、それ以外なら空白を表示
VBA(マクロ)の場合
同様の処理をVBAマクロで実装する方法を見てみましょう。
Sub CheckRangeAndDisplayNext()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Set ws = ThisWorkbook.Sheets("Sheet1")
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
For i = 1 To lastRow
If ws.Cells(i, 1).Value >= 10 And ws.Cells(i, 1).Value <= 20 Then
ws.Cells(i, 2).Value = "〇"
Else
ws.Cells(i, 2).Value = "×"
End If
Next i
End Sub
マクロの詳細解説
1. CheckRangeAndDisplayNext という名前を定義
2. Worksheet オブジェクト ws を宣言し、操作対象のシートを参照
3. lastRow 変数で、A列の最終行番号を取得(データの入力されている最終行)
4. For Nextループで1行目からlastRow行目まで繰り返し処理
– If ステートメントで、各行のA列のセル値が10以上かつ20以下かを判定
– 条件を満たす場合は、同じ行のB列のセルに 〇 を入力
– それ以外の場合は、B列のセルを空白にする
5. 次の行に対して同様の処理を繰り返す
Alt+F11でVBE画面を開いて上記コードをコピペしましょう。
Alt+F8でマクロ選択画面を開きCheckRangeAndDisplayNext関数を実行します。
まとめ エクセルで数値が範囲内にあるか(値が入っていたら〇:もしこの中にあれば抽出・表示)で処理する方法
ここでは、エクセルで数値が範囲内にあるか(一定の範囲内:値が入っていたら〇:もしこの中にあれば抽出・表示)で処理する方法について確認しました。
エクセルの扱いになれ、さらに快適な生活を送っていきましょう。