【问题标题】:Remove rows that are not between two other cells删除不在两个其他单元格之间的行
【发布时间】:2020-02-03 23:33:22
【问题描述】:

我正在尝试删除其中一个单元格不在两个值之间的整行(这些值也写在两个不同的单元格中)。

我有 31 行和 60 列(全部用数字填充)。我需要将第 58 列(31 个数字)中的所有值与两个单元格(例如单元格 BK1 和 BL1)进行比较,如果这些值不在这两个单元格值之间,请删除包含该值的整行。

我在下面写了代码。

Sub Deleterow()

Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet
Dim c As Range

Set shSource = wb.Sheets("Sheet1")

    For i = 1 To 31
        If (Sheet1.Range("BK1").Value2 = "") And (Sheet1.Range("BL1") _
           .Value2 = "") Then GoTo Line1
        End If
Line1:
        If (Sheet1.Range(i, 59).Value2 < Sheet1.Range("BK1").Value2 _
            Or Sheet1.Range(i, 59).Value2 > Sheet1.Range("BL1").Value2) Then

            Delete.Rows (i)
        End If
    Next

End Sub

【问题讨论】:

  • 不,我只是想删除第 2 到 31 行(跳过包含 BK1 和 BL1 的行)
  • 请编辑您的帖子并删除此行
  • 我认为代码是正确的,但它确实删除了很多不应该删除的行:(
  • 干杯!有效。最后如果需要更改为“或”而不是“与”。

标签: excel vba rows


【解决方案1】:

测试下面的代码。另外,你真的要删除第一行吗?即持有 BK1, BL1 的线?

Option Explicit

Public Sub sDeleteRow()

  Dim ws As Worksheet, r As Range
  Dim lowerValue As Variant, upperValue As Variant, testValue As Variant
  Dim i As Long

  Set ws = ThisWorkbook.Sheets("Sheet1")

  If ws.Range("BK1").Value = "" Or ws.Range("BL1").Value = "" Then
    MsgBox "Can't run macro as BK1 or BL1 is blank"
    Exit Sub
  End If

  lowerValue = ws.Range("BK1").Value
  upperValue = ws.Range("BL1").Value

  If IsNumeric(lowerValue) And IsNumeric(upperValue) Then
    For i = 31 To 2 Step -1
      Set r = ws.Cells(i, 59)
      testValue = r.Value
      If IsNumeric(testValue) Then
        If (testValue < lowerValue And testValue > upperValue) Then
          r.EntireRow.Delete
        End If
      End If
    Next i
  End If
End Sub

【讨论】:

  • 假设您正在比较数字 :-)
猜你喜欢
  • 1970-01-01
  • 2014-02-27
  • 2021-09-22
  • 2016-05-09
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多