请你告诉我我使用" < " &$F$1的第二个" < " &$F$1公式有什么问题吗?在所有单元格中返回的所有内容都是假的。最后一个没有<的SUMIFS工作得很好。
Sub SumGroups()
Worksheets("Database").Activate
Dim lastCode, lastFiltCode As Integer
Dim Formula As String
'Determine Last Row in Column O (Unfiltered Codes)
lastCode = Range("O" & Rows.Count).End(xlUp).Row
'Filter Unique Codes into Column A Sheet2
Range("O1:O" & lastCode).AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Sheet2.Range("A1"), Unique:=True
'Determine last Row in Column A (Filtered Codes)
Worksheets("Sheet2").Activate
lastFiltCode = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
'Place SUMIF Formulas in Columns Sheet2
Worksheets("Sheet2").Range("B2:B" & lastFiltCode).Formula = _
"=SUMIFS(Database!$M$2:$M$" & lastCode & ",Database!$O$2:$O$" & lastCode & ",A2)"
Worksheets("Sheet2").Range("D2:D" & lastFiltCode).Formula = _
"=SUMIFS(Database!$M$2:$M$" & lastCode & ",Database!$O$2:$O$" & lastCode & ",A2,Database!$I$2:$I$" & lastCode & "," < " &$F$1)"
Worksheets("Sheet2").Range("F2:F" & lastFiltCode).Formula = _
"=SUMIFS(Database!$M$2:$M$" & lastCode & ",Database!$O$2:$O$" & lastCode & ",A2,Database!$I$2:$I$" & lastCode & ",$F$1)"
End Sub发布于 2017-02-11 14:16:49
首先,为了在公式中获得<$F$1,我使用Chr(34)在公式中添加括号"。
除此之外,你还搞混了几件事:
Worksheets("Database").Activate和Worksheets("Sheet2").Activate,而是使用完全限定的工作表和范围,例如:With Worksheets("Database")和inside lastCode = .Range("O" & .Rows.Count).End(xlUp).Row。Sheet2和Worksheets("Sheet2"),这两个并不总是意味着相同的工作表。您可以将Sheet2 (代码名)重命名为“that”,这将是您的第二个工作表,并将Sheet3 (代码名)重命名为"Sheet2“,这样就有问题了。因此,决定要使用哪种方法(我更喜欢使用Worksheets("Sheet2"))。Dim lastCode, lastFiltCode As Integer的意思是lastCode实际上是Variant,lastFiltCode是Integer。无论如何,当您试图获得最后一行时,最好对这两个变量使用Long。码
Option Explicit
Sub SumGroups()
Dim lastCode As Long, lastFiltCode As Long
'Determine Last Row in Column O (Unfiltered Codes)
With Worksheets("Database")
lastCode = .Range("O" & .Rows.Count).End(xlUp).Row
'Filter Unique Codes into Column A Sheet2
.Range("O1:O" & lastCode).AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Worksheets("Sheet2").Range("A1"), Unique:=True
End With
With Worksheets("Sheet2")
'Determine last Row in Column A (Filtered Codes)
lastFiltCode = .Range("A" & .Rows.Count).End(xlUp).Row
'Place SUMIF Formulas in Columns Sheet2
.Range("B2:B" & lastFiltCode).Formula = _
"=SUMIFS(Database!$M$2:$M$" & lastCode & ",Database!$O$2:$O$" & lastCode & ",A2)"
.Range("D2:D" & lastFiltCode).Formula = _
"=SUMIFS(Database!$M$2:$M$" & lastCode & ",Database!$O$2:$O$" & lastCode & ",A2,Database!$I$2:$I$" & lastCode & "," & Chr(34) & "<" & Chr(34) & "&$F$1)"
.Range("F2:F" & lastFiltCode).Formula = _
"=SUMIFS(Database!$M$2:$M$" & lastCode & ",Database!$O$2:$O$" & lastCode & ",A2,Database!$I$2:$I$" & lastCode & ",$F$1)"
End With
End Sub发布于 2017-02-11 20:44:03
为了澄清为什么其他答案是有效的:
SumIfs (以及其他各种需要字符串运算符(如CountIf)的Excel函数)期望逻辑运算符及其下面的语句以字符串形式表示。即应该用"myString“之类的语言标记来表示。
由于公式也是字符串,例如ActiveCell.Formula = "=If(A1=3, 1, 0)",编译器会对哪组引号表示字符串感到困惑。因此,例如,这将不起作用:ActiveCell.Formula = "=If(A1=3, "Yes", "No")"。
从技术上讲,处理这一问题的方法是将所需的引号括在它自己的引号中;""" myValue """。
然而,这很快就会令人困惑。相反,使用字符函数返回所需的字符。在本例中为34;chr(34) & myvalue & (chr34)。
发布于 2017-02-11 11:09:46
Worksheets("Sheet2").Range("D2:D" & lastFiltCode).Formula = _
"=SUMIFS(Database!$M$2:$M$" & lastCode & ",Database!$O$2:$O$" & lastCode & ",A2,Database!$I$2:$I$" & lastCode & ","" < "" &$F$1)"这样就行了。用< in引号。
https://stackoverflow.com/questions/42174420
复制相似问题