引用另一个工作表中的单元格

时间:2014-03-06 01:18:53

标签: excel vba offset

我可以在Excel中编写正确的公式,但因为我有很多IF语句,所以我必须把它放到VBA中。 Excel中的公式应该根据在“Sheet1”上选择的值(F5)从另一个工作表(“Sheet2”)返回一个值。以下是创建的Excel公式的一部分(还有更多IF语句):

IF($F$5="AOM",
   OFFSET('Sheet2'!B3,'Sheet2'!$B$1,1,1,1),
   IF($F$5 = "Mid Adj",
      OFFSET('Sheet2'!B3,'Sheet2'!$B$1,6,1,1),
      ""
     )
  )

以下是我创建的VBA的 If Statement 部分:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim dummyVar As String

If Target = Range("F5") Then

    If Range("F5").Text = "AOM" Then
        dummyVar = ProcAOM()

    ElseIf Range("F5").Text = "Mid Adj" Then
        dummyVar = ProcML()

对于Proc,我不知道如何设置引用另一个工作表的Offset公式。

1 个答案:

答案 0 :(得分:1)

从我能理解的你想要实现的目标来看,这只适用于1个细胞?如果是这样,您不必关心Worksheet_Change。

您可以为此目的创建用户定义函数(UDF)。用假设说BigIF

  • 参考单元格不会更改(Sheet2的B3)
  • 行偏移在固定单元格(Sheet2的B1)中定义
  • 列偏移在代码中确定
  • 返回Reference Cell
  • 的范围偏移值

将代码粘贴到模块中并在工作表中将其用作公式,但引用Sheet1的F5(这样做会强制Excel在F5更改时重新计算)。即。 =BigIf('Sheet1'!$F$5)

Function BigIF(oRng As Range) As Variant
    Dim oWS As Worksheet, oRngRef As Range
    Dim lRowOffset As Long, lColOffset As Long, sID As String

    Set oWS = ThisWorkbook.Worksheets("Sheet2")
    Set oRngRef = oWS.Range("B3") ' Offset Reference
    sID = oRng.Text ' Sheet1!F5 value
    ' ROW OFFSET: Sheet2!$B$1 value
    lRowOffset = CLng(oWS.Range("B1").Value)
    ' COLUMN OFFSET: based on sID
    Select Case sID
        Case "AOM":         lColOffset = 1
        Case "Mid Adj":     lColOffset = 6
        '... Other Cases
        Case Else:          lColOffset = 0
    End Select
    BigIF = oRngRef.Offset(lRowOffset, lColOffset)
    Set oRngRef = Nothing
    Set oWS = Nothing
End Function

原因你也可以使用Worksheet_Change事件方法,但代码更多。