• ベストアンサー

エクセル 指定の数値範囲を条件に抽出する関数マクロ

表1があり、A列に氏名、B~E列に2桁の数値データが入っています。この中で検索値XXの{-3~+3}の範囲内に該当する数値を抽出したいです(検索値が33なら、30~36内の数字)。該当する数値をフォントやセルに色をつけて分かるようにできれば一番いいですが、できない場合は、該当するデータを含む人の氏名を表2に表示するとか、該当する人のF列に○印をつけるとかでもよいです。実際にはたくさんの違う検索値を使って抽出操作が必要になるので、フィルタオプションとかでやるのは面倒です。関数でもマクロでも良いので簡単な方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! >該当する数値をフォントやセルに色をつけて分かるようにできれば一番いいですが・・・ というコトですので、VBAになってしまいますが一例です。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) データは2行目以降にあるとします。 尚、セルの色は薄い黄色にしています。 Sub Sample1() 'この行から Dim i As Long, j As Long, vL vL = InputBox("検索値を入力してください。") Application.ScreenUpdating = False Cells.Interior.ColorIndex = xlNone For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row For j = 2 To 5 With Cells(i, j) If .Value <> "" And .Value >= vL - 3 And .Value <= vL + 3 Then .Interior.ColorIndex = 36 End If End With Next j Next i Application.ScreenUpdating = True End Sub 'この行まで ※ 単にセルの色付けだけで、抽出はしていません。 こんな感じではどうでしょうか?m(_ _)m

honeybeans
質問者

お礼

すごい簡単で処理が楽になりそうです。助かりました。ありがとうございました!

その他の回答 (2)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

たくさんの検索値が有るとのことですから次のようにしてはいかがでしょう。 A列からE列の2行目から下方にデータが有るとしてF1セルから右の列には検索値を33とか40とかのように入力します。幾つの列を使っても構いません。 F2セルには次の式を入力して右横方向にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(OR($A2="",F$1=""),"",IF(COUNTIFS($B2:$D2,">="&F$1-3,$B2:$D2,"<="&F$1+3)>0,"○","")) 該当するデータがB列からD列に合う場合には○が表示されます。 該当者の名簿を作りたいのでしたら検索値の列を重点にフィルタ操作をしてその結果を別のシートに表示させても良いでしょう。

honeybeans
質問者

お礼

これなら一度にたくさん処理できますね。ありがとうございました!

noname#204879
noname#204879
回答No.2

セル B2 における[条件付き書式] 数式が   =AND(B2>=$G$2-3,B2<=$G$2+3) フォント色 白 パターン色 赤

honeybeans
質問者

お礼

条件付き書式って数式でもできるんですね。勉強になりました。ありがとうございました!