VBA UDF 多单元格引用
Posted
技术标签:
【中文标题】VBA UDF 多单元格引用【英文标题】:VBA UDF multi-cell reference 【发布时间】:2011-07-22 08:23:40 【问题描述】:我正在尝试创建一个 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
【问题讨论】:
“4 个选定单元格”是什么意思?您是真的通过控制单击来选择它们,还是仅仅指 4 个特定的单元格?如果是后者,那么您要使用哪些单元格,以及您如何尝试在代码中使用它们? 那么它们总是相同的单元格还是您选择不同的单元格? A也不是单元格,但A1是,那么你的单元格在哪一行? @Lance Roberts - 是的,很抱歉造成混乱,但单元格 A1、C1、E1 和 G1。并且可以选择不同的单元格,并且不限于同一行。 好吧,我想您可以更改 UDF 公式中的引用,或者更简单的是选择其他 4 个单元格,并在其中放入对您选择的 4 个的引用。如果您只有一个单元格要选择或一个连续的范围,那么您可以触发它们的更改事件,但否则它不是真正可跟踪的。 【参考方案1】:假设第 1 行,像这样调用函数:
=solubility(A1, C1, E1, G1)
【讨论】:
正如兰斯所说,你已经准备好了。当您将单元格编号作为参数传递时,您实际上是在传递这些单元格的值。以上是关于VBA UDF 多单元格引用的主要内容,如果未能解决你的问题,请参考以下文章
VBA UDF Variant/Integer 和 Variant/String Arrays 仅打印第一个值以输出单元格