Microsoft Excel

Herbers Excel/VBA-Archiv

Liste per Makro vervollständigen - HELP!

Betrifft: Liste per Makro vervollständigen - HELP! von: stephan deutsch
Geschrieben am: 13.08.2008 09:50:13

Hallo Zusammen,

Ich habe eine riesige Excelliste, die leider noch angepasst werden muss um sie Pivot-Table tauglich zu machen. Hier nun mein Problem:

Liste:
Name Ergebnis
A 1
leer 2
leer 5
leer 6
B 5
leer 4
leer 3
leer 8

Mit dieser Auflistung bekäme ich in der Pivot-Tabelle nicht alle Ergebnisse von A. Daher sollte die Tabelle so aussehen:

Liste:
Name Ergebnis
A 1
A 2
A 5
A 6
B 5
B 4
B 3

Ich möchte dies nun mit einem Makro automatisieren, so dass der Name runterkopiert wird, bis der nächste Name erscheint. Dazu habe ich folgenden Code:

Selection.Copy
Range(Selection, Selection.End(xlDown)).Select
Range("D130:D135").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.End(xlDown).Select
Selection.Copy
Range(Selection, Selection.End(xlDown)).Select
Range("D136:D145").Select
ActiveSheet.Paste

Mein Problem ist nun, dass das Makro den Bereich ("D130:D135") festlegt und ihn nicht variabel lässt. So kann ich das nicht für die ganze Liste verwenden.

Hat mir jemand einen Tipp wie ich das machen muss, damit sich die Liste per Makro vervollständigt?

Vielen Dank!
Stephan

  

Betrifft: AW: Liste per Makro vervollständigen - HELP! von: Rudi Maintaire
Geschrieben am: 13.08.2008 10:21:31

Hallo,
das kannst du doch auch mit einer Formel erledigen.
In C2: =wenn(A2)="";C1;A2) und runterkopieren. Dauert 5 Sek.

Gruß
Rudi


  

Betrifft: Liste vervollständigen von: backowe
Geschrieben am: 13.08.2008 10:22:29

Hallo Stephan,

ich gehe mal davon aus, daß die Namen in "D" und die Werte in "E" stehen.

VBA-Code:
Sub Vervollständigung()
Dim Zelle As Range
Dim Merker As String
For Each Zelle In Range("D130:D" & Cells(Rows.Count, "E").End(xlUp).Row)
  If Zelle <> "" Then Merker = Zelle
  If Zelle = "" Then Zelle = Merker
Next
End Sub
Code eingefügt mit Syntaxhighlighter 4.15


Gruß Jürgen


  

Betrifft: Kleine Änderung von: backowe
Geschrieben am: 13.08.2008 10:39:07

Hi Stephan,

VBA-Code:
Sub Vervollständigung()
Dim Zelle As Range
Dim Merker As String
For Each Zelle In Range("D130:D" & Cells(Rows.Count, "E").End(xlUp).Row)
  If Zelle <> "" Then
    Merker = Zelle
  Else
    Zelle = Merker
  End If
Next
End Sub
Code eingefügt mit Syntaxhighlighter 4.15


Gruß Jürgen


  

Betrifft: AW: Liste vervollständigen von: stephan deutsch
Geschrieben am: 13.08.2008 10:43:24

Hallo Jürgen

Besten Dank für deine Variante.

Du hast recht, die Namen stehen in "D" und die Werte in "E". Was mir momentan nicht klar ist, wie anschliessend der Name in deinem Code runterkopiert wird? Falls ich mich nicht klar ausgedrückt haben sollte, versuche ich es nochmals. Momentane Liste:

Name "D" Werte "E"
Hanspeter 5500
..................5568
..................4545
..................4556
Lukas.........4123
..................4563
..................8979
Marc...........7987
..................5467
..................4876

Mittels Makro möchte ich, dass die Namen runterkopiert werden (immer bis der nächste erscheint). Die Liste beinhaltet über 20'000 Zeilen und fast jede 6 o. 7 Zeile erscheint ein neuer Name, aber in unterschiedlichen Abständen. Mittels Copy / Paste ginge das eine Ewigkeit....

Vollständige Liste:

Name "D" Werte "E"
Hanspeter 5500
Hanspeter 5568
Hanspeter 4545
Hanspeter 4556
Lukas........4123
Lukas........4563
Lukas........8979
Marc...........7987
Marc..........5467
Marc..........4876

BESTEN DANK für die Untestützung.


  

Betrifft: AW: Liste vervollständigen von: Rudi Maintaire
Geschrieben am: 13.08.2008 10:54:38

Hallo,
kurz und knackig:

Sub tt()
  With Range(Cells(1, 5), Cells(Rows.Count, 5).End(xlUp)).Offset(0, -1)
    .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
    .Value = .Value
  End With
End Sub


Gruß
Rudi


  

Betrifft: Erklärung von: Backowe
Geschrieben am: 13.08.2008 11:36:07

Hallo Stephan,

der Code läuft von D130 nach unten bis zur letzten belegten Celle in Spalte E, steht in der Zelle etwas drin, schreibe ich den Wert in eine Variable, wenn die Zelle leer ist, wird der Variablenwert in die Zelle geschrieben.

Gruß Jürgen


  

Betrifft: AW: Liste per Makro vervollständigen - HELP! von: Reinhard
Geschrieben am: 13.08.2008 10:28:32

Hi Stephan,

Sub Makro()
Dim Zei As Long, arr, A As Long
Zei = Range("E" & Rows.Count).End(xlUp).Row
If Zei < 130 Then Exit Sub
arr = Range("D130:D" & Zei)
For A = 2 To Zei - 130 + 1
   If arr(A, 1) = "" Then arr(A, 1) = arr(A - 1, 1)
Next A
Range("D130:D" & Zei) = arr
End Sub


Gruß
Reinhard


  

Betrifft: AW: Liste per Makro vervollständigen - HELP! von: stephan deutsch
Geschrieben am: 13.08.2008 10:50:25

SUPER!!!!!

Hat einwandfrei geklappt.

BESTEN DANK UND EINEN ERFOLGREICHEN TAG.

Gruss,
Stephan