我有一个工作表从同一工作簿(= data!C68)中的不同工作表中返回一个值,该值返回一个值。在Excel中找到另一个单元格的单元格引用
Ina另一个单元我想引用原始单元格中的引用,但将行增加1 - (= data!C69)。这些单元并不相邻。
这可能与函数或fromula?
感谢
乔纳森
我有一个工作表从同一工作簿(= data!C68)中的不同工作表中返回一个值,该值返回一个值。在Excel中找到另一个单元格的单元格引用
Ina另一个单元我想引用原始单元格中的引用,但将行增加1 - (= data!C69)。这些单元并不相邻。
这可能与函数或fromula?
感谢
乔纳森
Option Explicit
Function GetCellReferenceUsedInFormula(ByVal src As Range) As Range
If src.HasFormula Then
Set GetCellReferenceUsedInFormula = Evaluate(Mid(src.Formula, 2))
End If
End Function
而在式与OFFSET
=OFFSET(GetCellReferenceUsedInFormula(A1),1,0)
这是假设单元格A1包含式=data!C68
使用上述功能。
请注意,VBA代码假定公式很简单(即=somecellreference
)。
有很多种方法来实现这一目标。这是一种方法。我通过合并您想要偏移的行和列来扩展该功能。一个模块
语法
=的getOffset(范围,行,列)
备注
范围(必需)在这个代码粘贴是具有下式的单元
行(可选)您想要的行(s) ø偏移
山口(可选)柱(S)要偏移
示例用法
=的getOffset(A1):这将拾取器从同一单元中的值A1是指的是。如果A1是指=data!C69
然后的getOffset将得到的数据值C69
=的getOffset(A1,1):这将皮卡从下一个单元格的值(1排下来)A1为参照。如果A1是指=data!C69
然后的getOffset从数据中获取价值C70
=的getOffset(A1,1,1):这将皮卡从下一个单元格(跨1列1行向下)的值A1指的是。如果A1是指=data!C69
然后的getOffset从数据中获取价值D70
=的getOffset(A1,0,1):这将皮卡从下一个单元格的值(跨1列同一行)A1为指的是。如果A1指的是=data!C69
那么GetOffset将从数据中获得价值!D69
CODE
Public Function GetOffset(Rng As Range, Rw As Long, Col As Long) As Variant
Dim MyArray() As String, strTemp As String
Dim TempRow As Long, TempCol As Long
On Error GoTo Whoa
Application.Volatile
MyArray = Split(Rng.Formula, "!")
TempRow = Range(MyArray(UBound(MyArray))).Row
TempCol = Range(MyArray(UBound(MyArray))).Column
TempRow = TempRow + Rw
TempCol = TempCol + Col
strTemp = MyArray(0) & "!" & Cells(TempRow, TempCol).Address
GetOffset = Application.Evaluate(Trim(strTemp))
Exit Function
Whoa:
End Function
哇,哇,哇。这真的很棒,它像梦一样运作,我不能够感谢你,它已经让我几个小时了。我非常感谢你的帮助。感谢Jonathan – 2012-01-29 19:54:31
使用'Application.Volatile'不是一个好习惯。即VBA代码将在纸张上发生计算事件时执行,无论是否有任何相关单元已经改变。 – shahkalpesh 2012-01-29 19:56:47
这不是一个好习惯吗?我很抱歉,但是说谁? :)我希望它重新计算,因此我将其纳入:)你的意思是说自从NOW(),RAND()改变计算事件,所以这是不好的?您必须明智地使用Application.Volatile,因为冗长的函数可能会让您的工作表变慢,因此不存在任何问题。 – 2012-01-29 21:08:09
也很好用,感谢您的回答 – 2012-01-30 05:19:13