Ich habe einen Report der all unsere Aufträge anzeigt. Bis dato war die Spaltenanzahl und der Aufbau immer gleich, wodurch ich nicht benötigte Spalten einfach löschen konnte. Jetzt wurde der Report angepasst und ich habe wesentlich mehr Spalten bzw. die Anzahl scheint sich auch häufiger zu ändern.
Wie kann ich meinem Makro vorgeben, dass es die Überschrift (Zeile 1) durchsuchen soll und alle Spalten markiert/löscht bis ein bestimmter Wert gefunden wurde. Heißt:
1. Beginne deine Suche in Zeile 1 - Spalte R 2. Prüfe jeden Wert in Zeile 1 bis "Ex-Works Price" auftaucht 3. Markiere den Bereich bis zum Schlagwort und lösche ihn
in der beiliegenden Exceldatei habe ich dir im Arbeitsblatt "Tabelle1" den Button "Suchen und Löschen" eingefügt. Ein Klick darauf bewirkt die Ausführung deines Wunschmakros "Suche_Lösche".
Dieses Makro erreichst du auch über die Tastenkombination Alt+F8. Es wird dann jeweils im aktiven Arbeitsblatt ausgeführt.
sorry für die späte Rückmeldung zu dem Thema. War leider etwas untergegangen.
Danke nochmal für dein Makro. Soweit passt es auch. Einen Punkt habe ich aber..... Dein Makro löscht alle Spalten links von der gefundenen Position. Gelöscht werden müssten aber nur die Zeilen links von der gefundenen Position bis der Stelle von wo aus die Suche losging (also R1)
If lngGefSpalte < rgSucheAb.Column Then MsgBox "Die Zelle mit dem Suchtext '" & strSuchtext & "' liegt in " & rgGefZelle.Address & "." & vbNewLine & _ "Sie liegt damit links von der Zelle R1." & vbNewLine & vbNewLine & _ "Es werden daher keine Spalten entfernt." Else
Versuche mal statt If lngGefSpalte < rgSucheAb.Column Then dann If lngGefSpalte >= rgSucheAb.Column Then
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
ich habe den Code dahingehend korrigiert, dass nur die Spalten von Spalte R bis zur Spalte links der gefundenen Stelle entfernt werden; widrigenfalls wird eine Info angezeigt.
Code:
Option Explicit
Public Sub Suche_Lösche() Dim Ws As Worksheet Dim rgSucheAb As Range, lngSucheAb As Long Dim strSuchtext As String Dim rgGefZelle As Range, lngGefSpalte As Long '------ Set Ws = ActiveSheet '------ strSuchtext = "Ex-Works Price" Set rgSucheAb = Ws.Range("R1"): lngSucheAb = rgSucheAb.Column Set rgGefZelle = Ws.Rows(1).Find(What:=strSuchtext, After:=rgSucheAb.Offset(0, -1), _ LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True, _ SearchOrder:=xlByRows, Searchdirection:=xlNext) '------ If rgGefZelle Is Nothing Then MsgBox Prompt:="Keine Zelle mit '" & strSuchtext & "' gefunden." Else lngGefSpalte = rgGefZelle.Column If lngGefSpalte <= rgSucheAb.Column Then MsgBox "Die Zelle mit dem Suchtext '" & strSuchtext & "' liegt in " & rgGefZelle.Address & "." & vbNewLine & _ "Sie liegt damit nicht rechts von der Zelle R1." & vbNewLine & vbNewLine & _ "Es werden daher keine Spalten entfernt." Else 'Suchtext wurde in Zeile 1 ab Zelle R1 gefunden in Zelle rgGefZelle 'Entferne alle Spalten ab Spalte R bis links der Zelle rgGefZelle rgSucheAb.Resize(1, lngGefSpalte - lngSucheAb).EntireColumn.Delete Shift:=xlToLeft End If End If