Ausgangslage: Ein User markiert innerhalb eines gefilterten Bereiches entweder einzelne Zellen - idealerweise direkt die aus Spalte 1, denn nur darin stehen die relevanten Daten. Es soll aber auch erlaubt sein, dass der User ganze Zeilen selektiert. Die selektierten Zellen bzw. Zeilen sind dabei nicht zwangsläufig zusammenhängende Bereiche - entweder schon aufgrund der Filterung, oder weil der User bei der Selektierung Zellen/Zeilen auslässt.
Aus diesem selektierten Bereich soll dann mit jedem einzelnen Wert aus der ersten Spalte ein Code ausgeführt werden. Aber eben halt nur aus dem sichtbaren Bereich, und immer nur der Wert aus der ersten Spalte ist relevant.
Wenn ich es so mache
Dim r As Range
For Each r In Selection
If r.EntireRow.Hidden = False And IsNumeric(r.Value) And Len(r.Value) = 7 Then
If Empfaenger = "" Then
Empfaenger = GetEmailAddress(GetUserId(r.Cells.Value))
Else
Empfaenger = Empfaenger + ";" + GetEmailAddress(GetUserId(r.Cells.Value))
End If
End If
Next
MsgBox Empfaenger
End Sub
funktioniert es zwar grundsätzlich, denn der gesuchte 7-stellige Wert steht nur in Spalte A. Es dauert aber ewig, wenn ganze Zeilen selektiert sind, weil die Prüfung dann offenbar in jeder Zeile bis zur letzten der 16.384 Spalten angewandt wird. Das geht doch bestimmt eleganter?