根据条件删除行?

时间:2017-10-09 13:53:28

标签: vba excel-vba excel

我在A栏上有一些值,例如:

"A"        "B"
1           ok
1           ok
1           me
2           next
2           next
2           next

我的代码去了" A"如果它是完全相同的,我想要的是如果列" A"让所有人检查一下" B"最后一个值是" me"如果它在那里,留下那些行" 1"仅在A列中,如果不是,则删除所有包含" 1"的行。不知道如何实现这一目标。任何帮助表示赞赏。

Dim i As Long
Dim initialPlaceHolderValue As String
Set UsedRng = ActiveSheet.UsedRange

FirstRow = UsedRng(1).Row
LastRow = UsedRng(UsedRng.Cells.Count).Row
r = WorksheetFunction.RandBetween(180, 255)
g = WorksheetFunction.RandBetween(180, 255)
b = WorksheetFunction.RandBetween(180, 255)
initialPlaceHolderValue = Cells(FirstRow + 1, 1).Value
For i = FirstRow + 1 To LastRow
    myColor = RGB(r, g, b)
    If Cells(i, 1).Value = initialPlaceHolderValue Then
        Debug.Print Cells(i, 19).Value
        Cells(i, 1).EntireRow.Interior.Color = myColor

    Else
        Dim myRange As Range

        initialPlaceHolderValue = Cells(i, 1).Value
        r = WorksheetFunction.RandBetween(180, 255)
        g = WorksheetFunction.RandBetween(180, 255)
        b = WorksheetFunction.RandBetween(180, 255)
        Cells(i, 1).EntireRow.Interior.Color = RGB(r, g, b)
    End If
Next i

2 个答案:

答案 0 :(得分:0)

这是一个非常基本的蛮力方法:

  1. 查找是否有这样一对单元格:" 1"在A-col和" m"在B-col
  2. 如果存在这样的一对,那么用" 1"在A-col而不是" m"在B柱;警告:从范围的底部开始并查看工作表的顶部(否则删除行可能会弄乱您的逻辑)。删除任何此类行。
  3. 重做LastRow = ...位,因为如果删除任何行,它将变小。
  4. LastRow = ...行与`r = ..."之间执行此操作线。

    祝你好运,并与我们分享你的成功。

    而且,顺便说一句,如果你确实声明了所有变量,那么这是一个很好的做法(你当然应该这样做)。此外,没有必要一遍又一遍地声明任何WITHIN循环,就像你在myRange所做的那样;把它移到子的顶部。

答案 1 :(得分:0)

以下代码应该达到你想要的(至少我想你想要的,你的问题不是很容易理解)。

Sub RemoveIfNot1AndMe()
    For Each cell In Range("Your Range In Column A")
        If (cell.Value = "1") Then
            If (Range(cell.Address).Offset(0, 1).Value <> "me") Then
                Rows(cell.Row).EntireRow.Delete
            End If
        End If
    Next cell
End Sub

说明

循环将遍历行中的每个单元格(可能是您的列),如果值 1 ,它将检查其旁边的单元格是否包含 me 如果它没有删除它。

这样的东西
"A"        "B"
1           ok
1           ok
1           me
2           next
2           next
2           next

最终看起来像这样

"A"        "B"
1           ok
1           ok
2           next
2           next
2           next

修改

Sub RemoveIfNot1AndMe()
    Dim deleteRowsWithValue1 As Boolean
    deleteRowsWithValue1 = False

    For Each cell In Range("Your range")
        If (cell.Value = "1") Then
            If (Range(cell.Address).Offset(0, 1).Value = "me") Then
                deleteRowsWithValue1 = True
            End If
        End If
    Next cell

    If (deleteRowsWithValue1) Then
        For i = 1 To Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count
            If (Range("A" & i).Value = "1") Then
                Rows(i).EntireRow.Delete
                i = i - 1
            End If
        Next
    End If
End Sub

这样的东西
"A"        "B"
1           ok
1           ok
1           me
2           next
2           next
2           next

最终看起来像这样

"A"        "B"
2           next
2           next
2           next