我有一个工作表,它返回同一工作簿(= data!C68)中不同工作表的值,该工作表返回一个值。
在另一个单元格中,我想引用原始单元格中的引用,但将行增加1 - (= data!C69)。细胞不是彼此相邻的。
是否可以使用函数或fromula?
由于
乔纳森
答案 0 :(得分:2)
有很多方法可以实现这一目标。这是一种方式。我通过合并你想要偏移的行和列来扩展了这个功能。将此代码粘贴到模块中
<强>语法强>
=的getOffset(范围,行,列)
<强>说明强>
范围(必需)是具有公式
的单元格行(可选)要偏移的行
Col (可选)要偏移的列
样本使用
= GetOffset(A1):这将从A1所指的同一个单元格中拾取值。如果A1指的是=data!C69
,则 GetOffset 将从数据中获取值!C69
= GetOffset(A1,1):这将从A1所指的下一个单元格(1行向下)中拾取值。如果A1指的是=data!C69
,则 GetOffset 将从数据中获取值!C70
= GetOffset(A1,1,1):这将从A1所指的下一个单元格(1个向下的1行向下)中拾取值。如果A1指的是=data!C69
,则 GetOffset 将从数据中获取值!D70
= GetOffset(A1,0,1):这将从A1所指的下一个单元格(1个Col的相同行)中拾取值。如果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
答案 1 :(得分:2)
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
)。