Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何让VBA函数存储单元格地址值而不是这些单元格地址上的值_Excel_Vba_User Defined Functions - Fatal编程技术网

Excel 如何让VBA函数存储单元格地址值而不是这些单元格地址上的值

Excel 如何让VBA函数存储单元格地址值而不是这些单元格地址上的值,excel,vba,user-defined-functions,Excel,Vba,User Defined Functions,我知道这是一个非常不寻常的问题,你可能不明白我为什么要这样做,但是 如果单元格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

我知道这是一个非常不寻常的问题,你可能不明白我为什么要这样做,但是

如果单元格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”当你在函数中输入值或者沿着这些线输入值时,但这不是我想要的。此外,这是一个函数,而不是子函数。

不确定这是否是您要寻找的,但您可以尝试以下方法:

Function MyFunction(rng as range) as string
   MyFunction = cstr(rng.address)
end function
转到工作表,选择任意单元格

在即时窗口中,键入:
?MyFunction(selection)

ParamArray

  • 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

前两个例子都不难回答,但“A1:B3和B5:B9”令人困惑?您计划用“&”分隔多个范围?是的,因此在我的代码中,我将使用split函数将字符串A1:A5和B1:B5分隔为两个单独的字符串。我将使用range函数从中创建数组,唯一的方法是使用引号表示它是一个字符串。但是更好的方法是使用一个作为范围的param数组,然后用范围迭代以加载数组。
Function MyFunction(paramary arr as range)
然后可以输入
MyFunction(A1:B3,B5:B9)
迭代范围并从其值加载数组。这是一个xy问题。如果不确切了解您的计划,我们将帮不上什么忙,因为我们根据您提供的知识提出的建议是不正确的。感谢您的评论。不幸的是,range方法不适用于(a1:a5和b1:b5和d1:d5)这样的设置,列和行地址是任意的,而不是我实际放置的。