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.
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:
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
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?
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.