使用带有lastrow的countIf函数记录Excel宏

时间:2016-06-09 06:56:15

标签: excel excel-vba macros vba

我的问题如下。我正在为片材录制宏,这个范围是动态的。

公式为=CountIF(A:A;A2)并记录下来:

Range("M2").Select
ActiveCell.FormulaR1C1 = "=COUNTIF(C[-12],RC[-12])"
Range("M2").Select
Selection.AutoFill Destination:=Range("M2:M4333"), Type:=xlFillDefault
Range("M2:M4333").Select

由于行是动态的,我想结束每个公式到lastrow。我在这里搜索了答案并将此功能复制到宏的开头。

Function GetLastRow(sht As Worksheet, col As String) As Integer
GetLastRow = sht.Range(col & CStr(sht.Rows.Count)).End(xlUp).row

现在我试图将其称为原始录制的宏

Range("M2").Select
Range(Selection, Selection.End(xlDown)).Select
Formula1 = "=COUNTIF(A:A" & GetLastRow(Sheets("Sheet1"), "A") & ",A2))"

我将其更改为看起来像在工作表中复制的公式,而不是像记录的那样。我将不胜感激。如果lastrow函数与记录公式一起使用会更好,因为我有很多其他公式也会遇到同样的问题。

1 个答案:

答案 0 :(得分:0)

您希望将第2行中的列M填充到符合A列中最后一个填充单元格的M列中的行。使用Range.Offset propertyRange.Address property获取要在其中使用的正确地址COUNTIF function

With Worksheets("Sheet1")  'you should know what worksheet you are on!
    With .Range("M2:M" & .Cells(.Rows.Count, "A").End(xlUp).Row)
        .FormulaR1C1 = "=COUNTIF(" & .Offset(0, -12).Address(ReferenceStyle:=xlR1C1) & ", RC1)"
    End With
End With

AM_formular1c1