如何使公式适用于除Excel中的第一个工作表之外的所有工作表

时间:2018-08-02 06:55:07

标签: excel vba excel-vba excel-formula

我有一个如下所示的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

我的问题是,如何使此公式在所有工作表中起作用,除了第一个工作表(在本例中为“工作表”)?非常感谢!

4 个答案:

答案 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