今天一个不常联系的小伙伴突然给我发来消息说:“我眼睛痛!”我当时不禁在想:“我又不是医生,眼睛痛找我也没用啊(迷茫脸)”。然而本着关心爱护小伙伴的原则,我于是关切地问道:“是不是对着屏幕太久了呀?”,接下来这位小伙伴就毫不客气地向我扔过来一张Excel表.。
打开一看,一下子就明白了她眼睛痛的原因了。我把她的问题简化后如下:
A列共有20个数据,从其中取三个数字其和等于107,求出这三个值分别是多少?
按照排列组合的原理,如果穷举的话一共有1140(
)种可能,如果每个都要计算的话工作量可真让人受不了。而且我们这里只是模拟了20个数字,眼睛痛的小伙伴(心疼脸)的数据量可不止这么多啊。一个个计算这条路肯定是走不通了,这时就不禁想到用VBA来解决了。那么,用VBA我们该怎么解决这个问题呢?
运行之后可以得到结果如下:
问题轻松解决,分析加上写代码以及运行,总时间不超过5分钟,妈妈再也不担心我眼睛痛了。
今天的晚饭有着落了(幸福脸)。
总结一下:
当然,在这个过程中最提高效率的部分就是使用了数组arr,有效地提高了代码的运行效率。
Sub three_nums()
Dim i, j, k As Integer
Dim arr()
arr = Range("a1:a21")
For i = 2 To 21
For j = 2 To 21
For k = 2 To 21
If arr(i, 1) + arr(j, 1) + arr(k, 1) = Range("d2") Then
Range("d3") = arr(i, 1)
Range("d4") = arr(j, 1)
Range("d5") = arr(k, 1)
GoTo 1
End If
Next
Next
Next
1
MsgBox "所求结果为:" & vbCrLf & arr(i, 1) & ";" & arr(j, 1) & ";" & arr(k, 1)
End Sub