【发布时间】:2013-06-03 20:53:26
【问题描述】:
如果有人可以帮助我编写此代码,我将不胜感激。 - 目标:我试图用两个数组之间的匹配填充一个数组(一个数组是我在第二个数组中寻找的参考数据)。
代码和数组在开发屏幕的 Watches 和 Locals 屏幕中看起来不错,但是当我在 excel 电子表格中检查该函数时,它返回一个 #value!错误。
非常感谢。
问候 罗德内
Function FTE_Detail(sref As Range, eref As Range, esource As Range, bplan As Range, eplan As Range) As Variant
'Application.Volatile
Dim rreference(34, 0) As String, dumper(150, 6) As String, vsource(17424, 11) As String, k As Integer, j As Integer
Dim b As Integer, c As Integer, month As Integer, a As Integer
Dim IDNUMBER As Integer, name As String, empID As String, fromCC As String, tocc As String
month = Worksheets("Introduction").Cells(7, 6).Value
For k = 0 To (eref.Row - sref.Row)
rreference(k, 0) = Worksheets("data").Cells(sref.Row + k, sref.Column).Value
Next k
k = 0
j = 0
For k = 0 To 11
For j = 0 To esource.Row
If Len(Worksheets("data").Cells(70 + j, esource.Column + k).Value) > 250 Then
vsource(j, k) = Left(Worksheets("data").Cells(70 + j, esource.Column + k).Value, 250)
Else
vsource(j, k) = Worksheets("data").Cells(70 + j, esource.Column + k).Value
End If
Next j
Next k
i = 0
k = 0
j = 0
c = 0
IDNUMBER = 0
'hire array
Do While i <= (eref.Row - sref.Row + 1)
Do While k <= esource.Row
If InStr(vsource(k, month - 2), rreference(i, 0)) Then
If vsource(k, month - 3) = "" Then
IDNUMBER = IDNUMBER + 1
name = Worksheets("data").Cells(70 + k, 1).Value 'Employee name
empID = Worksheets("data").Cells(70 + k, 2).Value 'Employee ID
dumper(j, 0) = "hire"
dumper(j, 1) = Str(IDNUMBER)
dumper(j, 2) = name
dumper(j, 3) = Str(empID)
dumper(j, 4) = "-"
dumper(j, 5) = vsource(k, month - 2)
dumper(j, 6) = Worksheets("data").Cells(70 + k, 133).Value 'Employee Country
j = j + 1
Else
End If
Else
End If
k = k + 1
Loop
k = 0
i = i + 1
Loop
FTE_Detail = dumper()
End Function
- 首先,我选择范围
GH183:GH215 - 然后按F2并粘贴公式
=FTE_detail(GG183,GG215,DP17424,'2013PlanfromBex'!P3,'2013PlanfromBex'!P2369) - 在我之前选择的所有单元格中返回
#value!。 - 我之前已经用其他数据完成了这个过程并且工作过。不知道为什么在这种情况下不起作用。
p.s.:它似乎在调试/监视窗口中构建了所有数组,只有当函数结束时,它将数据从“转储器”粘贴到电子表格时失败。
【问题讨论】:
-
你是如何使用/调用这个函数来将它返回的数据分配给一个范围的?
-
我正在选择一个范围并编写函数并按 crtl+shift+enter。 tkns :)
-
不可能使用函数将值返回到单元格区域,请参阅here for details。您将不得不使用子程序来操作一系列单元格。
-
@shahkalpesh 不可能使用 UDF 将值数组写入多单元格范围。这似乎是 OP 正在尝试做的事情。
-
@shahkalpesh 我从 OP 问题中了解到他正在从工作表单元格调用此函数。也许我误解了,他说的是“我正在选择一系列单元格......”等等。