我在excel中获得了一些VBA scirpt,它将A列中的唯一值复制到E列,然后将每列的B值总数从B列复制到F列。我在网上找到了以下代码段,并且一直在编辑它以适应我的电子表格。
在示例工作簿中工作的原始代码段,用于将值从列B复制到列K,并将列I汇总到列L中。
Columns("B:B").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Columns( _
"B:B"), CopyToRange:=Range("'Example1'!K1"), Unique:=True
For i = 2 To Cells(Rows.Count, 11).End(xlUp).Row
Cells(i, "L").FormulaR1C1 = "=SUMIF(C[-10],RC[-1],C[-3])"
Next i
我编辑的代码会将唯一值从A复制到E,但不执行总和:
Range("A5:A30").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("'Sheet1'!E7"), Unique:=True
For i = 2 To Cells(Rows.Count, 11).End(xlUp).Row
Cells(i, "F6").FormulaR1C1 = "=SUMIF(C[-4],RC[-1],C[-4])"
Next i
我认为错误的部分是
For i = 2 To Cells(Rows.Count, 11).End(x1Up).Row
但是我确定这条线的含义,特别是它的位置11.任何人都知道为什么这不起作用?
@Jarom 编辑:当我运行已编辑的代码时,我的电子表格看起来像这样,它没有正确合计并给出0值。
{Part Quantity Order Number Part Needed Scanned
6116022-42ID 28 041981
6116022-42ID 13 041981 Part Number 0
6116126-01 42 041981 6116022-42ID 0
6116784-15 42 041981 6116126-01 0
6116022-42ID 1 041981 6116784-15 0 }
答案 0 :(得分:0)
cells
函数根据行号和列号引用单元格,如cells(row reference,column reference)
。因此cells(1,2)
引用了单元格B1
。
看起来问题出在你的循环中。使用for
循环,您可以根据变量的数量运行一定次数的操作。
第一行标识它将执行的循环迭代次数。 i
是设置循环的变量。 i
从7开始,然后转到cells(7,5).end(xldown).Rows
。 cells(7,5).end(xldown).Rows
代码转到单元格E7并获取填充单元格组底部的行号(它相当于ctrl +向下箭头并获取行号)。这样循环从单元格E7开始迭代并转到列E中填充的组单元格中的最低位置。请注意,循环中的代码在{{1}的行部分中引用了i
功能。 cells
随着循环的每次迭代而增加,因此i
函数的输入会增加每个循环,这就是循环在每次迭代中向下移动一行的方式。
cells
我希望这有助于您了解代码的作用。