首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >"<“的VBA中的SUMIFS公式

"<“的VBA中的SUMIFS公式
EN

Stack Overflow用户
提问于 2017-02-11 09:43:11
回答 3查看 1.9K关注 0票数 1

请你告诉我我使用" < " &$F$1的第二个" < " &$F$1公式有什么问题吗?在所有单元格中返回的所有内容都是假的。最后一个没有<的SUMIFS工作得很好。

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-11 14:16:49

首先,为了在公式中获得<$F$1,我使用Chr(34)在公式中添加括号"

除此之外,你还搞混了几件事:

  • 尽量避免使用Worksheets("Database").ActivateWorksheets("Sheet2").Activate,而是使用完全限定的工作表和范围,例如:With Worksheets("Database")和inside lastCode = .Range("O" & .Rows.Count).End(xlUp).Row
  • Sheet2Worksheets("Sheet2"),这两个并不总是意味着相同的工作表。您可以将Sheet2 (代码名)重命名为“that”,这将是您的第二个工作表,并将Sheet3 (代码名)重命名为"Sheet2“,这样就有问题了。因此,决定要使用哪种方法(我更喜欢使用Worksheets("Sheet2"))。
  • Dim lastCode, lastFiltCode As Integer的意思是lastCode实际上是VariantlastFiltCodeInteger。无论如何,当您试图获得最后一行时,最好对这两个变量使用Long

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 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)

票数 2
EN

Stack Overflow用户

发布于 2017-02-11 11:09:46

代码语言:javascript
复制
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引号。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42174420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档