2017-05-12 4 views
0

Ich habe das unten zusammengestellt, aber ich bin nicht vertraut mit VBA, so dass es offensichtlich nicht funktioniert.VBA für mehrere Kriterien zu suchen, und löschen Sie die Spalten, die diese Kriterien nicht enthalten

Sub DeleteUneededColumn() 
Dim FindString As String 
Dim Rng As Range 
FindString = "Type" 
If Trim(FindString) <> "" Then 
    With Sheets("page 1").Range("A:ZZ") 
     Set Rng = .Find(What:=FindString, _ 
         After:=.Cells(.Cells.Count), _ 
         LookIn:=xlValues, _ 
         LookAt:=xlWhole, _ 
         SearchOrder:=xlByRows, _ 
         SearchDirection:=xlNext, _ 
         MatchCase:=False) 
     If Rng Is Nothing Then 
      Rng.EntireColumn.Delete 
     End If 
    End With 
End If 
End Sub 

Gemäß dem Titel, braucht es mehrere Kriterien zu finden (Im Idealfall einige Keywords basierend auf I in Zellen A1:A3 auf Sheet1 eingegeben haben), habe ich versucht, es mit nur einem ersten, aber keine Freude zum Laufen zu bringen. Löschen Sie dann für jede Spalte in page 1, die diese Wörter nicht enthält, diese Spalte.

Ich verstehe .Find wird ein großer Teil davon sein, aber nicht sicher auf den Rest.

+0

Suche ist in der Regel ein guter Weg zu gehen, aber ich bin in diesem Fall nicht sicher, weil Sie wollen, um die Bereiche zu erfassen, die nicht finden finden, wenn der Sinn macht. Verwenden Sie Find, obwohl Sie FindString in ein Array von Suchbegriffen umwandeln können, durchlaufen Sie sie und notieren Sie die Spaltennummer jedes von Find zurückgegebenen Ergebnisses, und führen Sie am Ende eine Schleife durch, und löschen Sie alle Spalten außer ihnen. Sie müssen Ihren Suchcode anpassen, um mehrere Ergebnisse zurückzugeben. Es gibt viele Beispiele dafür. – SJR

Antwort

1

Suchen gibt den Bereich mit dem ersten Vorkommen zurück, in dem die Zeichenfolge gefunden wurde und Sie den gesamten Bereich durchsuchen.

Ich habe Ihren Code so geändert, dass er spaltenweise erscheint und alle Spalten sammelt, in denen die Zeichenfolge nicht gefunden wird, und löscht diesen Bereich.

Sub DeleteUneededColumn() 

Dim FindString As String 
Dim Rng As Range 

FindString = "C" 

Dim rngCol As Range, rngDelete As Range 

For Each rngCol In Range("A:ZZ").Columns 
    Set Rng = rngCol.Find(What:=FindString, _ 
         LookIn:=xlValues, _ 
         LookAt:=xlWhole, _ 
         SearchOrder:=xlByRows, _ 
         SearchDirection:=xlNext, _ 
         MatchCase:=False) 
    If Rng Is Nothing Then 
     If rngDelete Is Nothing Then 
      Set rngDelete = rngCol 
     Else 
      Set rngDelete = Union(rngDelete, rngCol) 
     End If 
    End If 

Next 

rngDelete.Delete 

End Sub 
+0

Können Sie sich einen Fall vorstellen, bei dem Ihre Lösung fehlschlägt? :) Nur neugierig? – Vityata

+0

Ausgezeichnet, ich habe das funktioniert gut, aber jetzt muss ich es für mehrere Suchkriterien anpassen, durch bestimmte Zellen (A1, A2, A3) in einem anderen Blatt – Aurelius

+0

Finden, prüfen, ob Bereich nichts ist, zweite Suche, zu überprüfen Wenn der Bereich nichts ist, suche die dritte Suche, überprüfe, ob der Bereich nichts ist und füge dann rngDelete hinzu. Komm schon, muss ich alles für dich tun? – jivko

Verwandte Themen