繁体   English   中英

Excel VBA:如何根据条件读取列数据和删除工作表

[英]Excel VBA: How to read Column data and delete Worksheet based on criteria

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

就是说,我的问题是要从一列中读取数据,如果某些文本被读取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

如果您有经验,知道如何解决此问题,请回复。 谢谢

尝试这个:

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

结束子

如果我理解正确,请尝试此

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM