Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1480to1484
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Spalten löschen makro
14.03.2016 18:05:22
Dominik
Hallo zusammen,
ich komme bei der Makro-Erstellung nicht weiter. Bin noch Anfänger. Mein Makro soll mehrere Spalten nach bestimmten Suchbegriffen abklappern und die Spalten löschen, wo der Suchbegriff nicht gefunden worden ist. Die Suchbegriffe stehen in einem anderen Tabellenblatt in den Zeilen A2 bis A225. Die Spalten die überprüft werden sollen befinden sich in der Zeile B1 bis BMV1.
Anbei das was ich bislang geschaffen hab. Leider funktioniert es so nicht, mein größtes Problem ist, dass die Spalten gelöscht werden sollen wo der Suchbegriff nicht vorkommt. Habe es über das Markieren versucht, aber ich glaube da gibt es bestimmt noch einfachere Wege. Würde mich freuen, wenn mir jemand helfen könnte!
Option Explicit

Sub SpalteLöschen()
Dim wkb1 As Workbook
Dim wks1 As Worksheet, wks2 As Worksheet
Dim rngList As Range
Dim varArr1() As Variant
Dim Zelle As Range
Dim rngBereich As Range
Set wkb1 = ThisWorkbook
Set wks1 = ThisWorkbook.Worksheets("DFC")
Set wks2 = ThisWorkbook.Worksheets("Tabelle5")
Set rngList = ThisWorkbook.Worksheets("DFC").Range("B1:BMV1")
varArr1() = ThisWorkbook.Worksheets("Tabelle5").Range("A2:A225").Value
For Each Zelle In rngList
For dbl1 = LBound(varArr1) To UBound(varArr1)
If Zelle.Value  varArr1(dbl1, 1) Then
If rngBereich Is Nothing Then
Set rngBereich = Zelle
Else
Set rngBereich = Union(rngBereich, Zelle)
End If
Else: GoTo Weiter
End If
Next dbl1
Weiter:
Next Zelle
rngBereich.Select
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
versuch mal [Spalten löschen, Dictionary]
14.03.2016 19:22:31
Michael
Hi Dominik,
versuch mal das hier:
Option Explicit
Sub SpalteLoeschen()
Dim wkb1 As Workbook
Dim wks1 As Worksheet, wks2 As Worksheet
Dim varArr1 As Variant
Dim o As Object
Dim i As Long
Set wkb1 = ThisWorkbook
Set wks1 = wkb1.Worksheets("DFC")
Set wks2 = wkb1.Worksheets("Tabelle5")
Set o = CreateObject("Scripting.Dictionary")
varArr1 = wks2.Range("A2:A225").Value
For i = LBound(varArr1, 1) To UBound(varArr1, 1)
If varArr1(i, 1)  "" Then o(varArr1(i, 1)) = 1
Next
varArr1 = wks1.Range("B1:BMV2") ' zweite Zeile für True/False
For i = LBound(varArr1, 2) To UBound(varArr1, 2)
varArr1(2, i) = o(varArr1(1, i))  1
Next
Set o = Nothing
Application.ScreenUpdating = False
For i = UBound(varArr1, 2) To LBound(varArr1, 2) Step -1
If varArr1(2, i) Then wks1.Columns(i + 1).EntireColumn.Delete
Next
Application.ScreenUpdating = True
End Sub
Die eine Schleife entfällt wegen des Dictionary.
Alle zu überprüfenden Werte werden in das Dictionary geschrieben, und die verbleibende Schleife überprüft nur, ob der Wert darin enthalten ist:
varArr1(2, i) = o(varArr1(1, i))  1

wenn ja, wird varArr1(2, i) gleich "False", wenn nicht gleich "True".
In der untersten Schleife werden alle Spalten mit "True" von rechts nach links gelöscht (das geht schneller), und zwar
Columns(i + 1), weil wir ja erst in Spalte B angefangen haben...
Schöne Grüße,
Michael

Anzeige
AW: versuch mal [Spalten löschen, Dictionary]
15.03.2016 12:56:58
Dominik
Hi Michael,
vielen Dank!! Das funktioniert hervorragend, rechnet zwar ein paar Minuten aber das ist in Ordnung. Werde nochmal Schritt für Schritt durchgehen, was du da genau gezaubert hast.
Schöne Grüße
Dominik

AW: versuch mal [Spalten löschen, Dictionary]
15.03.2016 14:42:39
Michael
Hi Dominik,
eine gute, aber englische Einführung in Dictionary findest Du hier:
http://www.snb-vba.eu/VBA_Dictionary_en.html
Evtl. könnte man die Zeile
varArr1(2, i) = o(varArr1(1, i))  1

ersetzen durch
varArr1(2, i) = Not o.exists(varArr1(1, i))

das *könnte* evtl. schneller sein, käme auf den Versuch an.
Aber: die reine Rechenzeit sollte = 0 sein, der Aufwand ist sicher das Löschen der Spalten.
Happy Exceling,
Michael
Anzeige

136 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige