宏通过3个条件并提供价值

时间:2012-08-13 18:57:52

标签: excel vba excel-vba

这是我第一次使用VBA for Excel(我通常编写Java和C ++代码),我希望得到一些提示。

我想为大型数据集编写一个宏,该宏将继续通过以下条件列表来提供美元结果:

  1. 从A列收集单位大小(可能的值0-8)
  2. 确定B列中的单个单元或单元单元(Single-1,Family-0)
  3. 从C列收集实用程序代码(正在评估的产品类型代码)
  4. 根据此信息,将在行中放置一个新值,通过考虑单位大小,单位类型和相关产品来确定公用事业成本。我已经考虑过在循环中使用嵌套的Select Case或嵌套条件,但总的来说我很丢失。

2 个答案:

答案 0 :(得分:0)

似乎工作表公式可能会起作用,但在不知道计算是什么的情况下很难分辨。下面是您将放入标准模块的用户定义函数(UDF)。您可以从以下单元格中调用它:

=computecosts(A2,B2,C2)

显然,代码会根据数据的布局方式和计算结果而改变。

Public Function ComputeCosts(rSize As Range, rFamily As Range, rCode As Range) As Double

    Dim lSizeFactor As Long
    Dim lFamilyFactor As Long
    Dim dCodeFactor As Double
    Dim rFound As Range

    Const lFAMILY As Long = 0

    'Size factor is a function of 0-8, namely adding 1
    lSizeFactor = rSize.Value + 1

    'Family factor is computed in code
    If rFamily.Value = lFAMILY Then
        lFamilyFactor = 3
    Else
        lFamilyFactor = 2
    End If

    'Code factor is looked up in a different sheet
    Set rFound = Worksheets("Sheet2").Columns(1).Cells.Find(rCode.Value, , xlValues, xlWhole)
    If Not rFound Is Nothing Then
        dCodeFactor = rFound.Offset(0, 1).Value
    End If

    'do the math
    ComputeCosts = lSizeFactor * lFamilyFactor * dCodeFactor

End Function

答案 1 :(得分:0)

感谢您的回复,他们有助于理解VBA for Excel。我刚刚将可能的值放在表中,然后使用Index函数中的Match函数来选择正确的值。