使用 VBA 将 Excel 中具有重复值的行替换为 0

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

每个标题,我有这张数据:

111-22-333-4444   $100.00   1
111-22-333-4444   $100.00   2
111-22-333-4444   $100.00   3
111-22-333-4444   $200.00   4
111-22-333-4444   $400.00   5
222-33-444-5555   $500.00   1
222-33-444-5555   $500.00   2
222-33-444-5555   $500.00   3
222-33-444-5555   $700.00   4
222-33-444-5555   $500.00   5

如何编写一个 VBA 子程序,该子程序将采用一组具有相同金额的 $ (100.00) 的重复值 (111-22-333-4444),并替换值大于该最小值的行的 $组在第三列。

我希望结果是这样的:

111-22-333-4444   $100.00   1
111-22-333-4444   $0        2
111-22-333-4444   $0        3
111-22-333-4444   $200.00   4
111-22-333-4444   $400.00   5
222-33-444-5555   $500.00   1
222-33-444-5555   $0        2
222-33-444-5555   $0        2
222-33-444-5555   $700.00   4
222-33-444-5555   $0        5

我尝试使用 IF 语句查找第一列中每个不同值的重复值,并将它们作为范围分配给变量,然后遍历该范围以查找第三列中的最小值,但到目前为止还没有运气.

预先感谢您提供任何见解!

excel vba duplicates
1个回答
0
投票
  • 将数据加载到数组中并与上面的值进行比较
Option Explicit

Sub Demo()
    Dim i As Long, j As Long
    Dim arrData, rngData As Range
    Dim arrRes, iR As Long
    Dim LastRow As Long, vVal
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row
    Set rngData = Range("A1:B" & LastRow)
    arrData = rngData.Value
    ReDim arrRes(1 To UBound(arrData), 1 To UBound(arrData, 2))
    vVal = arrData(1, 2)
    For i = LBound(arrData) + 1 To UBound(arrData)
        If arrData(i, 2) = vVal Then
            arrData(i, 2) = 0
        Else
            vVal = arrData(i, 2)
        End If
    Next i
    rngData.Value = arrData
End Sub

© www.soinside.com 2019 - 2024. All rights reserved.