如何将IF语句放在Excel VBA的下一个可用列中?

我试图在第2行中的下一个可用列(dynamic)中放置一个IF语句。一旦IF语句在该单元格中,我想要添加来自同一列的最后一个使用行(dynamic)的值。 我在编写IF语句到VBA时遇到了麻烦。 我也需要编码的帮助,所以它在列的最后一行添加到IF语句的单元格中。 这是我的代码到目前为止:

Sub vlookupF5() Dim SourceLastRow As Long Dim OutputLastRow As Long Dim sourceSheet As Worksheet Dim outputSheet As Worksheet Dim NextColumn As Long Dim ColumnStr As String Dim ColumnStr2 As String Dim ColumnStr3 As String Set sourceSheet = Worksheets("Actuals") Set outputSheet = Worksheets("Pivot") With sourceSheet SourceLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row End With With outputSheet NextColumn = .Cells(2, Columns.Count).End(xlToLeft).Column + 1 If NextColumn + 1 < 27 Then ColumnStr = Chr(64 + NextColumn + 1) Else ColumnStr = Chr(64 + Int((NextColumn + 1) / 26)) & Chr(64 + ((NextColumn + 1) Mod 26)) End If If NextColumn - 1 < 27 Then ColumnStr3 = Chr(64 + NextColumn - 1) Else ColumnStr3 = Chr(64 + Int((NextColumn - 1) / 26)) & Chr(64 + ((NextColumn - 1) Mod 26)) End If If NextColumn < 27 Then ColumnStr2 = Chr(64 + NextColumn) Else ColumnStr2 = Chr(64 + Int((NextColumn) / 26)) & Chr(64 + ((NextColumn) Mod 26)) End If OutputLastRow = .Cells(.Rows.Count, "D").End(xlUp).Row - 1 Worksheets("Pivot").Activate .Range(Cells(2, NextColumn), .Cells(2, NextColumn)).Formula = _ "=IF(R3C5=""Feb"",Actuals!R133C22,IF(R3C5=""Mar"",SUM(Actuals!R133C22:R133C600),IF(R3C5=""Apr"",SUM(Actuals!R133C22:R133C24),IF(R3C5=""May"",SUM(Actuals!R133C22:R133C25),IF(R3C5=""Jun"",SUM(Actuals!R133C22:R133C26),IF(R3C5=""Jul"",SUM(Actuals!R133C22:R133C27),IF(R3C5=""Aug"",SUM(Actuals!R133C22:R133C28),IF(R3C5=""sep"",SUM(Actuals!R133C22:R133C29),IF(R3C5=""Oct"",SUM" & _ "!R133C22:R133C30),IF(R3C5=""Nov"",SUM(Actuals!R133C22:R133C31),IF(R3C5=""Dec"",SUM(Actuals!R133C22:R133C32),"""")))))))))))" * .Cells(OutputLastRow, NextColumn) End With End Sub 

我不断收到

“错误13:types不匹配”

对于这一行:

 "=IF(R3C5=""Feb"",Actuals!R133C22,IF(R3C5=""Mar"",SUM(Actuals!R133C22:R133C600),IF(R3C5=""Apr"",SUM(Actuals!R133C22:R133C24),IF(R3C5=""May"",SUM(Actuals!R133C22:R133C25),IF(R3C5=""Jun"",SUM(Actuals!R133C22:R133C26),IF(R3C5=""Jul"",SUM(Actuals!R133C22:R133C27),IF(R3C5=""Aug"",SUM(Actuals!R133C22:R133C28),IF(R3C5=""sep"",SUM(Actuals!R133C22:R133C29),IF(R3C5=""Oct"",SUM" & _ "!R133C22:R133C30),IF(R3C5=""Nov"",SUM(Actuals!R133C22:R133C31),IF(R3C5=""Dec"",SUM(Actuals!R133C22:R133C32),"""")))))))))))" + .Cells(OutputLastRow, NextColumn) 

谁能帮忙?

