1.如果一个工作表里的公式函数已经宏大到影响工作表运行了,说明你应该考虑用其它方式进行运算了(如VBA) 2.不要什么东西都依赖于函数公式。尝试用一些数据透视表,合并运算等内置运算功能 3.如果上述两个方法仍解决不了你的问题,建议你要换换硬件了(如四核CPU,4G内存等)
请解释一下以下VBA代码的意思:For x = 1 To UBound(Arr3, 2)
For Each tmp In Split(d(Arr3(i, 4)), "-")
If tmp = Arr3(1, x) Then
Cells(i + 1, x) = "√"
End If
这段代码是用 VBA 编写的,用于在一个 Excel 工作表中检查某个数组(Arr3)中的元素是否出现在另一个数组(d)中。该代码分为两个循环,第一个循环用于遍历 Arr3 数组中的每个元素,第二个循环用于将 d 数组中的元素拆分成逗号分隔的字符串,并检查每个元素是否与 Arr3 数组中的元素匹配。
具体来说,这段代码的执行过程如下:
外层循环从 Arr3 数组的第一个元素开始,到最后一个元素结束(即 UBound(Arr3, 2))。
内层循环将 d 数组中的元素拆分成逗号分隔的字符串,并遍历每个字符串(即 tmp)。
如果 tmp 等于 Arr3 数组中的某个元素(即 Arr3(1, x)),则将该元素标记为已找到(即在 Excel 工作表中该元素的单元格中输入“√”)。
外层循环结束后,该代码将遍历整个 Arr3 数组,并在 Excel 工作表中标记所有在 d 数组中出现的元素。
Sub testxx()
Dim Row, Col, d As Variant, Arr(), a, b, c, k, t, Arr3(), tmp
Sheet1.Select
Sheet1.Activate
Row = ActiveSheet.UsedRange.Rows.Count
Col = ActiveSheet.UsedRange.Columns.Count
Set d = CreateObject("Scripting.Dictionary")
Arr = Sheet1.Range(Cells(2, 1), Cells(Row, Col))
For i = 1 To UBound(Arr, 1)
If d.Exists(Arr(i, 4)) Then
d(Arr(i, 4)) = d(Arr(i, 4)) & "-" & Arr(i, 6)
Else
d(Arr(i, 4)) = Arr(i, 6)
End If
Next
k = d.keys()
t = d.items()
Sheet4.Select
Sheet4.Activate
Sheet4.Cells.ClearContents
Sheet4.[A2].Resize(d.Count, 1) = Application.Transpose(k)
Sheet4.[B2].Resize(d.Count, 1) = Application.Transpose(t)
Sheet4.[A1].Resize(1, 2) = Array("输出", "")
Rem 第二阶段 装入对勾的表到数组
Sheet2.Select
Sheet2.Activate
Row = ActiveSheet.UsedRange.Rows.Count
Col = ActiveSheet.UsedRange.Columns.Count
Set d3 = CreateObject("Scripting.Dictionary")
Arr3 = Sheet2.Range(Cells(2, 1), Cells(Row, Col))
Rem 第三阶段 查找 Sheet2 的行列交叉部分,填入对勾
For i = 1 To UBound(Arr3, 1)
If d.Exists(Arr3(i, 4)) Then
For x = 1 To UBound(Arr3, 2)
For Each tmp In Split(d(Arr3(i, 4)), "-")
If tmp = Arr3(1, x) Then
Cells(i + 1, x) = "√"
End If
Next
Next
End If
Next
End Sub