- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试在 vba 中使用应用程序 SumProduct 和 Countifs,而不是 .Formula 方法。以下是我每月运行的报告的示例:
我需要能够按多个标准组织这些数据。下面是电子表格的图片,我尝试根据给定的条件组织这些数据:
我创建了宏,以便该电子表格的用户在一个选项卡上输入条件,然后该选项卡会根据他们的输入自动设置格式。数据需要按如下方式组织:
理算员内政部名称>数据集(报告中的 C 列)> claim 类型(报告中的 E 列)>州(报告中的 G 列)
经过多次尝试后,我知道 sumproduct 公式中的 countif 可以实现这一点。下面是我迄今为止编写的代码片段:
Dim linerngs As Range
Dim lineitem As Range
Dim lastlinerow As Long
Dim Tab1LastRow As Long
Dim claimstab As String
Dim wsf
Dim SpecialStates As Range
Dim DedicatedUnits As Range
Dim HomeOffice As String
Dim DataSet As String
claimstab = Sheet2.Range("C2") & " Claims"
priorclaimstab = Sheet2.Range("C3") & " Claims"
Tab1LastRow = Sheets(claimstab).Cells(Sheets(claimstab).Rows.Count, "A").End(xlUp).Row
Set wsf = Application.WorksheetFunction
Set SpecialStates = Sheet2.Range("E2:AA2")
Set DedicatedUnits = Sheet2.Range("E5:BB5")
lastlinerow = Sheet2.Range("D" & Rows.Count).End(xlUp).Row
Set linerngs = Sheet2.Range("D12:D" & lastlinerow).SpecialCells(xlCellTypeConstants, 23)
For Each lineitem In linerngs
HomeOffice = lineitem.Offset(0, -3).Value
DataSet = lineitem.Offset(0, -1).Value
firsttype = lineitem.Offset(0, 1).Address(False, False)
lasttype = lineitem.Offset(0, 6).Address(False, False)
firststate = lineitem.Offset(0, 7).Address(False, False)
laststate = lineitem.Offset(0, 15).Address(False, False)
ClaimTypes = Sheet2.Range(firsttype & ":" & lasttype)
StateJuris = Sheet2.Range(firststate & ":" & laststate)
If InStr(1, lineitem.Value, "Indemnity") > 0 And InStr(1, lineitem.Value, "AOS") = 0 Then
lineitem.Offset(0, 16) = Application.WorksheetFunction.SumProduct(wsf.CountIfs(Sheets(claimstab).Range("B2:B" & Tab1LastRow), HomeOffice, Sheets(claimstab).Range("C2:C" & Tab1LastRow), DataSet, Sheets(claimstab).Range("E2:E" & Tab1LastRow), ClaimTypes, Sheets(claimstab).Range("G2:G" & Tab1LastRow), StateJuris))
End If
Next lineitem
这对所有内容都返回零值。我开始摸索,发现如果我将变量“ClaimTypes”替换为“IN”,并将变量“StateJuris”替换为“TX”或 Countifs 代码中的任何其他州缩写,它会给我一个正确的计算。我知道在 countifs 的电子表格公式版本中,您可以引用水平线的单元格并立即评估它们。例如,如果您查看第二张图片的第 12 行,我需要能够评估第一张图片中报告的 G 列的状态“AK”;“CA”;“HI”;“TX” .
我不知道如何使用 countifs 和 sumproduct 的 VBA 应用程序版本来实现此功能。对此的任何帮助将不胜感激。
编辑:
为了不计算我发布的第二张图片中 E5:W5 范围内的状态,我尝试了如下操作:
If InStr(1, lineitem.Value, "Indemnity") > 0 And InStr(1, lineitem.Value, "AOS") > 0 Then
c = 0
For Each ClaimType In ClaimTypes
For Each DedState In DedicatedUnits
c = c + Application.WorksheetFunction.SumProduct(wsf.CountIfs(Sheets(claimstab).Range("B2:B" & Tab1LastRow), HomeOffice, Sheets(claimstab).Range("C2:C" & Tab1LastRow), DataSet, Sheets(claimstab).Range("E2:E" & Tab1LastRow), ClaimType.Value, Sheets(claimstab).Range("G2:G" & Tab1LastRow), "<>" & DedState.Value))
Next DedState
Next ClaimType
lineitem.Offset(0, 16) = c
End If
但是,这不起作用,而且我也不认为我会这么做。我假设我需要做类似的事情:
If InStr(1, lineitem.Value, "Indemnity") > 0 And InStr(1, lineitem.Value, "AOS") > 0 Then
c = 0
nc = 0
For Each ClaimType In ClaimTypes
c = c + Application.WorksheetFunction.SumProduct(wsf.CountIfs(Sheets(claimstab).Range("B2:B" & Tab1LastRow), HomeOffice, Sheets(claimstab).Range("C2:C" & Tab1LastRow), DataSet, Sheets(claimstab).Range("E2:E" & Tab1LastRow), ClaimType.Value))
Next ClaimType
For Each ClaimType In ClaimTypes
For Each DedState In DedicatedUnits
nc = nc + Application.WorksheetFunction.SumProduct(wsf.CountIfs(Sheets(claimstab).Range("B2:B" & Tab1LastRow), HomeOffice, Sheets(claimstab).Range("C2:C" & Tab1LastRow), DataSet, Sheets(claimstab).Range("E2:E" & Tab1LastRow), ClaimType.Value, Sheets(claimstab).Range("G2:G" & Tab1LastRow), DedState.Value))
Next DedState
Next ClaimType
lineitem.Offset(0, 16) = c - nc
End If
最佳答案
首先,您可以使用 SUM()
在这里而不是 SUMPRODUCT()
- 您仅向 SUMPRODUCT()
提供一个参数,所以它只是返回总和。
其次,如果您确实想在 VBA 中执行数组公式,请将整个公式包装在 EVALUATE([formula])
中。 。但这对你不起作用,因为......
第三,即使您在 Excel 工作表中将其作为数组公式输入,如果 claim types
都有多个条件,它也无法正常工作。和states
,因为它只会添加 claim1
出现的次数和state1
和claim2
和state2
等等(但是,如果任一列只有一个,则该公式将有效。)
所以,如果你想这样做,我会做的是嵌套 FOR
循环,其中每个 Claim Type-State
组合,你再做一个COUNTIFS()
使用特定的Claim Type
和State
并增加运行总计。
更新:例如,类似
c = 0
for each claimType in claimTypes
for each state in StateJuris
c = c + wsf.CountIfs(Sheets(claimstab).Range("B2:B" & Tab1LastRow), HomeOffice, Sheets(claimstab).Range("C2:C" & Tab1LastRow), DataSet, Sheets(claimstab).Range("E2:E" & Tab1LastRow), ClaimType.value, Sheets(claimstab).Range("G2:G" & Tab1LastRow), State.value)
next state
next claimType
lineitem.Offset(0, 16) = c
关于vba - VBA 中的应用程序.SumProduct/Countifs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35137151/
我正在尝试查找特定文本字符串在上次车辆检查中出现的次数。这些列是要检查的区域,每个检查都位于单独的行上。范围是 D6:VG150(150 是为了将来检查)。大多数单元格都是空白的,要么是因为我还没有使
我正在尝试跨多个工作表“计算”第一列(在本例中)中某个对象的数量。第一列中的值是公式的结果(如果重要的话)。到目前为止我已经: =COUNTIF('M904页'!I:I,A13)+COUNTIF('M
我正在寻找一些公式方面的专业知识。我有一个原始数据源,需要能够根据数字和文本格式的许多不同变量在单独的工作表中对其进行汇总。我已经尝试了一些我在本网站上看到的 COUNTIFS、INDEX 和其他公式
Excel文件是这样的 A B 1 0 0 1 1 1 0 1 0 0 1 0 我想使用 Countifs 函数来计算有多少行在任何列中至少有一个“1”,例如 =Countifs(A:A
我在 PowerQuery City 和 People 中有两个表。 城市 Id, Name 1, Brisbane 2, Sydney 3, Melbourne 人 Id, Name, Ci
我正在尝试一个 COUNTIFS 语句, =COUNTIFS(V60:V91, ">="&0,V60:V91,"="&0,V60:V91 ,"<="&30),我们在Stack Overflow上找到一
我的表格列出了乔治·R·R·马丁目前出版的《冰与火之歌》小说中所有 5 部的每个角色。每行包含一条记录,指示该角色来自该系列中的哪本书(编号 1-5),以及一个指示该角色性别(M/F)的字母。例如:
我有以下全部存储为文本的数据,默认为一般单元格格式。 =ISTEXT(G4) =TRUE 'in both spreadsheets. 样本数据 两个工作簿相似。 A1 中的不同日期,以及此处和那里的
我有一个看起来像这样的表: 表 1(起始 A1) 03-02-2021 03-03-2021 角色_1 名称_1 在 出去 角色_1 名称_2 在 在 我需要创建第二个表格,告诉我每个角色每天的“IN
希望尝试在 Excel 中找到以下内容,但在使其正常工作时遇到问题。 我在 A 列中有日期,需要对照查询列中的日期进行比较以进行比较。我想计算比较列大于 A5 中日期或为空单元格的所有记录。我还想检查
我有一个 COUNTIFS,我想说“如果日期 >= “单元格 B4 中的值计数” 所以可以说我有类似的东西 =COUNTIFS(MySheet!C:C,"Y",MySheet!D:D,">=B4")
我需要在单元格中计算 5 个版本的 (Begin with...) 文本, 有 3 个版本的 (End with...) 异常。 为了这个目标,我写下一个公式: =IF(SUM(COUNTIFS(A2
我们有一个包含如下值的表: 我需要一个单元格公式D1计算列 A 中的行数值“一”且 B 列不为空。例如: 在第一行 A1==one但是 B1是空的; (那不算) 在第二行 A2==one和 B2不为空
我目前正在使用 =COUNTIFS()函数计算满足两个条件的值的数量。 =COUNTIFS('2014'!$F:$F, B3, '2014'!$H:$H, A13) 但是我不想也包括特定月份作为条件,
我有一个数据范围 B5:L100。 在 B 列中是字符串标识符,例如“X”或“Y”。 在 C:L 列中,我们输入了不同的人名(每行不超过一次)。 我想计算一个人的名字出现在 B 列是“X”的行中的次数
我试图在 excel 中编写一个公式来计算列 J 中带有"is"的行数,前提是 I 列有条目“BJJ”或“KB”。 这是我迄今为止尝试过的,但它不起作用: Countif(or(I1:I100,"BJ
我希望使用 =count 函数(或其系列之一)来计算值 >2 出现在 B 列中的次数,其中范围(行数)由 A 列中的行数决定-从 A 列中的相邻单元格设置间隔。但是,第 1 列中的单元格之间的间隔是高
我正在尝试使用 countif 函数来计算大型租金卷表上的卧室数量(数百个条目)。 是否可以在不使用辅助列的情况下执行此操作?我试过但得到一个错误。不知道为什么。 谢谢你。 最佳答案 使用通配符: =
我正在尝试编写一个公式来计算表格上特定工作日和特定时间范围内的所有条目。下面是一个示例表: 我将如何编写一个公式来计算周一 02:00-20:00 之间发生的所有条目? 我可以通过简单的 COUNTI
我想在一系列单元格上使用 COUNTIF,其中一些看起来像“<1000”表示“小于 1000” 我想计算有多少单元格具有“<1000”作为文本,但是当我使用 COUNTIF 它解释单元格时,我想,就好
我是一名优秀的程序员,十分优秀!