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