【发布时间】:2020-09-24 02:07:07
【问题描述】:
请帮助我使用 excel IF、索引、匹配函数创建 VBA 函数。这是我的excel函数:
=IF(INDEX(Grid!$B$3:$G$6,MATCH('Sal-Data'!$A2,Grid!$A$3:$A$6,0),MATCH('Sal-Data'!$B2+1,Grid!$B$2:$G$2,0))=0,$B2,$B2+1)
我在此处添加了 VBA 代码,但它不起作用,我想要从 Grid Sheet 获得下一个级别的结果。例如,如果 Emp“b”的工作表“Sal-data”中的当前网格为 2,则新网格将为 3,但“b”网格 3 的“网格”工作表中的值为 0(零),则不应增加网格。在这种情况下,如果“b”当前网格为 3,则 b 的下一个网格可能会得到 4,但网格 4 的值为 0,则“b”的网格不应增加,因为没有值。
这是我的 VBA 编码:
Public Function NGrid(rData As Range, rBudCode As Range, rMo As Range, budgetcode As Variant, mo As Variant)
Dim rw As Variant
Dim col As Variant
With Application
col = .Match(budgetcode+1, rBudCode, 0)
rw = .Match(mo, rMo, 0)
NGrid = .Index(rData, col, rw)
If NGrid= 0 Then
With Application
col = .Match(budgetcode, rBudCode, 0)
rw = .Match(mo, rMo, 0)
NGrid = .Index(rData, col, rw)
Else
With Application
col = .Match(budgetcode+1, rBudCode, 0)
rw = .Match(mo, rMo, 0)
NGrid = .Index(rData, col, rw)
End if
End with
End Function
Excel sheet name : Grid
1 2 3 4 5 6
a 10 11 12 13 0 0
b 20 21 22 0 0 0
c 30 31 32 33 34 0
d 40 41 42 0 0 0
Excel sheet name : Sal-Data
Emp grid New grid
a 4 = NGrid (...) required VBA function
a 2
b 1
b 2
比你提前。
【问题讨论】:
-
代码有什么问题,哪里出错,抛出了什么错误?
-
首先,去掉
If块中的两个With Application语句 - 它们不是必需的,而且无论如何您都没有匹配的End With语句,所以代码无法编译。
标签: excel vba excel-formula