
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$1" Then Exit Sub
Dim a, i, t, n, m
a = [a1].CurrentRegion.Offset(1).Resize(, 3).Value
ReDim b(1 To UBound(a) - 1, 1 To 1)
For i = 1 To UBound(a) - 1
If IsNumeric(a(i, 1)) Then
a(i, 2) = a(i, 1): a(i, 3) = a(i, 1)
ElseIf InStr(a(i, 1), "±") Then
t = Split(a(i, 1), "±")
a(i, 2) = Val(t(0)) - Val(t(1))
a(i, 3) = Val(t(0)) + Val(t(1))
ElseIf InStr(a(i, 1), "↑") Then
a(i, 2) = Val(a(i, 1)): a(i, 3) = 10 ^ 10
ElseIf InStr(a(i, 1), "↓") Then
a(i, 2) = -10 ^ 10: a(i, 3) = Val(a(i, 1))
Else
MsgBox "error:" & a(i, 1): Exit Sub
End If
Next
n = Target.Value
ReDim c(1 To 1, 1 To 3)
If IsNumeric(n) Then
c(1, 2) = n: c(1, 3) = n
ElseIf InStr(n, "±") Then
t = Split(n, "±")
c(1, 2) = Val(t(0)) - Val(t(1))
c(1, 3) = Val(t(0)) + Val(t(1))
ElseIf InStr(n, "↑") Then
c(1, 2) = Val(n): c(1, 3) = 10 ^ 10
ElseIf InStr(n, "↓") Then
c(1, 2) = -10 ^ 10: c(1, 3) = Val(n)
Else
MsgBox "error:" & n: Exit Sub
End If
For i = 1 To UBound(a) - 1
If c(1, 2) >= a(i, 2) And c(1, 2) <= a(i, 3) Or _
c(1, 3) >= a(i, 2) And c(1, 3) <= a(i, 3) Or _
a(i, 2) >= c(1, 2) And a(i, 2) <= c(1, 3) Or _
a(i, 3) >= c(1, 2) And a(i, 3) <= c(1, 3) Then
m = m + 1
b(m, 1) = a(i, 1)
End If
Next
[e2].Resize(UBound(b)) = b
End Sub