你正在试图添加一个数字值到一个string文字,这是行不通的:

 .Range(Cells(2, NextColumn), .Cells(2, NextColumn)).Formula = _ "=IF(R3C5=""Feb"",Actuals!R133C22,IF(R3C5=""Mar"",SUM(Actuals!R133C22:R133C600),IF(R3C5=""Apr"",SUM(Actuals!R133C22:R133C24),IF(R3C5=""May"",SUM(Actuals!R133C22:R133C25),IF(R3C5=""Jun"",SUM(Actuals!R133C22:R133C26),IF(R3C5=""Jul"",SUM(Actuals!R133C22:R133C27),IF(R3C5=""Aug"",SUM(Actuals!R133C22:R133C28),IF(R3C5=""sep"",SUM(Actuals!R133C22:R133C29),IF(R3C5=""Oct"",SUM" & _ "!R133C22:R133C30),IF(R3C5=""Nov"",SUM(Actuals!R133C22:R133C31),IF(R3C5=""Dec"",SUM(Actuals!R133C22:R133C32),"""")))))))))))" + .Cells(OutputLastRow, NextColumn) 

我们来分解一下:

 Dim sLongFormula$ sLongFormula = "=IF(R3C5=""Feb"",Actuals!R133C22,IF(R3C5=""Mar"",SUM(Actuals!R133C22:R133C600),IF(R3C5=""Apr"",SUM(Actuals!R133C22:R133C24),IF(R3C5=""May"",SUM(Actuals!R133C22:R133C25),IF(R3C5=""Jun"",SUM(Actuals!R133C22:R133C26),IF(R3C5=""Jul"",SUM(Actuals!R133C22:R133C27),IF(R3C5=""Aug"",SUM(Actuals!R133C22:R133C28),IF(R3C5=""sep"",SUM(Actuals!R133C22:R133C29),IF(R3C5=""Oct"",SUM" & _ "!R133C22:R133C30),IF(R3C5=""Nov"",SUM(Actuals!R133C22:R133C31),IF(R3C5=""Dec"",SUM(Actuals!R133C22:R133C32),"""")))))))))))" 

所以你最终得到的是:

 .Range(Cells(2, NextColumn), .Cells(2, NextColumn)).Formula = sLongFormula + .Cells(OutputLastRow, NextColumn) 

你只是不能将数字值添加到VBA中的string中 (使用& concatenator而不是+会执行numeric => string的隐式types转换)。

你真的需要什么,我想:

 .Range(.Cells(2, NextColumn), .Cells(2, NextColumn)).Formula = _ sLongFormula & "+" & .Cells(OutputLastRow, NextColumn) 

注意增加一个领先的. in .Cells(2, NextColumn)以前,你会得到一个1004,因为你只是激活数据透视表,但是你正在With块中定义一个范围,并且不可能构造一个包含跨越多个工作表。

__

你的公式看起来是可疑的,如果你用更多的换行符分解它,你有:

 sLongFormula = "=IF(R3C5=""Feb"",Actuals!R133C22, IF(R3C5=""Mar"",SUM(Actuals!R133C22:R133C600), _ IF(R3C5=""Apr"",SUM(Actuals!R133C22:R133C24), _ IF(R3C5=""May"",SUM(Actuals!R133C22:R133C25), _ IF(R3C5=""Jun"",SUM(Actuals!R133C22:R133C26), _ IF(R3C5=""Jul"",SUM(Actuals!R133C22:R133C27), _ IF(R3C5=""Aug"",SUM(Actuals!R133C22:R133C28), _ IF(R3C5=""sep"",SUM(Actuals!R133C22:R133C29), _ IF(R3C5=""Oct"",SUM" & _ "!R133C22:R133C30), _ IF(R3C5=""Nov"",SUM(Actuals!R133C22:R133C31), _ IF(R3C5=""Dec"",SUM(Actuals!R133C22:R133C32), _ """")))))))))))" 

所以你错过了一个开放的parens和Oct条件的Actuals

 sLongFormula = "=IF(R3C5=""Feb"",Actuals!R133C22, IF(R3C5=""Mar"",SUM(Actuals!R133C22:R133C600), _ IF(R3C5=""Apr"",SUM(Actuals!R133C22:R133C24), _ IF(R3C5=""May"",SUM(Actuals!R133C22:R133C25), _ IF(R3C5=""Jun"",SUM(Actuals!R133C22:R133C26), _ IF(R3C5=""Jul"",SUM(Actuals!R133C22:R133C27), _ IF(R3C5=""Aug"",SUM(Actuals!R133C22:R133C28), _ IF(R3C5=""sep"",SUM(Actuals!R133C22:R133C29), _ IF(R3C5=""Oct"",SUM(Actuals!R133C22:R133C30), _ IF(R3C5=""Nov"",SUM(Actuals!R133C22:R133C31), _ IF(R3C5=""Dec"",SUM(Actuals!R133C22:R133C32), _ """")))))))))))" 

我也注意到3月份是C600,但其他月份都是从24开始索引的,而奇怪的是,2月份根本就不是Sum函数。 这两个怪癖可能是正确的为您的使用,但他们看起来不一致。

你也可以使用某种查找或SumIf / SumIfs函数来简化这个怪异的函数。