VBA Rows.count和FormulaR1C1

时间:2017-09-08 15:55:17

标签: excel vba excel-vba

我在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       }

1 个答案:

答案 0 :(得分:0)

cells函数根据行号和列号引用单元格,如cells(row reference,column reference)。因此cells(1,2)引用了单元格B1

看起来问题出在你的循环中。使用for循环,您可以根据变量的数量运行一定次数的操作。 第一行标识它将执行的循环迭代次数。 i是设置循环的变量。 i从7开始,然后转到cells(7,5).end(xldown).Rowscells(7,5).end(xldown).Rows代码转到单元格E7并获取填充单元格组底部的行号(它相当于ctrl +向下箭头并获取行号)。这样循环从单元格E7开始迭代并转到列E中填充的组单元格中的最低位置。请注意,循环中的代码在{{1}的行部分中引用了i功能。 cells随着循环的每次迭代而增加,因此i函数的输入会增加每个循环,这就是循环在每次迭代中向下移动一行的方式。

cells

我希望这有助于您了解代码的作用。