Excel公式/ Excel-宏/重复数据

时间:2015-10-08 08:52:49

标签: vba excel-vba excel

美好的一天,非常需要有关某个excel查找/返回值的帮助。我尝试过INDEX / MATCH,VLOOKUP和VBA,但所有这些都失败了,因为我并不熟悉那些。

enter image description here 问题是这个。

查找值将是productID和ContractID以及更改类型。在这种情况下,它是具有多个值的“删除”。我想根据Valid From列的最新日期返回Old Value列中的值。因此,

查看价值 - 产品ID - 合同ID - 改变类型

然后选择多个结果的标准将是有效期的最新日期。请帮忙。最诚挚的问候。

2 个答案:

答案 0 :(得分:0)

也许这会奏效吗?不确定,你可以尝试一下,看看是否:

=SUMPRODUCT((A:A=123456)*(B:B="SGSINtest")*(C:C="delete")*(D:D=MAX(IF(AND(A:A=123456,B:B="SGSINtest,C:C=""delete"),D:D)))*(E:E))

其中A列代表产品ID 列B代表id和 列C表示类型和 D表示日期有效期 E代表OldValue?

答案 1 :(得分:0)

这是一个(非常基本的)宏,应该以某种方式为您提供所需的内容,但要注意它没有经过优化,在大数据上可能会非常慢,而且它假设日期列的格式为日期类型。给定条件,它为您提供与条件匹配的行(作为Range对象),如果有多行,则为最高日期。如果没有符合条件的行,则返回" Nothing"。

Function rowWithHighestVF(productId As Long, contractId As String, typeOfChange As String) As Range
    Dim r As Range, validFrom As Date, maxVF As Date: maxVF = 0
    For Each r In UsedRange.Rows
        If r.Cells(1) = productId And r.Cells(2) = contractId And r.Cells(3) = typeOfChange Then
            validFrom = r.Cells(4)
            If validFrom > maxVF Then
               maxVF = validFrom 
               Set rowWithHighestVF = r
            End If
        End If
    Next
    If Not rowWithHighestVF Is nothing then rowWithHighestVF.Activate
End Function

这是起点。使其适用于您的数据,然后尝试优化它。希望它有所帮助。