【问题标题】:Excel VBA allowing me to delete rows based on both formatting and emptyExcel VBA允许我删除基于格式和空的行
【发布时间】:2016-01-04 13:08:21
【问题描述】:

我希望删除我的电子表格中不直接靠近绿色绿色方块的所有空行。例如:

我拥有的是这样的:

Green
Empty
Green
Empty
Green
Empty
Empty
Empty
Empty
Green
Empty
Empty
Empty
Green

我希望得到这个:

Green
Empty
Green
Empty
Green
Empty
Green
Empty
Green
Empty

(等等)

我的电子表格有数千行 - 如果我全部检查一遍,如果我不想手动删除整行,我会在这里很长时间!

我已经尝试过过滤,但我的 excel 技能是基本的,我所能得到的要么全是彩色的,要么全是空白的......

我查找了一些 VBA - 我觉得这会做类似的事情,但由于我不知道任何 VBA,我不知道如何更改它以满足我的需要。

Sub RemoveEveryOtherRow()
    Dim rowNo, rowStart, rowFinish, rowStep As Long
    Dim rng2Delete As Range

    rowStep = 2
    rowStart = Application.Selection.Cells(1, 1).Row
    rowFinish = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    For rowNo = rowStart To rowFinish Step rowStep
        If Not rng2Delete Is Nothing Then
            Set rng2Delete = Application.Union(rng2Delete, _
             ActiveSheet.Cells(rowNo, 1))
        Else
            Set rng2Delete = ActiveSheet.Cells(rowNo, 1)
        End If
    Next
    If Not rng2Delete Is Nothing Then
        rng2Delete.EntireRow.Delete
        ' Hide every other row
        'rng2Delete.EntireRow.Hidden = True
    End If

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub

非常感谢任何帮助!

【问题讨论】:

  • green empty empty green 也不算吗?两个空单元格都紧挨着一个绿色方块...
  • 我认为没有公式可以实现这一点。但是 VBA(应用程序的 Visual Basic)应该能够做到这一点。看一下标签:[excel-vba]
  • 公式不删除行。您可能可以使用公式在另一列中重现数据列,但要修复原始数据,您需要 VBA。 edit 如果“绿色方块”是指绿色背面填充的单元格,那么不,没有公式可以做到这一点。
  • @DirkReichel - 感谢您指出这一点。我希望只保留绿色行后面的空白行。
  • @Luuklag - VBA,这对我来说将是一个全新的世界!

标签: excel filter delete-row conditional-formatting vba


【解决方案1】:

您可以使用以下代码,它适用于我:

Sub RemoveEveryOtherRow()
    Dim rowNo, rowStart, rowFinish, rowStep As Long
    Dim rng2Delete As Range

    rowStart = 1
    rowFinish = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row


    While rowNo < rowFinish
         rowNo = rowNo + 1
         Range("A" & rowNo).Select
         Range("A" & rowNo).Activate
        If ActiveCell.Value = "" And ActiveCell.Interior.Color <> 5287936 Then
            If ActiveCell.Offset(-1, 0).Interior.Color <> 5287936 Then
                ActiveCell.EntireRow.Delete
                rowNo = rowNo - 1
                rowFinish = rowFinish - 1
            End If
        End If
    Wend

End Sub

这里,数字 5287936 代表 Excel 中的“绿色”颜色。我假设你说的时候

彩色绿色方块

您的意思是背景颜色为绿色的单元格 (5287936)。我刚刚检查了 A 列的空单元格,您可以适当地修改空行的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 2015-08-08
    • 2012-03-20
    相关资源
    最近更新 更多