VBA:在循环中乘以一个分数

我的代码工程下面的作品,但我想添加一个function。 我有一个大的数据表,每行重复三次。 在每一组三个我已经增加了两个月。 目的是将预测的销售额平滑到预计出货date之后的一个月和两个月。 现在我想将列E中的值乘以因子到列F中。每一组中的原始行将在F列中=50%*E:E ,第二行将具有=30%*E:E列F,第三行在F列中有=20%*E:E 。这个过程应该对每一组三行不断重复。 问题:我现在的代码给了我正确的值,但是这个值比他们需要的低两个单元格。 提前感谢您的帮助! 我目前的代码如下:

 Public Sub DateAdd() Dim r As Long Dim l As Long Dim Quant As Long Dim dttTemp As Date Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("SalesForce Projects") Application.ScreenUpdating = False For r = ws.Range("A" & ws.Rows.Count).End(xlUp).Row To 1 Step -1 With ws.Cells(r, 1).EntireRow .Copy .Resize(2).Offset(1, 0).Insert Shift:=xlDown End With dttTemp = ws.Cells(r, "S").Value ws.Cells(r + 1, "S").Value = DateSerial(Year(dttTemp), Month(dttTemp) + 1, Day(dttTemp)) ws.Cells(r + 2, "S").Value = DateSerial(Year(dttTemp), Month(dttTemp) + 2, Day(dttTemp)) Next r Application.ScreenUpdating = True 

'这是我的代码糟糕的地方

 For l = ws.Range("A" & ws.Rows.Count).End(xlUp).Row To 1 Step -3 Quant = ws.Cells(l, "E").Value ws.Cells(l, "F").Value = Cells(l, "E") * 0.5 ws.Cells(l + 1, "F").Value = Cells(l, "E") * 0.3 ws.Cells(l + 2, "F").Value = Cells(l, "E") * 0.2 Next l End Sub 

为什么不在下面的第一个循环呢?

 Public Sub DateAdd() Dim r As Long Dim l As Long Dim Quant As Long Dim dttTemp As Date Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("SalesForce Projects") Application.ScreenUpdating = False For r = ws.Range("A" & ws.Rows.Count).End(xlUp).Row To 1 Step -1 With ws.Cells(r, 1).EntireRow .Copy .Resize(2).Offset(1, 0).Insert Shift:=xlDown End With dttTemp = ws.Cells(r, "S").Value ws.Cells(r, "F").Value = Cells(r, "E") * 0.5 '\\ First line ws.Cells(r + 1, "S").Value = DateSerial(Year(dttTemp), Month(dttTemp) + 1, Day(dttTemp)) ws.Cells(r + 1, "F").Value = Cells(r, "E") * 0.3 '\\ Second line ws.Cells(r + 2, "S").Value = DateSerial(Year(dttTemp), Month(dttTemp) + 2, Day(dttTemp)) ws.Cells(r + 2, "F").Value = Cells(r, "E") * 0.2 '\\ Third line Next r Application.ScreenUpdating = True End Sub 

当你说“E列中的50%的值”时,你可能意味着列E中所有90的整个值或只是一组中三个单元格的值。 如果你的意思是第一个然后(我假设第1行是标题,所以你的值从第2行开始)。在单元格F2中input公式

  =Sum(E:E)*.5 

在单元格F3中input

  =SUM(E:E)*.3 

在单元格F4中input

 =SUM(E:E)*.2 

如果您的意思是其他选项,请input:

 In F2 =Sum(E2:E4)*.5 in F3 =Sum(E2:E4)*.3 In F4 =Sum(E2:e4)*.2 

现在selectf2:f4。 将鼠标放在右下angular,你会看到光标变成一个小黑十字。 双击,公式将被复制到工作表中。 如果您有多张表单要填写,请在开始此过程之前单击选项卡名称,以模拟复制到所有选定的表单。

在这种情况下,不需要向后循环。 将For语句更新For以下内容:

 For l = 1 to ws.Range("A" & ws.Rows.Count).End(xlUp).Row Step 3 

那么它应该产生预期的结果。