我正在尝试在VBA中编写一个函数,它可以查看传入的一些参数,然后引用该行上的某个列。为了解释一下,如果我尝试在单元格E1中使用该函数,我想要它说A1 = 1然后返回B1 + C1,否则返回B1 + D1。
如果我将这个函数放在单元格E2中,除了第2行之外它会做同样的事情。我理解如何使用普通的excel公式做到这一点但如果我这样做会变得非常混乱。
有人可以协助我如何写这篇文章吗?
谢谢,
克雷格
答案 0 :(得分:0)
我知道您要求提供VBA解决方案,但如果我理解您的问题,我强烈建议您使用以下公式:
=B1+IF(A1=1,C1,D1)
既然你说你认为常规公式会很混乱,我会试图弄清楚你还有什么其他的尝试,而你却没有明确说过。例如,如果您要求A1
的值等于行号,则可以使用以下公式:
=B1+IF(A1=ROW(),C1,D1)
答案 1 :(得分:0)
编写一个函数,并使用函数调用单元格的行/列值来定义要在公式中使用的一些范围对象。
Public Function MyFunction()
Dim r as Long, c As Long
Dim myRange as Range
Dim ret
Dim msg
Set myRange = Application.Caller
r = myRange.Row
c = myRange.Column
msg = "Formula called from: " & myRange.Address
msg = msg & vbCRLF & "The first cell in this row = " & Cells(r, 1).Address
'Alternatively:
msg = msg & vbCRLF & MsgBox "(Alternatively) " myRange.EntireRow.Cells(1).Address
'## You can also use the OFFSET method to return relative references:
msg = msg & vbCRLF & "Two cells to the left =" & myRange.Offset(0, -2).Address
MsgBox msg, vbInformation
'## Evaluate your example formula:
' Example does NOT use relative reference and assumes that you
' Always want to return the function from columns A/B/C/D per
' your example =IF(A1=1,B1+C1,B1+D1)
If Cells(r, 1) = 1 Then
ret = Cells(r, 2) + Cells(r, 3)
Else
ret = Cells(r, 2) + Cells(r, 4)
End If
'return the value to the function:
MyFunction = ret
End Function