让我们来看看。我有整个列的命名范围,假设A:A名为MyColumn。如果我在单元格B1上放上公式“ = MyColumn” ...,它将自动将与“ MyColumn”相交的“ MyColumn”上的单元格,在这种情况下,当然是A1。我可以将此公式填充从B1拖放到B5,其值将从A1到A5。我们对此表示满意。
我需要使用此逻辑在VBA上编写公式。使用ActiveCell.Row对我来说是没有意义的,因为如果我从B1拖放到B5 ...所有单元格都像B1那样被填充:
Function Test(ByVal a As Range) As String
Test = a(ActiveCell.Row)
End Function
有了以上,我的结果是这样的:
valor1 | valor1
valor2 | valor1
valor3 | valor1
valor.. | ...
valorn | valor1
仅当我选择一个单元格并按F2然后输入时,该值才固定。
我到底打算做什么?我需要一个仅从单元格右边修剪空格的函数,因为它的值是缩进的,但可以包含尾随空格。我的实际功能如下所示:
Function TrimIndented(ByVal tText As Range) As String
TrimIndented = RTrim(tText(ActiveCell.Row))
End Function
经过对网络的深入研究,我只找到了使用“活动单元”的解决方案,但是我发现了有关“ ThisWorkbook”的内容,该内容引用了BOOK当前正在运行的代码,而不是活动代码。我需要类似的东西,但是需要一个牢房。
你能帮我么?
====-编辑
====-
谢谢并恭祝安康 :)
尝试如下所示的UDF。
请注意,对于要部署到客户端的UDF,您应该通过在循环之前将范围加载到数组中来提高其在大型数据集上的性能,还应考虑使其适应于处理输入数组等以及Excel公式中其他常见的类型。这是为了给它提供用户期望内置功能的功能和性能。
用法就像:
=RTRIM(" hello ")
返回:“ hello”)=RTRIM(A1)
返回A1 =“ hello”:“ hello”)(当然可以将其向下拖动到列等)=RTRIM(A1:A5)
返回:依次按Arim:A5中的每个单元格的数组(例如{“ a”,“ b”}等)INDEX
缩小范围,例如:=RTRIM(INDEX(myName,ROW()))
样例代码:
Function RTRIM(ref)
Dim i As Long, j As Long
Dim results
If TypeOf ref Is Range Then
ReDim results(1 To ref.Rows.Count, 1 To ref.Columns.Count)
For i = 1 To UBound(results, 1)
For j = 1 To UBound(results, 2)
results(i, j) = VBA.RTrim(ref(i, j))
Next j
Next i
RTRIM = results
ElseIf VarType(ref) = vbString Then
RTRIM = VBA.RTrim(ref)
Else
RTRIM = CVErr(XlCVError.xlErrValue)
End If
End Function
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句