我正在尝试编写一条代码,以删除其中一行单元格不在两个值之间的整个行(这些值也写在两个不同的单元格中)。
我在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
答案 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