excel - 使用 Excel VBA 删除相似行
问题描述
我正在尝试为 Excel 宏编写 VBA 代码,以便可以手动触发宏来执行以下操作:
如果任何两行有:
- A列中的相同值
- B 列中的相同值
- C列中的“苹果”
- D列中的相同值
然后我希望删除所有这些行,除了 E 列中具有最高值的行。
例如,如果:
- 单元格 A1 = 单元格 A2
- 单元格 B1 = 单元格 B2
- 单元格 C1 和单元格 C2 = "苹果"
- 单元格 D1 = 单元格 D2
- 单元格 E1 = 5 和单元格 E2 = 10
然后第 1 行被删除,第 2 行保留。
总体目标是删除相似的行。
根据用户的建议,可以通过按 c="apple",a,b,d 对范围进行排序来帮助/简化此过程,以便可以连续分析行。
我将以下代码放在一起,但我不熟悉删除行方面以及如何合并最高值,但这是我最好的选择。If 和 elseif 语句是有问题的。
Sub Macro()
Dim a As Range
Dim b As Range
Dim c As Range
Dim d As Range
Dim e As Range
For Each a In Range("A1:A9999")
For Each b In Range("B1:B9999")
For Each c In Range("C1:C9999")
For Each d In Range("D1:D9999")
For Each e In Range("E1:E9999")
If a.Offset(-1, 0) = a And b.Offset(-1, 0) And c.Offset(-1, 0) = c And d.Offset(-1, 0) = d And e.Offset(-1, 0) < e Then Range(a).EntireRow.Delete
ElseIf a.Offset(-1, 0) = a And b.Offset(-1, 0) And c.Offset(-1, 0) = c And d.Offset(-1, 0) = d And e.Offset(-1, 0) > e Then Range(a.Offset(-1, 0)).EntireRow.Delete
Exit For
Next a
Next b
Next c
Next d
Next e
End Sub
解决方案
我希望它有效。
Option Explicit
Sub RunMacro()
Dim i As Long, LastRow As Long, j As Long
Dim cellA, cellB, cellC, cellD, cellE
Dim Rng As Range
LastRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To LastRow
cellA = Range("A" & i).Value
cellB = Range("B" & i).Value
cellC = Range("C" & i).Value
cellD = Range("D" & i).Value
cellE = Range("E" & i).Value
For j = LastRow To 2 Step -1
If Range("A" & j).Value = cellA And Range("B" & j).Value = cellB Then
If Range("C" & j).Value = cellC And Range("D" & j).Value = cellD Then
If cellE > Range("E" & j).Value Then
Range("E" & j).EntireRow.Delete
LastRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
End If
End If
End If
Next j
Next i
LastRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
With ActiveSheet
Set Rng = Range("A1", Range("E1").End(xlDown))
Rng.RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5), Header:=xlYes
End With
End Sub
推荐阅读
- python - Tkinter 中的浏览功能
- laravel - 如何在 Laravel 中将对象数据读取到请求中?
- azure - Azure IoT Hub 无法检索设备(共享策略已禁用)
- fortran - Fortran 中的关联链?
- python - 如何使功能可以直接从我的包(不是该包中的模块)访问?
- spring-statemachine - 将@WithStateMachine 与@EnableStateMachineFactory 一起使用的正确方法是什么?
- c++ - 如何禁用 Marble Kde 瓷砖移动
- android - 如何 GPG 签署 aar 并将其直接发布到 Maven Central?
- javascript - 如何随着地图位置的变化更新地图的边界?
- pentaho - 使用 ETL 在 Pentaho 中将表 A 中的数据复制/复制 N 次到表 B