Problem bei Makro in EXCEL

Liebe/-r Experte/-in,
Mein Problem:
Ich habe jeden Monat mehrere Listen (versch. Excel TAB’s) von Personen (z.B. Zeile 14), denen Daten in den nachfolgenden Spalten zugeordnet sind. Insgesamt eine Liste von ungefähr 600 Zeilen. Um es übersichtlicher zu gestalten, soll nach jedem Ende eines Personenblocks (z.B. Schmitt) eine Leerzeile eingefügt werden.
Das Problem: Die Liste kann unterschiedlich lang sein, die Leerzeile steht also immer an einer anderen Stelle.
Ich möchte also einen Makro haben, der nach einem bestimmten NAMEN sucht und wenn er diesen findet danach eine Leerzeile einfügt. Findet er den Namen nicht, soll er die gleiche Prozedur mit dem nächsten Namen machen. Ich habe versucht das Ganze mal mit dem Makro tool von MICROSOFT aufzuzeichnen, aber er sucht nur die Zelladressen, nicht aber die Namen!
Läßt sich das Problem über einen Makro lösen und wie wäre der Ansatz?

Hoffentlich habe ich mein Problem einigermaßen verständlich erklärt. Auf jeden Fall vielen Dank für jeden Tipp.

(Basis OFFICE 2007)

Hallo Yunnan,

Mein Problem:
Ich habe jeden Monat mehrere Listen (versch. Excel TAB’s) von
Personen (z.B. Zeile 14), denen Daten in den nachfolgenden
Spalten zugeordnet sind. Insgesamt eine Liste von ungefähr 600
Zeilen. Um es übersichtlicher zu gestalten, soll nach jedem
Ende eines Personenblocks (z.B. Schmitt) eine Leerzeile
eingefügt werden.

ohne genaue Kenntnis des Tabellenaufbaus kann ich so ein Makro nicht erstellen. Hier mal 2 Makrobeispiele. Leider hatte ich ein Problem mit den Tags zur Darstellung von Codes, so dass die Leezeichen zur besseren Darstellung der Code-Struktur fehlen.

Gruß
Franz

Sub LeerZeileEinfuegen()
'Komplette Liste abarbeiten
Dim Zeile As Long, wks As Worksheet
Const Zeile1 = 2 '1. Zeile mit einem Namen
Const Spalte As Long = 1 'Nummer der Spalte mit den Namen - hier Spalte A (1)
Set wks = ActiveSheet
With wks
'Namen von vorletzter Zeile bis zur 1. Namenszeile vergleichen und bei Namenswechsel _
eine Leerzeile einfügen
Application.ScreenUpdating = False
For Zeile = .Cells(.Rows.Count, Spalte).End(xlUp).Row - 1 To Zeile1 Step -1
If Not .Cells(Zeile + 1, Spalte) = .Cells(Zeile, Spalte) Then
.Cells(Zeile + 1, Spalte).EntireRow.Insert shift:=xlShiftDown
End If
Next
Application.ScreenUpdating = True
End With
End Sub

Sub LeerZeileEinfuegenName()
'Einzelnen Namen suchen und Leerzeile einfügen
Dim Zeile As Long, wks As Worksheet, vName
Const Zeile1 = 2 '1. Zeile mit einem Namen
Const Spalte As Long = 1 'Nummer der Spalte mit den Namen - hier Spalte A (1)
vName = InputBox(„Bitte Name eingeben“, „Leerzeile nach Name einfüen“)
If vName = „“ Then GoTo Beenden
Set wks = ActiveSheet
With wks
'Namen von vorletzter Zeile bis zur 1. Namenszeile vergleichen und bei Namenswechsel _
eine Leerzeile einfügen
For Zeile = .Cells(.Rows.Count, Spalte).End(xlUp).Row - 1 To Zeile1 Step -1
If .Cells(Zeile, Spalte) = vName Then
.Cells(Zeile + 1, Spalte).EntireRow.Insert shift:=xlShiftDown
Exit For
End If
If Zeile = Zeile1 Then
MsgBox „Name „““ & vName & „“" nicht gefunden", vbInformation + vbOKOnly, _
„Leerzeile nach Name einfüen“
End If
Next
End With
Beenden:
End Sub

Hallo Yunnan,
ich schreibe Dir gerne das passende Makro. Kannst Du mir dazu Deine Datei oder zumindest eine Musterdatei zukommen lassen? Dann wäre es für mich einfacher, das Makro zu schreiben.
Gruß,
Ptonka

Ich hoffe, ich habe das Problem richtig verstanden, eine Lösung mit VBA (Visual Basic for Applications) ist relativ einfach, nur kenne ich Deine Programmierkenntnisse nicht. Also:

  1. Man kann eine Excel-Tabelle wie eine Matrix behandeln und zellenweise adressieren. Angenommen, die erste leere Zelle in Spalte sp markiert das Ende der Liste, dann:
    row = 1
    col = n ’ n = Spalte mit den Namen
    Do While Cells(row, sp) vbNullstring
    If cells(row, col) = „gesuchter Name“ Then
    Rows(row + 1).Insert shift:=xlDown
    End if
    row = row + 1
    Loop
  2. den „gesuchten Namen“ sollte man aus einer anderen Tabelle übernehmen, also eine äußere Schleife über die Namenstabelle und:
    If Sheets(„DatenTabelle“).Cells(row, col) = Sheets(„Namenstabelle“).Cells(row_n, col_n) then
    Hier wird gezeigt, wie Daten aus unterschiedlichen Tabellen adressiert werden können.
    Ich hoffe, das hilft weiter, viel Erfolg
    Rainer

Hallo Yunnan,
leider habe ich aus deiner Beschreibung nur das verstanden, dass du ein Problem mit dem Automatisch generiertem Makro hast. Deine restliche Beschreibung ist mir leider unverständlich.

Nenne die Sachen so wie sie heißen (wenn deutsche Namen nicht eindeutig sind, verwende englische namen).
Z.B.: „Excel TAB’s“ gibt es nicht (Tabellendokument, Tabelle)?
TAB- ASCII- Zeichen (http://de.wikipedia.org/wiki/Ascii#ASCII-Tabelle)
Wem und wie sind die Spalten zugeordnet?

Versuche es mit einem kleinen (oder auch großem) Beispiel der Tabellendaten!
Wie sehen die Datenmuster aus?

LG
W.W.

Grüezi Yunnan

Ich habe jeden Monat mehrere Listen (versch. Excel TAB’s) von
Personen (z.B. Zeile 14), denen Daten in den nachfolgenden
Spalten zugeordnet sind. Insgesamt eine Liste von ungefähr 600
Zeilen. Um es übersichtlicher zu gestalten, soll nach jedem
Ende eines Personenblocks (z.B. Schmitt) eine Leerzeile
eingefügt werden.

Sortiere zuerst die Daten nach den Namen.

Gehe dann in einer Schleife die Spalte mit den Namen durch und vergleiche immer den Namen der Zelle mit dem in der Zelle oben drüber. Falls sie sich unterscheiden, dann füge eine Leerzeile ein und fahre mit der Prüfung in der Spalte weiter.

Auf diese Weise bist Du unabhängig vom eigentlichen Namen und kannst deine Liste abarbeiten.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -