VBA中的SumIf(条件变量)

问题描述 投票:1回答:3

我正在尝试编写两个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的新手,非常感谢任何人提供的帮助。谢谢。

excel vba sumifs
3个回答
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数据类型(小数)不同。在转到错误点之前,使用convert to integer Cint将产品更改为整数。


0
投票

数据透视表可能适用于您的问题,可以通过简单的原始和列导航为您提供准确的结果


0
投票

SUMPRODUCT (SUMIF, INDEX/MATCH)

Excel解决方案

  • 假设上半部分是源数据和目标数据。下半部分仅显示匹配列第2行中使用的公式。
  • 该图像可用于更好地解释哪些数据是源(初始)数据,哪些是目标(结果)数据,例如, A列和B列中有数据。我有(想要创建)列F中列B的唯一列表(或列A中的另一个工作表或逗号分隔的字符串中)和列G中的匹配乘数我需要计算数据......并将其复制到第一列中。不需要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)
© www.soinside.com 2019 - 2024. All rights reserved.