Anzeige
Archiv - Navigation
1176to1180
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Auffüllen Text mit Vorgabeabfrage

VBA Auffüllen Text mit Vorgabeabfrage
Günter
Guten Morgen,
hätte gerne eure Hilfe.
Habe unten stehendes Makro,
welches in den markierten Zellen
ein Text einfügt.
Nun habe ich viele solcher mit verschiedenem Text zu versehen. Muss
also jedesmal ins Makro und entsprechend abändern.
Gäbe es da nicht ein Möglichkeit, entsprechend den einzufügenden
Text vorzugeben (Abfrage) oder gar eine vordefinierte Auswahl
anzuzeigen?
Da nur in den markierten Spaltenbereich einkopiert, würde folgendes
eine große Hilfe sein: Ganze Spalte markieren und nur hier in die leeren Zellen
einkopieren, aber nur bis zur letzten gefüllte Zelle in der Spalte A - damit nicht
65535 Zellen der entsprechenden Spalte gefüllt werden.
In voller Hoffnung
Günter
Sub Ausfuellen()
Dim rngC As Range
Dim lngL As Long
lngL = 1
For Each rngC In Selection
If IsEmpty(rngC) Then
rngC.Value = "nixx" & lngL
lngL = lngL + 1
End If
Next rngC
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA Auffüllen Text mit Vorgabeabfrage
08.09.2010 08:57:28
JogyB
Hallo Günter,
für eine einzelne ausgewählte Spalte ist es ganz einfach:
Sub Ausfuellen()
Dim rngC As Range
Dim lngL As Long
Dim rngSuche As Range
lngL = 1
' Wenn einzelne ganze Spalte gewählt
If Selection.Address = Selection.EntireColumn.Address _
And Selection.Columns.Count = 1 Then
Set rngSuche = Range(Selection.Cells(1, 1), Selection.Cells(Rows.Count, 1).End(xlUp))
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

Wenn das bei mehreren Spalten, insbesondere wenn diese nicht zusammenhängen sind, auch noch funktionieren soll, dann wird es komplizierter.
Gruß, Jogy
Anzeige
AW: VBA Auffüllen Text mit Vorgabeabfrage
08.09.2010 09:05:56
Günter
Hallo Jogy,
danke erst mal für Deine Mühe.
Habs mal getestet. Klappt super, wenn Spalte A markiert ist.
Bei allen anderen Spalten wird nur die erste leer vorkommende gefüllt.
Dachte mir, wenn ich Spalte C markiere, müsste soweit gefüllt werden, wie
in Spalte A Daten stehen.
Gruß
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
Anzeige
AW: Beispiel ...
08.09.2010 09:22:41
Günter
Hallo Matthias,
funktioniert ohne Wenn und Aber.
Perfekt.
Vielen Dank ihr Beiden...
Schönen Gruß aus Frankfurt
Günter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige