根据文本标准添加值

时间:2017-09-21 06:46:37

标签: excel vba excel-vba

首先展示我的样本表: enter image description here

这是一个保险代理机构的项目,我希望能够计算每个政策的佣金。

我在F栏上创建了一个描述

的SUMIF公式
=SUMIFS(E:E,$A:$A,A2,$C:$C,C2)

如果C和A上的值匹配,则会在列E上添加值。现在我意识到我想要的东西有点复杂。

如果首先它们在A列上匹配,我需要一个可以在E上添加值的公式,然后棘手的部分在C列中,通常值不匹配。

我想在F上添加E中的值。从表示NEW Policy或RENEWAL策略的类型开始。因此,如果它显示“政策认可”,它将添加这些字段,其中包含与A列匹配的所有先前字段,并且位于该字段上的日期与最近(转到过去)续订或新政策佣金字段之间。

如果听起来有点令人困惑,请在下面解释:

正如我所说,这是一个保险机构的项目,我希望能够计算每个政策的佣金。

政策每年续订,并保持相同的政策号码。我们知道这是一个不同术语的唯一方法是查看TYPE和EFFECTIVE DATE。如果我们看到ABIGAIL,我们注意到有2个不同的日期(它们相隔一年),并且类型显示“新政策”,当我们第一次将客户放在此运营商和续订政策时,当该条款重新启动时具有相同的政策编号。

有些政策会在期限中间完成更改,例如SERGIO,在续订前增加了45.51。

我希望从最早的续订或新的政策行开始更新值。

类似的东西:

enter image description here

我用阿比盖尔放置了最清楚的例子。如果您有任何问题,请与我们联系。

我正在寻找常规的Excel公式或VBA代码来完成这项工作。要么对我有用。

1 个答案:

答案 0 :(得分:0)

您可以通过适当的排序然后通过累积添加来通过VBA实现它。

这样的事情:

Sub calcComm()
    Dim rng1 As Range, rng2 As Range, rng3 As Range, rng4 As Range, lastrow As Long, ttl As Double
    lastrow = Cells(ActiveCell.SpecialCells(xlLastCell).Row + 1, 1).End(xlUp).Row + 1
    Set rng1 = ActiveSheet.Range("A" & lastrow & ":E" & 2)
    rng1.Sort Columns(3)
    rng1.Sort Columns(1)
    rng1.Sort Columns(2)
    Set rng3 = rng1.Cells(1)
    For Each rng2 In rng1.Columns(1).Cells
        If rng2 = rng3.Cells(1) And (ttl = 0 Or (rng2.Offset(0, 3) <> "New Policy" And rng2.Offset(0, 3) <> "Renewal Policy")) Then
            ttl = ttl + rng2.Offset(0, 4)
            Set rng3 = Range(rng3.Address & ":" & rng2.Address)
        Else
            For Each rng4 In rng3
                rng4.Offset(0, 5) = ttl
            Next
            Set rng3 = rng2
            ttl = rng2.Offset(0, 4)
        End If
    Next
End Sub