
Sub Vlookup()
Dim Riga As Integer
Dim Valore As Double
Dim Diff As Double
Riga = 3
Valore = Cells(3, 2)
Diff = Abs(Cells(2, 2) - Valore)
For i = 4 To 11
If Abs(Cells(i, 2) - Cells(2, 2)) < Diff Then
Riga = i
Valore = Cells(i, 2)
Diff = Abs(Cells(i, 2) - Cells(2, 2))
End If
If Abs(Cells(i, 2) - Cells(2, 2)) = Diff Then
If Cells(i, 2) < Cells(Riga, 2) Then
Riga = i
Valore = Cells(i, 2)
Diff = Abs(Cells(i, 2) - Cells(2, 2))
End If
End If
Next i
MsgBox "Il valore + vicino è: " & Valore & " in posizione B" & Riga
End Sub |
Option Explicit
Sub Valore_trov_min()
Dim colonnaB_B As Range, B_B As Variant
Dim valore1 As Single, val_ris As Single
Dim Nriga As Long
Set colonnaB_B = Range("B2:B3000")
valore1 = Range("D2")
val_ris = 0
Application.Calculation = xlManual
For Each B_B In colonnaB_B
If B_B <= valore1 And B_B > val_ris Then
val_ris = B_B
Nriga = B_B.Row
End If
Next
Range("F2") = val_ris
Set colonnaB_B = Nothing
MsgBox "Numero riscontrato " & val_ris & "cella B" & Nriga
Application.Calculation = xlAutomatic
End Sub
|
Option Explicit
Sub Valore_trov_min()
Dim colonnaB_B As Range, B_B As Variant
Dim valore1 As Single, val_ris As Single
Dim Nriga As Long
Set colonnaB_B = Range(Cells(2, [A2]), Cells(Cells(Rows.Count, [A2]).End(xlUp).Row, [A2]))
valore1 = Range("A1")
val_ris = -999999
Application.Calculation = xlManual
For Each B_B In colonnaB_B
If B_B <= valore1 And B_B > val_ris Then
val_ris = B_B
Nriga = B_B.Row
End If
Next
Cells(1, [A2]) = val_ris & " - " & Cells(Nriga, [A2]).Address
Set colonnaB_B = Nothing
MsgBox "Numero riscontrato " & val_ris & " - " & Cells(Nriga, [A2]).Address
Application.Calculation = xlAutomatic
End Sub |
Public Sub MagMinoreDi()
Dim colonnaB_B As Range, B_B As Variant
Dim valore1 As Double, val_ris As Double
Set colonnaB_B = Range("B2:B3000")
valore1 = Range("D2").Value
val_ris = Evaluate("MAX(IF(" & colonnaB_B.Address & "<" & valore1 & "," & colonnaB_B.Address & "))")
B_B = colonnaB_B.Find(val_ris).Address
MsgBox "Numero riscontrato " & val_ris & " nella cella " & B_B
End Sub
Public Function MagMinDi(ByVal nVal As Double, rRange As Range) As Double
MagMinDi = Evaluate("MAX(IF(" & rRange.Address & "<" & nVal & "," & rRange.Address & "))")
End Function
|
B_B = colonnaB_B.Find(val_ris, lookat:=xlWhole).Address |
'-------------------- La sub ------------------------------------
'
Public Sub ValoreProssimo()
Dim rCerca As Range, sAddress As Variant
Dim nCerca As Double, nValRis As Double
Dim nValMin As Double, nValMax As Double
Set rCerca = Range("B2:B3000")
nCerca = ActiveSheet.Range("F2").Value
nValMax = Evaluate("MAX(IF(" & rCerca.Address & "<" & nCerca & "," & rCerca.Address & "))")
nValMin = Evaluate("MIN(IF(" & rCerca.Address & ">" & nCerca & "," & rCerca.Address & "))")
nValRis = IIf((nValMin - nCerca) < (nCerca - nValMax), nValMin, nValMax)
sAddress = rCerca.Find(nValRis).Address
MsgBox "Numero riscontrato " & nValRis & " nella cella " & sAddress
Set rCerca = Nothing
End Sub
'-------------------- UDF ------------------------------------
'
Public Function ValVicino(ByVal nVal As Double, rRange As Range) As Double
Dim nMin As Double, nMax As Double
nMin = Evaluate("MIN(IF(" & rRange.Address & ">" & nVal & "," & rRange.Address & "))")
nMax = Evaluate("MAX(IF(" & rRange.Address & "<" & nVal & "," & rRange.Address & "))")
ValVicino = IIf(nMin - nVal < nVal - nMax, nMin, nMax)
End Function |
'--------------- sub --------------------
Public Sub ValoreProssimo()
Dim rCerca As Range, sAddress As Variant
Dim nCerca As Double, nValRis As Double
Dim nValMin As Double, nValMax As Double
Set rCerca = Range("B2:B3000")
nCerca = ActiveSheet.Range("F2").Value
nValMax = Evaluate("MAX(IF(" & rCerca.Address & "<" & nCerca & "," & rCerca.Address & "))")
nValMin = Evaluate("MIN(IF(" & rCerca.Address & ">=" & nCerca & "," & rCerca.Address & "))")
nValRis = IIf((nValMin - nCerca) < (nCerca - nValMax), nValMin, nValMax)
sAddress = rCerca.Find(nValRis).Address
MsgBox "Numero riscontrato " & nValRis & " nella cella " & sAddress
End Sub
'--------------- UDF --------------------
Public Function ValVicino(ByVal nVal As Double, rRange As Range) As Double
Dim nMin As Double, nMax As Double
nMin = Evaluate("MIN(IF(" & rRange.Address & ">=" & nVal & "," & rRange.Address & "))")
nMax = Evaluate("MAX(IF(" & rRange.Address & "<" & nVal & "," & rRange.Address & "))")
ValVicino = IIf(nMin - nVal < nVal - nMax, nMin, nMax)
End Function
|
Public Sub ValoreProssimo()
Dim rCerca As Range, sAddress As Variant
Dim nCerca As Double, nValRis As Double
Dim nValMin As Double, nValMax As Double
Dim rTarget As Range
Set rCerca = Range("B2:B3000")
Set rTarget = ActiveSheet.Range("F2")
nCerca = rTarget.Value
nValMax = Evaluate("MAX(IF(" & rCerca.Address & "<" & rTarget.Address & "," & rCerca.Address & "))")
nValMin = Evaluate("MIN(IF(" & rCerca.Address & ">=" & rTarget.Address & "," & rCerca.Address & "))")
nValRis = IIf((nValMin - nCerca) < (nCerca - nValMax), nValMin, nValMax)
sAddress = rCerca.Find(nValRis).Address
MsgBox "Numero riscontrato " & nValRis & " nella cella " & sAddress
Set rCerca = Nothing
Set rTarget = Nothing
End Sub
Public Function ValVicino(ByVal nVal As String, rRange As Range) As Double
Dim nMin As Double, nMax As Double
nVal = Replace(nVal, ",", ".")
nMin = Evaluate("MIN(IF(" & rRange.Address & ">=" & nVal & "," & rRange.Address & "))")
nMax = Evaluate("MAX(IF(" & rRange.Address & "<" & nVal & "," & rRange.Address & "))")
ValVicino = IIf(nMin - nVal < nVal - nMax, nMin, nMax)
End Function
|
Public Sub ValoreProssimo()
Dim rCerca As Range, sAddress As Variant
Dim nCerca As Double, nValRis As Double
Dim nValMin As Double, nValMax As Double
Dim rTarget As Range
Set rCerca = Range("B2:B3000")
Set rTarget = ActiveSheet.Range("F2")
nCerca = rTarget.Value
nValMax = Evaluate("MAX(IF(" & rCerca.Address & "<" & rTarget.Address & "," & rCerca.Address & "))")
nValMin = Evaluate("MIN(IF(" & rCerca.Address & ">=" & rTarget.Address & "," & rCerca.Address & "))")
nValRis = IIf((Round(nValMin - nCerca, 10) < Round(nCerca - nValMax, 10)), nValMin, nValMax)
sAddress = rCerca.Find(nValRis).Address
MsgBox "Numero riscontrato " & nValRis & " nella cella " & sAddress
Set rCerca = Nothing
Set rTarget = Nothing
End Sub
Public Function ValVicino(ByVal nVal As Double, rRange As Range) As Double
Dim nMin As Double, nMax As Double
Dim sVal As String
sVal = Replace(nVal, ",", ".")
nMin = Evaluate("MIN(IF(" & rRange.Address & ">=" & sVal & "," & rRange.Address & "))")
nMax = Evaluate("MAX(IF(" & rRange.Address & "<" & sVal & "," & rRange.Address & "))")
ValVicino = IIf(Round(nMin - nVal, 10) < Round(nVal - nMax, 10), nMin, nMax)
End Function |
?nMin 6,3 ?nMax 6,1 ?(nMin - nVal) 9,99999999999996E-02 ?(nVal - nMax) 0,100000000000001 ?(nMin - nVal) < (nVal - nMax) Vero ?(nMin - nVal) < (nVal - nMax) Vero ?nMin 6,3 ?nMax 6,1 ?(nMin - nVal) 9,99999999999996E-02 ?(nVal - nMax) 0,100000000000001 ?(nMin - nVal) < (nVal - nMax) Vero ?round(nMin - nVal,10) < round(nVal - nMax,10) Falso |
