如何让 VBA 函数存储单元格地址值而不是这些单元格地址处的值
Posted
技术标签:
【中文标题】如何让 VBA 函数存储单元格地址值而不是这些单元格地址处的值【英文标题】:How to get VBA Function to store cell address values instead of values at these cell address 【发布时间】:2021-03-05 22:36:09 【问题描述】:我知道这是一个非常不寻常的问题,你可能不明白我为什么要这样做,但是......
如果单元格 A1 中的值为 5,则会发生这种情况:
Myfunction(A1):输出 5
在 vba 模块中:
Function Test(array As String)
Test=array
End function
我想要的示例:
Myfunction(A1):输出字符串“A1”
或者
Myfunction(A1:B3):输出字符串“A1:B3”
或者
Myfunction(A1:B3 & B5:B9):输出字符串“A1:B3 & B5:B9”
如何获得 vba 函数来执行此操作。基本上我希望函数将单元格地址存储为字符串,而不是位于单元格地址位置的值。我知道当您将值输入函数或类似的内容时,您可以使用“A1:A4”,但这不是我想要的。这也是一个函数而不是子函数。
【问题讨论】:
第一个例子都很难回答,但是“A1:B3 & B5:B9”会让人困惑吗?您打算用“&”分隔多个范围? 是的,所以在我的代码中,我将使用 split 函数将字符串 A1:A5 和 B1:B5 分成两个单独的字符串。我将使用范围函数从那里创建数组 那么唯一的方法就是使用引号来表示它是一个字符串。但更好的方法是使用作为范围的参数数组,然后使用范围迭代它以加载数组。Function MyFunction(ParamArray arr as range)
然后你可以输入Myfunction(A1:B3,B5:B9)
迭代范围并从它们的值加载数组。
这是一个 xy 问题。如果不确切了解您的计划,我们将无能为力,因为根据您所提供的知识,我们提出的建议是不正确的。
【参考方案1】:
参数数组
Understanding parameter arrays
Excel
中,要选择多区域范围,请选择第一个范围,然后在选择下一个范围时按住CTRL。
在Excel
中使用例如=RangeAddress(A1:A5,C3:C7,Z11:Z75)
。
守则
Option Explicit
Function RangeAddress( _
ParamArray rg() As Variant) _
As String
Dim arg As Variant
If UBound(rg) = 0 Then
RangeAddress = rg(0).Address(0, 0)
Else
Dim n As Long
For Each arg In rg
RangeAddress = RangeAddress & arg.Address(0, 0) & " & "
Next arg
RangeAddress = Left(RangeAddress, Len(RangeAddress) - 3)
End If
End Function
【讨论】:
【参考方案2】:不确定这是否是您要查找的内容,但您可以尝试以下方法:
Function MyFunction(rng as range) as string
MyFunction = cstr(rng.address)
end function
转到您的工作表,选择任何一个或多个单元格。
在您的即时窗口中,输入:?MyFunction(selection)
【讨论】:
感谢您的评论不幸的是,范围方法不适用于 (a1:a5 & b1:b5 & d1:d5) 之类的设置,列和行地址是任意的,实际上不是我的放。以上是关于如何让 VBA 函数存储单元格地址值而不是这些单元格地址处的值的主要内容,如果未能解决你的问题,请参考以下文章
如何根据步进值而不是 swift 3 中单元格的物理选择来选择表格视图的单元格?
Excel VBA:如何让 COUNTIF 函数不将文本单元格“1.1”和“1.10”作为重复项?