我有一个如下所示的Excel VBA代码,它可以在工作簿的所有工作表上运行,并且运行良好:
Sub MarkCells()
Dim ws As Worksheet
For Each ws In Worksheets
With ws
.Range("C4:C" & .Cells(.Rows.Count, "B").End(xlUp).Row).FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-1],List,1,FALSE)),""KEEP"",""TO DELETE"")"
End With
Next ws
End Sub
我的问题是,如何使此公式在所有工作表中起作用,除了第一个工作表(在本例中为“工作表”)?非常感谢!
答案 0 :(得分:3)
这应该做
Option Explicit
Sub MarkCells()
Dim ws As Worksheet
For Each ws In Worksheets
If ws.Name <> "Macros" Then
With ws
.Range("C4:C" & .Cells(.Rows.Count, "B").End(xlUp).Row).FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-1],List,1,FALSE)),""KEEP"",""TO DELETE"")"
End With
End If
Next ws
End Sub
答案 1 :(得分:2)
请使用此
(?<="\\Wid\\=\\\"[^\"]*)(ä)(?=[^\"]\\\"") // -> ae
(?<="\\Wid\\=\\\"[^\"]*)(ö)(?=[^\"]\\\"") // -> oe
(?<="\\Wid\\=\\\"[^\"]*)(ü)(?=[^\"]\\\"") // -> ...
(?<="\\Wid\\=\\\"[^\"]*)(Ä)(?=[^\"]\\\"")
(?<="\\Wid\\=\\\"[^\"]*)(Ö)(?=[^\"]\\\"")
(?<="\\Wid\\=\\\"[^\"]*)(Ü)(?=[^\"]\\\"")
(?<="\\Wid\\=\\\"[^\"]*)(ß)(?=[^\"]\\\"") // -> ss
答案 2 :(得分:2)
没有人使用过Worksheets集合中的.Index,所以这里还有一个。
Option Explicit
Sub MarkCells()
Dim w As long
For w=2 to Worksheets.count
With Worksheets(w)
.Range(.Cells(4, "C"), .Cells(.Rows.Count, "B").End(xlUp).offset(0, 1)).FormulaR1C1 = _
"=IF(ISERROR(MATCH(RC[-1], List, 0)), ""KEEP"", ""TO DELETE"")"
End With
Next w
End Sub
这种方法存在一个固有的问题,因为除非可以保护工作簿的结构,否则用户可能会重新安排工作表的顺序。
MATCH比等效的VLOOKUP快。
答案 3 :(得分:1)
尝试此代码
imageview