【问题标题】:Delete rows in a select case structure删除选择案例结构中的行
【发布时间】:2022-07-17 06:58:28
【问题描述】:

代码什么都不做(调试时不会出现中断)。

例如,当美国的牛仔裤数量 20。这就是它不删除任何行的原因。不过,我的“UI”表中的值是数字。

Sub test()

Dim jeans As Double

Sheets("UI").Activate
last_row = Cells(Rows.Count, "A").End(xlUp).Row

For i = 2 To last_row 

    jeans = Cells(i, 8).Value

    If Cells(i, 3).Value = "US" Then
        Select Case jeans
        Case jeans < 20
            Rows(i).Delete
        Case Else
        End Select

    ElseIf Cells(i, 3).Value = "EU" Then
        Select Case jeans
        Case jeans < 10
            Rows(i).Delete
        Case Else
        End Select
    
    ElseIf Cells(i, 3).Value = "ASIA" Then
        Select Case jeans
        Case jeans < 10
            Rows(i).Delete
        Case Else
        End Select

    Else
        Rows(i).Delete
    End If

Next i

End Sub

【问题讨论】:

  • 您是否尝试过单步执行代码?删除行时总是向后循环。
  • 我刚刚做了,谢谢,但这很奇怪,因为例如美国的牛仔裤数量 20。这就是它不删除任何行的原因。我的“UI”表中的值是数字。
  • 糟糕,刚刚注意到语法问题。应该是Case is &lt;20

标签: excel vba


【解决方案1】:

根据条件向后循环

  • 您需要向后循环,从下到上覆盖所有单元格。
  • 当代码什么都不做时,检查您计算最后一行的列中是否有数据,在本例中为列A
Option Explicit

Sub LoopBackward()

    With ThisWorkbook.Worksheets("UI")
        
        Dim LastRow As Long: LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        
        Dim Jeans As Double
        Dim r As Long
        
        For r = LastRow To 2 Step -1
            
            Jeans = .Cells(r, "H").Value
            
            Select Case .Cells(r, "C").Value
            Case "US"
                If Jeans < 20 Then .Rows(r).Delete
            Case "EU", "ASIA"
                If Jeans < 10 Then .Rows(r).Delete
            Case Else
                .Rows(r).Delete
            End Select
        
        Next r
    
    End With

End Sub

【讨论】:

  • 非常感谢,我之前不知道循环倒退
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
  • 2016-09-11
相关资源
最近更新 更多