我在处理我的大型电子表格时遇到了一些问题。我将大量原始数据引入数据表,然后对数据进行多次查找。使用我想出的内置函数
=IF(ISNA(INDEX(Data!$L$7:$L$1100,MATCH(Data!$I$2&$B$199&$B29&Data!$J$5,Data!$K$7:$K$1100&Data!$J$7:$J$1100&Data!$I$7:$I$1100&Data!$N$7:$N$1100,0))),"0",INDEX(Data!$L$7:$L$1100,MATCH(Data!$I$2&$B$199&$B29&Data!$J$5,Data!$K$7:$K$1100&Data!$J$7:$J$1100&Data!$I$7:$I$1100&Data!$N$7:$N$1100,0)))
不漂亮!基本上,它使用 4 个变量进行两次相同的查找,并将它们与 4 个连接数组进行匹配,然后使用该点作为我想要的值的索引。
我在每行 4 张纸和每张纸 96 行中有 8 个(略有不同)。编辑它们很痛苦!
由于本月数据集大幅增长,外部波段 (x1100) 已被超越(经验教训,大是不够的)。不幸的是,该功能的限制不允许我使用 L:L 或类似的任何有用的东西。
我尝试将代码重写为用户定义的函数,我可以在其中输入 4 个变量并获得答案,但是在组合数组时失败了。
我已经在原始函数名称中给出了上面列出的范围以使事情变得更容易(并将它们扩展为使用更广泛的范围值),因此我可以重写所有函数以仅使用命名范围,但这仍然让我陷入困境如果我需要更改代码。
这是我到目前为止所拥有的:
Function Windows_Util(itma As String, env As String)
v = "Windows Server" & env & itma & ""
r = Concat(Range("Utilchassis"))
r = r & Concat(Range("Utilenv"))
r = r & Concat(Range("UtilITMA"))
r = r & Concat(Range("UtilOS"))
m = WorksheetFunction.Match(v, r, 0)
i = WorksheetFunction.Index(Range("Utilavg"), m)
If WorksheetFunction.IsNA(i) Then
Windows_Util = 0
Else
Windows_Util = i
End If
End Function
Function Concat(myRange As Range, Optional myDelimiter As String)
Dim r As Range
Application.Volatile
For Each r In myRange
If Len(r.Text) Then
Concat = Concat & IIf(Concat <> "", myDelimiter, "") & r.Text
End If
Next
End Function
这不行!它不仅连接不正确(每个范围单独连接,而不是逐行组合),而且它不喜欢其中一个查询中的某种类型。(调试这些东西并不容易,因为函数实际上完成了(它没有任何语法错误),所以我没有可以使用的内置步骤。
非常感谢任何帮助。
希望我已经提供了足够的细节来理解我正在尝试做的事情。
干杯,
史蒂夫