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

问题描述 投票:0回答:1

我正在尝试编写一个代码,该代码可以删除整行,其中其中一个单元格不在两个值之间(这些值也写在两个不同的单元格中)。我没有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
excel vba rows
1个回答
0
投票

测试下面的代码。另外,您真的要删除第一行吗?即包含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 1 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
© www.soinside.com 2019 - 2024. All rights reserved.