Hallo,
ich übernehme aus einer Textdatei Daten ins Excel. Wenn ich die Textdatei eingelesen habe, muß ich einige Sachen löschen. da ich diese Arbeit immer wieder machen muß, habe ich mir ein Makro gebastelt. Siehe unten. Mit dem Makro suche ich den Begriff „vorjahresvergleich“
gehe dann eine Zeile zurück, lösche dann den Inhalt der folgenden 8 Zeilen. Die muß ich dann sooft wiederholen, als der Suchbegriff vorkommen kann. Da sich die Anzahl des Suchbegriffes aber ändern kann, ist mein Makro anfällig. Die Suche kann ab Zeile 20 erfolgen.
Wer kann mir sagen, wie das Makro aussehen muss, damit das Makro (oder Script) für alle Fälle richtig arbeitet:
Danke für die Hilfe.
Gruß Klaus
ActiveCell.Offset(20, 0).Range(„A1“).Select
Cells.Find(What:=„vorjahresvergleich“, After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False).Activate
ActiveCell.Offset(-1, 0).Rows(„1:8“).EntireRow.Select
Selection.ClearContents
ActiveCell.Offset(2, 2).Range(„A1“).Select
Cells.FindNext(After:=ActiveCell).Activate
ActiveCell.Offset(-1, 0).Rows(„1:8“).EntireRow.Select
Selection.ClearContents
!!usw bis 13-16 x wiederholen!!
Hallo Klaus.
Du könntest in irgendeine freie Zelle auf dem Tabellenblatt die Funktion „ZÄHLENWENN“ einfügen. Dann weisst Du schonmal, wie oft der Suchbegriff enthalten ist.
Da aber in Deinem Macro Sachen enthalten sind, die ich nicht kenne (z.B. Offset), kann ich Dir da nicht richtig weiterhelfen.
Wenn die „Daten“, die gelöscht werden sollen, alle in der selben Spalte stehen, würde ich dann mit einer ForNext-Schleife weiterarbeiten, deren Maximalwert aus dem Ergebnis der ZÄHLENWENN-Funktion genommen wird.
Viele Grüße
Carsten
Hallo Klaus,
versuchs mal so:
While Not (Cells.Find(What:=„vorjahresvergleich“, After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False) Is Nothing)
'hier deinen bisherigen Code einfügen
Wend
Voraussetzung ist, das die Zeile, mit dem Suchstring „vorjahresvergleich“ auch gelöscht wird! Habs nicht getestet
mfg
Dirk.Pegasus
Hallo Dirk,
ich habe das mal so probiert:
While Not (Cells.Find(What:=„vorjahresvergleich“, After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False) Is Nothing)
ActiveCell.Offset(20, 0).Range(„A1“).Select
Cells.Find(What:=„vorjahresvergleich“, After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False).Activate
ActiveCell.Offset(-1, 0).Rows(„1:8“).EntireRow.Select
Selection.ClearContents
Wend
Wenn ich das so laufen lasse, bleibt das Makro an der drittletzten Zeile ActiveCell… hängen, mache ich dann während dieser Unterbrechung ein „’“ davor, dann klappt es. aber auch in der 1. Zeile wo das Wort "vorjahres…) stehen soll, wird es weggekappt.
Lasse ich aber jetzt das Makro direkt mit dem „’“ laufen, dann klappt nichts mehr.
Viell. fällt Dir ja noch was ein
Danke vorab.
MfG
Klaus
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Carsten,
ich weiss, dass der Suchbegriff zwischen 13-16 Mal vorkommt, aber das wechselt. Die Zeilen können, müssen aber nicht gelöscht werden. Es langt, wenn die Inhalte der 8 Zeilen gelöscht werden. Mit der ForNext-Schleife, kann ich selbst nichts anfangen. Dafür bräuchte ich Hilfe.
Viele Grüße
Klaus
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hi Klaus,
Makro gebastelt. Siehe unten. Mit dem Makro suche ich den
Begriff „vorjahresvergleich“
gehe dann eine Zeile zurück, lösche dann den Inhalt der
folgenden 8 Zeilen.
du willst den Zeilenbereich löschen der von einer Zeile vor der Zelle/Zeile mit „vorhjahresgedöns“ bis zu Zeile dieser Zelle plus 7 reicht?
„vorjahresvergleich“ steht in A125, welche Zeilen sollen gelöscht werden?
Die Suche kann ab Zeile 20 erfolgen.
Was heißt „kann“?
Wer kann mir sagen, wie das Makro aussehen muss, damit das
Makro (oder Script) für alle Fälle richtig arbeitet:
Ich u.a. 
Gruß
Reinhard
Hallo Reinhard,
das erste Suchwort steht in Spalte A Zeile 66 (löschen Spalten A-H Zeilen 65-72) das zweite steht in 130 (löschen 129-136) das dritte steht in 194 (löschen 193-200) das vierte steht in 258 (löschen 257-264) usw. Suchen ab Zeile 20 hatte ich deswegen angegeben, weil in der Zeile 1 das Suchwort steht, welches stehen bleiben muß.
Gruß Klaus
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Klaus,
relativ einfach, wenn du in der ersten Zeile das Wort findest, wird mit offeset(-1,… eine Zelle angesprochen, die es nicht gibt.
Entweder das ganze in ein if kapseln:
If ActiveCell.Row > 1 Then
…
End If
Dann geht das Makro nur, wenn du in einer entsprechenden Zeile bist.
oder mal über das Offset nachdenken. Kann man den zu löschenden Bereich anders definieren?
mfg
Dirk.Pegasus
Hallo Dirk,
wie würde das denn aussehen mit dem „If“, kann ich dann ja mal probieren. Die anderen Kriterien hatte ich heute morgen einem Kollegen
(siehe oben) geantwortet.
Gruß
Klaus
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo,
ich übernehme aus einer Textdatei Daten ins Excel. Wenn ich
die Textdatei eingelesen habe, muß ich einige Sachen löschen.
da ich diese Arbeit immer wieder machen muß, habe ich mir ein
Makro gebastelt. Siehe unten. Mit dem Makro suche ich den
Begriff „vorjahresvergleich“
gehe dann eine Zeile zurück, lösche dann den Inhalt der
folgenden 8 Zeilen. Die muß ich dann sooft wiederholen, als
der Suchbegriff vorkommen kann. Da sich die Anzahl des
Suchbegriffes aber ändern kann, ist mein Makro anfällig. Die
Suche kann ab Zeile 20 erfolgen.
Wer kann mir sagen, wie das Makro aussehen muss, damit das
Makro (oder Script) für alle Fälle richtig arbeitet:
Danke für die Hilfe.
Gruß Klaus
Hallo Klaus,
hier ein etwas anderer Ansatz für die Suche.
Die Tabelle wird dabei in der Spalte A von unten nach oben nach dem gesuchten Begriff durchsucht und dabei die gewünscht Löschaktion in den Zeilen durchgeführt. Beim Suchbegriff muß dabei die Groß-/Kleinschreibung beachtet werden!
Sub VJ\_Vergleich\_Löschen()
Dim Tabelle As Worksheet
Set Tabelle = ThisWorkbook.ActiveSheet
With Tabelle
For Reihe = .UsedRange.Rows.Count To 20 Step -1
If InStr(1, .Cells(Reihe, 1).Value, "Vorjahresvergleich") \> 0 Then
' .Cells(Reihe, 1).Offset(-1, 0).Rows("1:8").EntireRow.Delete 'Löscht die Reihen
.Cells(Reihe, 1).Offset(-1, 0).Rows("1:8").EntireRow.ClearContents 'Löscht die Inhalte
Reihe = Reihe - 1
End If
Next Reihe
End With
End Sub
Gruß
Franz
Hallo Franz,
danke für die prima Arbeit. Das hilft mir wirklich weiter.
Das klappt sehr gut, wenn ich das Script in die neu eröffnete Mappe einkopiere.
bei dem Ansatz:
„Dim Tabelle As Worksheet
Set Tabelle = ThisWorkbook.ActiveSheet“
muss ich noch was ändern, weisss aber nicht was. Ich lese eine Textdatei mittels Makro ein. Dadurch öffnet sich ein „file“ also neues Blatt. Wenn ich aus der Arbeitsmappe nun das neue Makro aufrufe, passiert nichts. Ich muss also in obigen Ansatz das „File“ unterbringen. Ich habe schon mal versucht hinter Worksheet ein (file)
anzuhängen, was natürlich nicht geht.
Vorab schon mal vielen, vielen Dank.
Gruß Klaus
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Klaus.
Ich habe mir Dein erstes Posting nochmal durchgelesen und bin zu dem Schluss gekommen, dass es wahrscheinlich sogar einfacher ist, den Suchbegriff während des Einlesens der Textdatei schon zu suchen und die Einträge, die Du mit Deinem Excel-Macro löschen willst, gar nicht erst ins Tabellenblatt einzutragen.
Dazu musste man aber wissen, wie Du die Text-Datei einliest bzw. wäre das für Dich überhaupt interessant? Falls ja, kannst Du ja mal den Code für das Einlesen der Textdatei posten.
Viele Grüße
Carsten
Hallo Carsten,
heute morgen (Mitternacht) hat Franz mir eine neue Variante aufgeschrieben (siehe oben) und diese funktioniert, nur ich hab sie noch nicht richtig eingebunden. Aber das kriege ich sichen noch hin.
Vielen, vielen dank für die bisherige Mühe.
Grüße von
Klaus
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Vielen herzlichen Dank für die Superarbeit
Hallo Franz,
ich habe die richtige Folge gefunden: Habe anstelle
'Set Tabelle = ThisWorkbook.ActiveSheet
Set Tabelle = Worksheets(„file“)
eingefügt und so klappt es wunderbar. Vielen Dank nochmals.
Grüße von Klaus
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
ich habe die richtige Folge gefunden: Habe anstelle
'Set Tabelle = ThisWorkbook.ActiveSheet
Set Tabelle = Worksheets(„file“)
eingefügt und so klappt es wunderbar. Vielen Dank nochmals.
Hi Klaus,
lösche die Zeile: Reihe=Reihe - 1
Gruß
Reinhard