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: