【问题标题】:Excel VBA: How to read Column data and delete Worksheet based on criteriaExcel VBA:如何读取列数据并根据条件删除工作表
【发布时间】:2016-12-01 21:25:15
【问题描述】:

我已经对此主题进行了大量研究,但到目前为止还没有运气。 我有中等的编程经验。

也就是说,我的问题是关于从列中读取数据并在某些文本被读取 47 次时删除工作表。

在“L”列中,文本(“n/m”)重复了 47 次。文本始终从第 14 行开始,一直持续到第 70 行。在该范围内有 空格“--------”

如果该列有 47 个“n/m”,那么可以删除工作表,并且它有对包含大约 40 到 100 个工作表的整个工作簿应用/重复。

我的代码:

第一次尝试失败

Sub DeletingBlankPages()
Dim Ws As Worksheet
Dim nm As Range

Set nm = Ws.Range(Columns("12"))
Application.ScreenUpdating = False
For Each Ws In ActiveWorkbook.Worksheets
nm.Select

If nm Is "n/m" Then
    Application.DisplayAlerts = False
Ws.Delete
Application.DisplayAlerts = True
End If
Next Ws
End Sub

第二次尝试还是不行

Sub DeleteRowBasedOnCriteria()
Dim Ws As Worksheet
For Each Ws In ActiveWorkbook.Worksheets
  Application.DisplayAlerts = False

If Range(Columns("12")).Value < 47 > "n/m" _
Then _
    Ws.Delete
    Application.DisplayAlerts = True

End If

Next Ws
End Sub

如果有经验的人知道如何解决这个问题,请回复。 谢谢

【问题讨论】:

  • 您的意思是如果在 L 列的 47 个或更多单元格中找到“n/m”,您要删除工作表吗?单元格是否包含“n/m”以外的文本?我原以为你可以在 VBA 中使用 COUNTIF 函数。
  • 是的,没错

标签: excel multiple-columns worksheet-function worksheet vba


【解决方案1】:

如果我理解正确,试试这个

Sub DeleteRowBasedOnCriteria()

Dim i As Long

For i = Sheets.Count To 1 Step -1
    If WorksheetFunction.CountIf(Sheets(i).Range("L14:L70"), "n/m") >= 47 Then
        If Sheets.Count > 1 Then
            Application.DisplayAlerts = False
            Sheets(i).Delete
            Application.DisplayAlerts = True
        Else
            MsgBox "Only 1 sheet left"
            Exit Sub
        End If
    End If
Next i

End Sub

【讨论】:

  • 不要挑剔,但Worksheets不会比Sheets好吗?
  • Scott - 你说得对,我天生懒惰,节省了一些打字时间。
  • 谢谢 SJR,这很有帮助
【解决方案2】:

试试这个:

Sub DeleteRowBasedOnCriteria()
Dim Ws As Worksheet
Dim Counter As Integer

Application.DisplayAlerts = False
Application.ScreenUpdating = False
For Each Ws In ActiveWorkbook.Worksheets
  Counter = 0
  For i = 14 To 70
      If Ws.Cells(i, 12) = "n/m" Then
          Counter = Counter + 1
      End If
  Next i
  If Counter >= 47 Then
      Ws.Delete
  End If
Next Ws
Application.DisplayAlerts = True
Application.ScreenUpdating = True

结束子

【讨论】:

    猜你喜欢
    • 2014-11-09
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    相关资源
    最近更新 更多