|
▼とろり さん:
こんばんは。
>
>さっそく質問です。
>
> A B
>1 氏名 身長
>2 あ 100
>3 い 110
>4 う 120
>5 え 130
>6 お 140
>7 か 150
>8 き 160
>9 く 170
>10 け 180
>11 こ 190
>12 さ 200
>
>というような感じでずらーっとデータが並んでいます。
>例えば、「150」を基準として、そのプラスマイナス30の値と
>なる人を全て抽出することは可能でしょうか?
>(抽出される人→う・え・お・か・き・く・け)
標準モジュールに
'==============================================
Sub main()
Dim rng As Range
Dim stdval As Long
Dim permval As Long
Dim ans As Variant
stdval = 150 '←基準値
permval = 30 '←許容値
Set rng = Range("a2", Cells(Rows.Count, 1).End(xlUp))
If rng.Row > 1 Then
With rng
func = "=if(abs(" & .Offset(0, 1).Address & "-" & _
stdval & ")<=" & permval & _
"," & .Address & ",""" & Chr(&HFF) & """)"
'func--- =if(abs($B$2:$B$12-150)<=30,$A$2:$A$12,"")
'例えば、↑こんな数式が評価されます
ans = Evaluate(func)
If TypeName(ans) = "Variant()" Then
ans = Application.Transpose(ans)
Else
ans = Array(ans)
End If
ans = Filter(ans, Chr(&HFF), False)
If UBound(ans) >= 0 Then
MsgBox Join(ans, ",")
End If
End With
End If
End Sub
例のようなデータがあるシートをアクティブにした状態で
mainを実行してみて下さい。
結果は、メッセージボックスで表示されます。
|
|