Problem bei Makro in EXCEL

Von: , 30.08.2010 20:07 Uhr

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)

5 Antworten zu dieser Frage

  1. Antwort von nach 11 Stunden 0 hilfreich
    Re: Problem bei Makro in EXCEL

    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

  2. Antwort von nach 11 Stunden 0 hilfreich
    Re: Problem bei Makro in EXCEL

    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

  3. Antwort von nach 15 Stunden 0 hilfreich
    Re: Problem bei Makro in EXCEL

    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

  4. Antwort von nach 18 Stunden 0 hilfreich
    Re: Problem bei Makro in EXCEL

    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.

  5. Antwort von nach 3 Tagen 0 hilfreich
    Re: Problem bei Makro in EXCEL

    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 -

Jetzt auf diese Frage antworten.