Trovare l’indirizzo del valore più basso in un intervallo (Microsoft Excel)
Quando si scrive una macro, è possibile trovare il valore più basso in un intervallo di celle utilizzando il metodo WorksheetFunction per applicare la funzione del foglio di lavoro MIN. Potrebbe essere necessario, tuttavia, non solo trovare il valore più basso nell’intervallo, ma anche l’indirizzo della prima cella che contiene quel valore.
Un modo semplice è passare semplicemente attraverso l’intervallo che si desidera esaminare e derivare sia il valore più basso che l’indirizzo della cella in esame, come di seguito:
Function FindLowestAddr(pRng As Range) As String Application.Volatile MinVal = pRng.Cells(1).Value MinAddr = pRng.Cells(1).Address For Each c in pRng If c.Value < MinVal Then MinVal = c.Value MinAddr = c.Address End If Next c FindLowestAddr = MinAddr End Function
Si noti che questo approccio non si basa affatto sulla funzione del foglio di lavoro MIN. Tuttavia, presenta uno svantaggio: non fa differenza tra le celle che contengono valori numerici e quelle che non lo fanno. In altre parole, se l’intervallo passato alla funzione contiene una cella vuota, si considera che quella cella contenga un valore zero, che potrebbe benissimo essere il valore più basso dell’intervallo.
Un modo per aggirare questo problema è fare affidamento sulle funzioni del foglio di lavoro all’interno della macro. La seguente macro utilizza le funzioni del foglio di lavoro MIN e MATCH per determinare la posizione del valore minimo e quindi l’indice (offset) di quella cella all’interno dell’intervallo.
Function GetAddr(rng As Range) As String Dim dMin As Double Dim lIndex As Long Dim sAddress As String Application.Volatile With Application.WorksheetFunction dMin = .Min(rng) lIndex = .Match(dMin, rng, 0) End With GetAddr = rng.Cells(lIndex).Address End Function
Va notato che se si utilizza la macro solo per scoprire l’indirizzo perché si immaginava che non fosse possibile ottenere le informazioni desiderate senza la macro, è possibile eliminare completamente la macro utilizzando una formula del foglio di lavoro. Ad esempio, se desideri determinare l’indirizzo della cella con il valore più basso nell’intervallo denominato MyRange, puoi utilizzare quanto segue:
=ADDRESS(ROW(MyRange)+MATCH(MIN(MyRange),MyRange,0)-1,COLUMN(MyRange))
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (7140) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: