2012-01-29 240 views
0

我有一個工作表從同一工作簿(= data!C68)中的不同工作表中返回一個值,該值返回一個值。在Excel中找到另一個單元格的單元格引用

Ina另一個單元我想引用原始單元格中的引用,但將行增加1 - (= data!C69)。這些單元並不相鄰。

這可能與函數或fromula?

感謝

喬納森

回答

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)。

+0

也很好用,感謝您的回答 – 2012-01-30 05:19:13

2

有很多種方法來實現這一目標。這是一種方法。我通過合併您想要偏移的行和列來擴展該功能。一個模塊

語法

=的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 
+0

哇,哇,哇。這真的很棒,它像夢一樣運作,我不能夠感謝你,它已經讓我幾個小時了。我非常感謝你的幫助。感謝Jonathan – 2012-01-29 19:54:31

+0

使用'Application.Volatile'不是一個好習慣。即VBA代碼將在紙張上發生計算事件時執行,無論是否有任何相關單元已經改變。 – shahkalpesh 2012-01-29 19:56:47

+1

這不是一個好習慣嗎?我很抱歉,但是說誰? :)我希望它重新計算,因此我將其納入:)你的意思是說自從NOW(),RAND()改變計算事件,所以這是不好的?您必須明智地使用Application.Volatile,因爲冗長的函數可能會讓您的工作表變慢,因此不存在任何問題。 – 2012-01-29 21:08:09

相關問題