AW: VBA Auffüllen Text mit Vorgabeabfrage
08.09.2010 09:27:24
JogyB
Hallo Günter,
dann so:
Sub Ausfuellen()
Dim rngC As Range
Dim lngL As Long
Dim rngSuche As Range
Const lngRefSpalte = 1 ' Spalte A
lngL = 1
' Wenn zusammenhängende ganze Spalten gewählt sind,
' wird immer bis zum letzten Eintrag in Spalte A gefüllt
If Selection.Address = Selection.EntireColumn.Address _
And Selection.Areas.Count = 1 Then
Set rngSuche = Range(Selection.Cells(1, 1), _
Selection.Cells(Cells(Rows.Count, lngRefSpalte).End(xlUp).Row, _
Selection.Columns.Count))
Else
Set rngSuche = Selection
End If
Application.ScreenUpdating = False
For Each rngC In rngSuche
If IsEmpty(rngC) Then
rngC.Value = "nixx" & lngL
lngL = lngL + 1
End If
Next rngC
Application.ScreenUpdating = True
End Sub
Klappt auch für mehrere zusammenhängende Spalten, dann wird allerdings fortlaufend durchnummeriert. Einen kleinen Fehler habe ich auch noch korrigiert, bei Markierung von etwas anderem als einer ganzen Spalte lief das nicht mehr.
Wenn die Nummerierung pro Spalte erfolgen soll, dann so:
Sub Ausfuellen()
Dim rngC As Range
Dim lngL As Variant
Dim rngSuche As Range
Dim lngZaehler As Long
Const lngRefSpalte = 1 ' Spalte A
' Wenn zusammenhängende ganze Spalten gewählt sind,
' wird immer bis zum letzten Eintrag in Spalte A gefüllt
If Selection.Address = Selection.EntireColumn.Address _
And Selection.Areas.Count = 1 Then
Set rngSuche = Range(Selection.Cells(1, 1), _
Selection.Cells(Cells(Rows.Count, lngRefSpalte).End(xlUp).Row, _
Selection.Columns.Count))
ReDim lngL(Selection.Column To Selection.Column + Selection.Columns.Count - 1)
Else
Set rngSuche = Selection
End If
Application.ScreenUpdating = False
For Each rngC In rngSuche
If IsEmpty(rngC) Then
If IsArray(lngL) Then
lngL(rngC.Column) = lngL(rngC.Column) + 1
rngC.Value = "nixx" & lngL(rngC.Column)
Else
lngL = lngL + 1
rngC.Value = "nixx" & lngL
End If
End If
Next rngC
Application.ScreenUpdating = True
End Sub
Die isArray-Abfrage wäre im Sinne schnellerer Laufzeit besser um die komplette For-Schleife herum zu setzen, nur macht das den Code für einen Anfänger aus meiner Sicht etwas unübersichtlicher (hier geht es noch, schlimmer wäre es, wenn in der Schleife viel Code wäre), deswegen habe ich es innen rein gesetzt.
Gruß, Jogy