我是VBA的新手,我似乎无法通过Google弄清楚这一点。
我正在尝试遍历工作表,并使用If语句根据第1行的值删除不必要的列。我正在尝试这样做:
Sub Macro1
Dim cell As Range
For Each cell In Rows("1")
If cell.Value <> "order_number", "tax_details", "etc"
Then .EntireColumn.delete
End Sub
但是我似乎无法弄清楚如何将“ If cell.Value”语句与多个值一起使用,也无法弄清楚如何删除不需要的列。任何帮助深表感谢。
干杯
Justin
编辑:感谢所有答复人员,一切都超级有帮助。解决了这个问题,我学到了很多东西。
答案 0 :(得分:2)
您很近。
For
循环必须以Next
语句Then
必须与您的If
出现在同一行,并且必须用End If
关闭(除非您使用单线)AND
分开测试条件Cell
在这里已经是关键字(Range
的子类),因此请将该变量更改为rngCell
或其他名称。 Rows("1")
最好作为显式范围,否则它将逐字遍历该行中的每一列。有很多专栏。Sub Macro1
Dim rngCell As Range
For Each rngCell In Range("A1:GZ1").Cells
If rngCell.Value <> "order_number" And rngCell.Value <> "tax_details" AND rngCell.Value <> "etc" Then
rngCell.EntireColumn.delete
End If
Next cell
End Sub
答案 1 :(得分:1)
似乎没有其他响应可以解决删除列时从左到右循环的事实。从下到上删除行,从右到左删除列,否则您可能会跳过单元格/列。
Sub Macro1
Dim i as long
with worksheets("sheet1")
For i=.cells(1, .columns.count).end(xltoleft).column to 1 step-1
select case lcase(.cells(1, i).value)
case "order_number", "tax_details", "etc"
'do nothing
case else
.columns(i).entirecolumn.delete
end select
next i
end with
End Sub
答案 2 :(得分:0)
您必须每次都进行比较/评估。
If cell.Value <> "order_number" And cell.Value <> "tax_details" And cell.Value <> "etc"
答案 3 :(得分:0)
为了测试多个条件,您可以使用逻辑运算符(AND,OR,NOT等)来创建单个逻辑语句(即,所有3个语句都具有一个值)。如果您希望任何条件都可以使用,请使用“或”,如果您需要同时满足所有3个条件,请使用AND。
If cell.Value <> "order_number", "tax_details", "etc"
应该是
If cell.Value <> "order_number" OR cell.value <> "tax_details" OR cell.value <> "etc" then
要以这种方式删除整个列,您需要引用要删除的列。如果要遍历行,则可以通过
进行访问Cell.EntireColumn.delete