【发布时间】:2015-06-29 17:26:57
【问题描述】:
我是这个宏观世界的新手。从yday开始工作。 我创建了一个宏。 excel工作簿有两张。 sheet1 和 sheet2
表 1:
A B C D E
1 2 3 4 3
5 6 7 8 2
9 10 11 12 1
11 12 14 14 3
表 2:
A B C D E
1 2 3 4 7
13 14 17 20 2
5 6 7 8 1
因此,当 sheet2 中的行(第 4 个 A、B、C、D)与 sheet1 中的行匹配时,E 中的值应该相乘并存储在另一张表中。 例如, sheet2 , 1 2 3 4 与 sheet1 中的 1 2 3 4 匹配,因此 E(7 和 3)中的数字应相乘,结果应存储在 sheet3 中。
下面是我开发的sn-p。
Sub test()
Dim sh1 As Range
Set sh1 = Sheet1.UsedRange
Dim sh2 As Range
Set sh2 = Sheet2.UsedRange
Dim sh3 As Range
Set sh3 = Sheet3.UsedRange
For i = 1 To sh1.Rows.Count
For m = 1 To sh2.Rows.Count
Match = True
For j = 1 To sh1.Columns.Count
If (sh1.Cells(i, j).Value <> sh2.Cells(m, j).Value) Then Match = False
If (Match = False) Then Exit For
Next j
If Match = True Then sh1.Cells(i, 4).Value = _
sh1.Cells(i, 4).Value * sh2.Cells(m, 4).Value
Next m
Next i
End Sub
这很好用。但这是一种线性搜索,所以当给出大量数据时,excel 就会挂起。 有没有更最佳的解决方案?也许像二进制搜索或按排序搜索。
【问题讨论】:
-
所以总会有 4 个单元格匹配,然后对于最后一列的值要相乘?现在,您的代码会检查所有值是否匹配,因此尚不清楚它如何按所写的那样工作。
-
你可以使用数组
-
在辅助列中将 4 个值连接在一起可能会更快,然后使用 Match 之类的东西来查看该连接值是否存在于另一张表中。这应该可以消除代码中的一些循环,这将大大加快速度。
-
类似的?听起来您想要完全匹配...