0
Как изменить макрос так, чтобы он удалял список столбцов, так как он теперь работает, он удаляет все, что не входит в столбец.Как изменить макрос, чтобы удалить «список имени столбца» из списка «Удалить все, кроме списка»
Я попытался, но не смог его получить.
Благодаря
Sub DeleteColumns()
Dim ws As Worksheet
Dim ColList As String, ColArray() As String
Dim LastCol As Long, i As Long, j As Long
Dim boolFound As Boolean
Dim delCols As Range
On Error GoTo Whoa
Application.ScreenUpdating = False
'~~> Set your sheet here
Set ws = Sheets("360")
'~~> List of columns you want to keep. You can keep adding or deleting from this.
'~~> Just ensure that the column names are separated by a COMMA
'~~> The names below can be in any case. It doesn't matter
ColList = "{TOKEN:ATTRIBUTE_3}, {TOKEN:ATTRIBUTE_4}"
'~~> Create an array for comparision
ColArray = Split(ColList, ",")
'~~> Get the last column
LastCol = ws.Cells.Find(What:="*", After:=ws.Range("A1"), Lookat:=xlPart, _
LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, _
MatchCase:=False).Column
'~~> Loop through the Cols. Since there are only 100 Columns
'~~> I am not using .Find and .FindNext
'~~> If you are interested in learning how .Find and .Findnext
'~~> works then see this link
'~~> http://siddharthrout.wordpress.com/2011/07/14/find-and-findnext-in-excel-vba/
For i = 1 To LastCol
boolFound = False
'~~> Checking of the current cell value is present in the array
For j = LBound(ColArray) To UBound(ColArray)
If UCase(Trim(ws.Cells(1, i).Value)) = UCase(Trim(ColArray(j))) Then
'~~> Match Found
boolFound = True
Exit For
End If
Next
'~~> If not match not found
If boolFound = False Then
If delCols Is Nothing Then
Set delCols = ws.Columns(i)
Else
Set delCols = Union(delCols, ws.Columns(i))
End If
End If
Next i
'~~> Act on columns
If Not delCols Is Nothing Then delCols.Delete
LetsContinue:
Application.ScreenUpdating = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume LetsContinue
End Sub
Благодарим за отзыв. Я попробовал ваше предложение, но не работал. – xyz
«не работает» ничего нам не говорит. Что вы имеете в виду? Исходный код ищет любой столбец, который ** не является ** частью ColArray. Он проверяет это с помощью переменной boolFound, а затем ищет, является ли boolFound False. Изменив это, чтобы проверить, является ли boolFound истинным, вместо этого он будет искать столбцы, которые ** являются ** частью ColArray. – tigeravatar
Извините, о моем отсутствии артикуляции и ясности. Я удалил свой макрос, а затем добавил его и внес изменения, на этот раз он работал так, как надеялся, где-то в моих попытках выяснить, как изменить код, я ввел ошибку. Спасибо за помощь. – xyz