2016-06-09 47 views
0

我的問題是以下。我正在錄製宏,因爲它的範圍是動態的。記錄Excel宏與countIf函數與拉斯特羅

的公式是=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))" 

我改變了它看起來就像是在工作表複製而不是像it's記錄的公式來此打電話錄製宏的原單。我希望對此有所幫助。如果lastrow函數與記錄的公式一起使用會更好,因爲我有許多其他公式會遇到同樣的問題。

+0

它是[Range.Formula](https://msdn.microsoft.com/en-us/library/office/ff838835.aspx)或[Range.FormulaR1C1](HTTPS:/ /msdn.microsoft.com/en-us/library/bb213527.aspx),而不是'.Formula1'。 – Jeeped

回答

0

要填充第2行M列下來,以滿足在A列的最後一個單元格填充使用Range.Offset propertyRange.Address property以獲得正確的地址,在COUNTIF function使用M列的行。

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