问个代码思路,大神们看看呢,有没有更加快的方法
excel吧
全部回复
仅看楼主
level 12
2019年08月22日 02点08分 1
level 9
循环下来应该在十秒以内吧?不算长。结果也放到数组中,一次性输出。
2019年08月22日 02点08分 2
level 13
所以我选择公式[滑稽]
2019年08月22日 02点08分 3
昨天leon大神也问了同样的问题[阴险]
2019年08月22日 02点08分
下班了,下午再看。
2019年08月22日 02点08分
谢谢大神,公式倒会,代码就想到这种思路
2019年08月22日 03点08分
level 12
9.4秒,感觉应该可以再优化的,8000*20次(算40的一半),所以运行时间长,90%时间耗在这里了
2019年08月22日 02点08分 4
我这个只需要0.1秒多一点。见5楼。
2019年08月22日 02点08分
8000作为外循环,40作为内循环。所有的数据均装入数组尽心该操作。
2019年08月22日 02点08分
估计你是把40作为外循环,8000作为内循环了。
2019年08月22日 03点08分
谢谢呢,按照这个调试了下。0.13秒左右,也许问题不在这,不纠结了。反正结果出来了,也许还有其他思路
2019年08月22日 04点08分
level 9
2019年08月22日 02点08分 5
level 13
一条数据里面存在多个关键字如何处理,全部提取还是提取第一个出现的?
2019年08月22日 03点08分 6
level 12
提取第一个出现,这种情况很少
2019年08月22日 03点08分 7
level 13
0.08秒,差不多的思路
所以该不是你电脑性能的问题吧?哈哈
2019年08月22日 04点08分 8
应该是其他代码影响的原因,还有7-8个正则,谢谢你!
2019年08月22日 04点08分
level 13
但是和你同思路的代码出来结果是很快的啊?
Sub 提取()
Dim crr()
arr = Range([A2], [A65536].End(xlUp))
brr = Range([B2], [B65536].End(xlUp))
ReDim crr(1 To UBound(brr), 1 To 1)
For i = 1 To UBound(brr)
For j = 1 To UBound(arr)
If InStr(brr(i, 1), arr(j, 1)) > 0 Then
crr(i, 1) = arr(j, 1)
Exit For
End If
Next
Next
[C2].Resize(UBound(crr), 1) = crr
End Sub
2019年08月22日 04点08分 9
十几万次循环,一般都瞬间的,百万次循环一般也就1秒。
2019年08月22日 04点08分
level 12
谢谢呢,我也单独把代码试了下,0.13秒左右,也许问题不是出在这。不管了,反正结果出来了。还是要谢谢你呢!
2019年08月22日 04点08分 10
level 13
下边代码仅供参考。
关键词40的时候,下边代码比上边代码慢。
但是当关键词400个的时候,用下边代码会快0.4秒左右。1000关键词的时候,会快0.8秒左右。
Sub 提取()
t = Timer
Dim crr()
arr = Range([A2], [A65536].End(xlUp))
brr = Application.Transpose(Range([B2], [B65536].End(xlUp)))
ReDim crr(1 To UBound(brr), 1 To 1)
For i = 1 To UBound(brr)
 brr(i) = i & "の" & brr(i)
Next
For Each i In arr
 s = VBA.Filter(brr, i)
 If UBound(s) >= 0 Then
  For Each j In s
   crr(Val(j), 1) = i
  Next
 End If
Next
[C2].Resize(UBound(crr), 1) = crr
MsgBox Timer - t
End Sub
2019年08月22日 05点08分 11
crr(Val(j), 1) = i ,到这有点凌乱了,我在想想呢,谢谢!
2019年08月22日 07点08分
吧务
level 15
试试range.find方法
2019年08月22日 06点08分 12
谢谢吧主,我试试呢
2019年08月22日 07点08分
1