如何让 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 中单元格的物理选择来选择表格视图的单元格?

VBA:在用户定义的函数中创建单元格注释

Excel VBA:如何让 COUNTIF 函数不将文本单元格“1.1”和“1.10”作为重复项?

DataTables jQuery:如何使用单元格的值而不是基于正在呈现的值进行搜索?

[VBA] excel获取单元格的超链接地址函数

VBA - 如何将单元格的值从文本转换为数字