2016-03-11 16 views
2

我想輸入一個SUMIF公式到我的VBA,但單元格的範圍可能會改變,取決於另一個選項卡上的'拉斯特羅'。我能夠得到拉斯特羅沒有問題,但問題是試圖進入我的SUMIF公式。 '拉斯特羅'值應取代單元格Q156 & H156。希望這是有道理的。歡迎任何建議。SUMIF公式其中包括拉斯特羅

見下文:

Sub UpdateReconData() 

    Dim Lastrow6 As Integer 

    'gets last Row on Formatting Spreadsheet 
    Sheets("Formatting").Select 
    Lastrow6 = ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Row 

    Sheets("Recon").Select 

    Range("B2").Select 
    ActiveCell.Value = _ 
     "=SUMIF(Formatting!$Q$2:$Q$156(Recon!$A2&Recon!B$1),Formatting!$H$2:$H$156)" 

End Sub 
+0

我不認爲除非在* criteria_range *和* criteria_value *之間加逗號,否則你不會得到比#REF!錯誤更多的錯誤。 – Jeeped

回答

0

您可以連接的Lastrow6變量代入公式字符串。您可以通過使用&符號(&)符號將字符串與變量連接起來。

Range("B2").Value = _ 
     "=SUMIF(Formatting!$Q$2:$Q$" & Lastrow6 & _ 
     "(Recon!$A2&Recon!B$1),Formatting!$H$2:$H$" & Lastrow6 & ")" 
+0

你我的朋友是絕對的英雄! – Conor

+0

沒問題 - 您還可以通過使用:'表格(「Recon」)來防止選擇範圍和激活表格。範圍(「B2」)。值=「輸入公式」 –

0

在公式中試試這個:

"=SUMIF(Formatting!$Q$2:$Q$" & Lastrow6 & "(Recon!$A2&Recon!B$1),Formatting!$H$2:$H$" & Lastrow6 & ")" 
0

由於lastRow6是在幾個地方,一個Range.Replace method比字符串連接更加容易。

Sub UpdateReconData() 
    Dim lastRow6 As Long 

    'gets last Row on Formatting Spreadsheet 
    With Worksheets("Formatting") 
     lastRow6 = .Cells(Rows.Count, "B").End(xlUp).Row 
    End With 

    With Worksheets("Recon") 
     .Range("B2").Formula = _ 
      Replace("=SUMIF(Formatting!$Q$2:$Q$XYZ, $A2&B$1, Formatting!$H$2:$H$XYZ)", _ 
        "XYZ", lastRow6) 
    End With 
End Sub 

我不完全知道爲什麼你沒有在SUMIF function使用全列引用,但我敢肯定,有數據的其他行是coulod混淆的結果。完整的列引用不會以與SUMPRODUCT function相同的方式減慢SUMIF/SUMIFS。理想情況下,lastRow6可以內置到SUMIF公式中,如下所示。

With Worksheets("Recon") 
     'never have to do this again. 
     .Range("B2").Formula = _ 
      "=SUMIF(Formatting!$Q$2:INDEX(Formatting!$Q:$Q, MATCH(1e99, Formatting!$H:$H)), " & _ 
       "$A2&B$1, " & _ 
       "Formatting!$H$2:INDEX(Formatting!$H:$H, MATCH(1e99, Formatting!$H:$H)))" 
    End With 

MATCH(1e99, Formatting!$H:$H)定位格式化!H:H中包含數字的最後一行。由於您正在總結此列,所以下面沒有任何行。