VBA Excel从具有循环的数组中返回值

我在vba函数中有一个小循环,每个月 – 即参数 – 从列表中获得相应的合同,除了十二月份以外的每个月都有效。 Contractlist是一个垂直数组(3,5,7,9,12)。 这是代码:

k = 1 Do Until Month(Parameter) < contractlist(k, 1) k = k + 1 Loop nextcontract = MonthName(contractlist(k, 1)) 

问题如下:当月份是十二月,月份(十二月份)从不小于contractlist(k,1),因为12是该数组中最小的值。 在这种情况下,我想跳到数组的第一个值,即“3”。 换句话说,在最后一行nextcontract应该是MonthName(contractlist(1,1))。 有人可以给我一个提示如何做到这一点?

谢谢,你的帮助真的很感激!

有一个偷偷摸摸的方式来使用MOD
由于国防部将减less值为0,当它等于值(和倍数),我们可以使用这个,所以月份,当你从你的参数十二月将是零,而不是12 …

 Do Until (Month(Parameter) Mod 12) < contractlist(k, 1) 

这将每隔一个月一个月,但将在12月返回0。

我现在明白你现在做的更好。 我在下面编辑了我的解决scheme。 不要害怕使用更多的variables。 有时你可以使用一个variables来做太多的事情,这使得很难看到一个解决scheme。

 ' My test data Dim contractlist(1 To 5, 1 To 1) As Integer contractlist(1, 1) = 3 contractlist(2, 1) = 5 contractlist(3, 1) = 7 contractlist(4, 1) = 9 contractlist(5, 1) = 12 Dim month As Integer ' represents Month(Parameter) month = 12 ' Solution Dim contractCount As Integer Dim nextContractNum As Integer Dim nextcontract As String contractCount = UBound(contractlist, 1) ' Next contract is the first in the list ' if we don't find a later one nextContractNum = contractlist(1, 1) For i = 1 To contractCount If month < contractlist(i, 1) Then nextContractNum = contractlist(i, 1) Exit For End If Next i nextcontract = MonthName(nextContractNum)