VBA中的SumIf(视变量而定)

时间:2019-02-25 19:03:44

标签: excel vba sumifs

我正在尝试编写两个VBA宏:

第一个使用变量(VariableA)并检查另一个变量(VariableB)的值。根据VariableB的值,将乘数应用于VariableA。然后,获取VariableA的最终值(带有乘数),并将其输出到新变量(VariableC)中。我尝试了一个“ If Then Else”语句,但似乎不起作用(很可能是因为我做错了)。

第二个宏看起来是求和,它将采用VariableC并根据VariableB的值求和变量,并为每次出现的VariableB产生单个输出。

乘数

VariableA VariableB Multiplier VariableC 100 1998 1.4 140 100 1998 1.4 140 100 1999 1.7 170 100 1999 1.7 170 100 2000 2.0 200 100 2000 2.0 200

我试图在VBA中使用SumIfs,但我不断收到错误13,我认为这是由于VariableB和VariableA之间的格式差异引起的。即使将两个变量设置为相同的格式(整数),我仍然会收到错误消息。当我调试它时,它指出我是VariableB问题。

理想情况下,我试图使最终输出看起来像这样:

VariableB SumofVariableC 1998 280 1999 340 2000 400

我是VBA的新手,非常感谢任何人都可以提供的任何帮助。谢谢。

3 个答案:

答案 0 :(得分:0)

就变量乘数而言,请尝试使用Select Case

Dim Vari as Integer
Dim Multi as Single
Vari = VariableB 

Select Case Vari
    Case Is = 1998
        Multi = 1.4
    Case Is = 1999
        Multi = 1.7
    Case Is = 2000
        Multi = 2.0
    Case Else
        Multi = 1.5
End Select

关于第二个问题,我不确定我是否理解发生了什么,但是似乎变量不匹配。您可能需要转换/广播它们。 Integer数据类型与Single数据类型(用于小数)不同。在到达错误点之前,使用转换为整数 Cint 将乘积更改为整数。

答案 1 :(得分:0)

数据透视表可以解决您的问题,并且可以通过在其原始列和列上轻松导航而获得准确的结果

答案 2 :(得分:0)

SUMPRODUCT(SUMIF,INDEX / MATCH)

Excel解决方案

  • 假设上半部分是源数据和目标数据。下部仅显示匹配列第二行中使用的公式。
  • 图像可用于更好地说明哪些数据是源(初始)数据,哪些是目标(结果)数据,例如A和B列中有数据。我(要创建)在F列中(或在A列中的另一个工作表中或以逗号分隔的字符串中)B列的数据的唯一列表,以及在G列中具有匹配的乘数我需要计算数据...并将其复制到I列中。不需要C列和D列...等等。

  • Workbook Download (Dropbox)

图片

enter image description here

公式

=INDEX(G$2:G$4,MATCH(B2,F$2:F$4,0))
=A2*INDEX(G$2:G$4,MATCH(B2,F$2:F$4,0))
=SUMIF(B$2:B$7,F2,D$2:D$7)
=SUMPRODUCT((B$2:B$7=F2)*A$2:A$7*G2)