VBA UDF多单元引用

时间:2011-07-22 08:23:41

标签: excel vba user-defined-functions

我正在尝试创建一个UDF,它从4个选定单元格中获取值并使用它执行函数。但是我不知道如何编写函数来识别单元格值。我目前编写的方式我需要输入一个值。有谁可以帮我解决这个相对简单的问题?这是我到目前为止所做的。

Function solubility(anion As String, cation As String, carbon1 As String, carbon2 As String)

修改

因此,例如,我试图选择单元格A,C,E和G,它们包含Tf,Mi,Ch和Ch的值。然后我将使用这些单元格引用一个范围内的相应值来计算和显示最终值。整个代码如下所示。

Function solubility(anion As String, cation As String, carbon1 As String, carbon2 As String)

Dim sum As Double
Dim ncavalue As Long, nanvalue As Long, ncb1value As Long, ncb2value As Long
Dim nca As Long, nan As Long, ncab As Long
Dim coeff As Range, groups As Range

'solubility groups range
groups = Worksheets("Solubility").Range("A2:A33")

'group coefficients range
coeff = Worksheets("Solubility").Range("B2:B33")

'number of groups for each group
ncavalue = Range("AE" & cation.Row)
nanvalue = Range("AC" & anion.Row)
ncb1value = Range("AG" & carbon1.Row)
ncb2value = Range("AI" & carbon2.Row)

j = 0

    For j = 0 To UBound(groups)
        If UCase(anion.Value) = UCase(coeff(j).Value) Then
            'coefficient value
            anvalue = coeff(j).Value
        End If
        If UCase(cation.Value) = UCase(coeff(j).Value) Then
            'coefficient value
            cavalue = coeff(j).Value
        End If
        If cation.Value = "[MIm]" Then
            cavalue = Range("B2")
            ncb1value = ncb1value.Value + 1
        End If
        If UCase(carbon1.Value) = UCase(coeff(j).Value) Then
            'coefficient value
            cb1value = coeff(j).Value
        End If
        If UCase(carbon2.Value) = UCase(coeff(j).Value) Then
            'coefficient value
            cb2value = coeff(j).Value
        End If
    Next j
    sum = anvalue * nanvalue + cavalue * ncavalue + cb1value * ncb1value + cb2value * ncb2value
    solubility = sum + Range("B34").Value
End Function

1 个答案:

答案 0 :(得分:1)

假设第1行,像这样调用函数:

=solubility(A1, C1, E1, G1)