删除不在两个其他单元格之间的行

时间:2019-11-05 05:23:27

标签: excel vba rows

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

我在VBA中没有任何背景,这个问题对我来说似乎很复杂,但是由于我的数据在excel中,因此我需要使用VBA。我在下面编写了代码,但是没有用。

我有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

1 个答案:

答案 0 :(得分: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