首先,我将展示我的样本表:

这是一个保险机构的项目,我希望能够计算每个保单的佣金。
我在F列上创建了一个SUMIF公式
=SUMIFS(E:E,$A:$A,A2,$C:$C,C2)如果C和A上的值匹配,则将E列上的值相加。现在我意识到我想要的东西有点复杂。
我需要一个公式,它可以将E上的值相加,如果它们首先在列A上匹配,那么棘手的部分在列C上,通常值不会匹配。
我想从表示新策略或续订策略的类型开始,将E中的值与F相加。因此,如果它说“保单认可”,它将添加这些字段和所有以前的字段,这些字段与列A匹配,并且在该字段上的日期和最近的(过去)续订或新政策委托字段之间。
如果这听起来有点令人困惑,我将在下面解释:
正如我所说,这是一个保险机构的项目,我希望能够计算每个保单的佣金。
保单每年更新一次,保单编号保持不变。我们知道这是一个不同的术语的唯一方法是查看类型和生效日期。如果我们看到ABIGAIL,我们注意到有两个不同的日期(它们正好相隔一年),类型显示"new policy“,当我们第一次将客户放在该运营商上时,类型显示”new Policy“,当条款重新开始时,续订政策在具有相同保单编号的新保单上。
一些保单在期中完成更改,比如SERGIO,他在续签之前增加了45.51。
我希望从最早的续订或新策略行开始更新值。
如下所示:

我给abigail举了一个最清楚的例子。如果你有任何问题请告诉我。
我正在寻找一个常规的Excel公式或VBA代码来完成这一点。对我来说,这两个都行。
发布于 2017-09-22 13:04:31
您可以通过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 Subhttps://stackoverflow.com/questions/46337167
复制相似问题