有条件的ELSEIF不起作用

不知道如何解决这个问题。 “a”的意思是从1开始到NumData,但是我故意将开始从44200改为检查ELSEIF。 对于NumData = 117,350,

我期望第三个ELSEIF被激活。 相反,在整个运行过程中,即使“a”值不符合条件,它也只能进入第一个ELSEIF。

我该怎么办?

For a = 44200 To NumData 'Int1 If a > 1 Then If UCase(Trim(Range1(a, 3))) = UCase(Trim(Range1(a - 1, 3))) Then GoTo Line1 'Next count loop if next Platform name the same End If End If For b = 1 To NumData lat1 = Range1(a, 5) lat2 = Range1(b, 5) long1 = Range1(a, 6) long2 = Range1(b, 6) CompRad = Dist(lat1, lat2, long1, long2) If (CompRad <= Radius And CompRad >= 0) Then z = CLng(NumData / 8) If a <= CLng(NumData / 8) Then For c = 1 To 6 Range2(d, c) = Range1(b, c) Next c Acc_Sum2 = Acc_Sum2 + Range2(d, 4) d = d + 1 ElseIf CLng(NumData / 8) < a <= 2 * CLng(NumData / 8) Then z = 2 * CLng(NumData / 8) For c = 1 To 6 Range3(e, c) = Range1(b, c) Next c Acc_Sum3 = Acc_Sum3 + Range3(e, 4) e = e + 1 ElseIf 2 * CLng(NumData / 8) < a <= 3 * CLng(NumData / 8) Then For c = 1 To 6 Range4(f, c) = Range1(b, c) Next c Acc_Sum4 = Acc_Sum4 + Range4(f, 4) f = f + 1 ElseIf 3 * CLng(NumData / 8) < a <= 4 * CLng(NumData / 8) Then z = 3 * CLng(NumData / 8) For c = 1 To 6 Range5(g, c) = Range1(b, c) Next c Acc_Sum5 = Acc_Sum5 + Range5(g, 4) g = g + 1 ElseIf 4 * CLng(NumData / 8) < a <= 5 * CLng(NumData / 8) Then For c = 1 To 6 Range6(h, c) = Range1(b, c) Next c Acc_Sum6 = Acc_Sum6 + Range6(h, 4) h = h + 1 ElseIf 5 * CLng(NumData / 8) < a <= 6 * CLng(NumData / 8) Then For c = 1 To 6 Range7(i, c) = Range1(b, c) Next c Acc_Sum7 = Acc_Sum7 + Range7(i, 4) i = i + 1 ElseIf 6 * CLng(NumData / 8) < a <= 7 * CLng(NumData / 8) Then For c = 1 To 6 Range8(j, c) = Range1(b, c) Next c Acc_Sum8 = Acc_Sum8 + Range8(j, 4) j = j + 1 ElseIf 7 * CLng(NumData / 8) < a <= NumData Then For c = 1 To 6 Range9(k, c) = Range1(b, c) Next c Acc_Sum9 = Acc_Sum9 + Range9(k, 4) k = k + 1 End If End If Next b 

线路1:

 Next a 

你的条件如:

 1 < a <= 10 

总是如此。 第一部分(1 < a)评估为TrueFalse ,然后转换为整数( True = 1False = 0 )。 两个值都<=10

你应该改变的条件为:

 (1 < a) And (a <= 10) 

括号是可选的,比较运算符具有更高的优先级。

user3964075钉住了核心问题。 我认为使代码更具可读性将有助于滤除其他可能的问题。 你为什么设置'z'的值,然后不使用它?

  z = CLng(NumData / 8) 

variablesd,e,f …在哪里? 范围2,范围3,范围4 …; Acc_Sum2,Acc_Sum3 …分配,他们在做什么? 每个组可以被一个variablesreplace吗?

你也可以创build一个简单的Between函数来清理大量的条件语句。

  Public Function Between(x As Integer, min As Integer, max As Integer) As Boolean Between = x <= max And x >= min End Function 

谢谢,user3964075和卡尔为您的及时响应。 它的工作! 卡尔,当我试图找出问题时,zvariables被插入。 我认为发布整个代码太多了。 这确实需要大量的清理。 欣赏你的提示。