0

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

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

  1. 从 A 列收集单位大小(可能的值 0-8)
  2. 从 B 列确定是单身还是家庭单位(单身- 1,家庭- 0)
  3. 从 C 列收集实用程序代码(被评估产品类型的代码)

根据此信息,将在行中放置一个新值,该值通过考虑单位大小、单位类型和相关产品来确定公用事业成本。我曾考虑Select Case在循环中使用嵌套或嵌套条件,但总的来说我很迷茫。

4

2 回答 2

0

感谢您的回复,它们有助于理解 VBA for Excel。我只是把可能的值放在一个表中,然后在 Index 函数中使用 Match 函数来挑选正确的值。

于 2012-08-14T19:43:00.610 回答
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
于 2012-08-13T20:57:50.663 回答