我可以在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公式。
答案 0 :(得分:1)
从我能理解的你想要实现的目标来看,这只适用于1个细胞?如果是这样,您不必关心Worksheet_Change。
您可以为此目的创建用户定义函数(UDF)。用假设说BigIF
:
将代码粘贴到模块中并在工作表中将其用作公式,但引用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事件方法,但代码更多。