使用vba检查Excel中的任何值是否大于零(有效)

我试图检查一个大小为“i”的dynamic数组中的任何值是否大于零,其中“i”是用户input。 如果为false,则数组中第一个元素的值将显示在下一列中。 如果为true,则数组的值通过基本上向下移动一个元素来更新。 我相信我已经在这里find了这个问题的答案,但没有任何运气在vba中find它。 我相信这可以通过一个for循环完成,但是如果它存在的话会更有效率。 由于我不知道任何可能工作的语法,代码挂在“如果任何x> 0然后”

Dim i, z, u As Integer Dim fir As Integer Dim las As Integer Dim n As Long Dim x As Variant 'SET VALUE OF ROWS FOR ARRAY i = Worksheets("INPUTS").Range("C6").Value Set s = Worksheets("DATA") 'FIND LAST VALUE IN DATA n = s.Cells(s.Rows.Count, "A").End(xlUp).Row 'BEGIN LOOP THROUGH DATA SET For z = 1 To n 'SET/RESET RANGE TO CHECK FOR CONSECUTIVE VALUES LESS THAN ZERO fir = z las = i + z - 1 x = (s.Range("C" & fir, "C" & las).Value) u = s.Range("C" & UBound(x)).Value If any x > 0 Then Else: s.Cells(4, z) = x(1, 1).Value End If Next z 

我是一个初学者和新的论坛,所以请随时撕毁我的一个新的东西违反有关的代码或问题的最佳做法,谢谢。

使用工作表function

 If Application.WorksheetFunction.Max(Range("a1:a100")) > 0 Then MsgBox "value higher than zero" end if 

为了加快处理,您​​可以考虑将Excel Range (例如A1:A100 )转换为数组Arr ,然后遍历数组:

 Dim Arr() As Variant Arr = Range("A1:A100") 

此外,在开始迭代之前,您可以考虑设置属性Application.ScreenUpdating = False (如果您在迭代期间更改了单元格的值,则按照您的示例),并在之后将其重置为True

希望这可能有帮助。