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

时间:2017-08-23 03:54:03

标签: arrays excel vba excel-vba

我试图检查动态数组中是否有任何值" i"一个大于零,其中" i"是用户输入。如果为false,则数组中第一个元素的值将显示在下一列中。如果为true,则数组的值通过向下移动一个元素来更新。我相信我已经在java here中找到了这个问题的答案,但是在vba中找不到任何运气。我相信这可以通过完成here的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

我是初学者,也是论坛的新手,所以请随时根据与代码或问题相关的最佳做法撕下新的内容,谢谢。

2 个答案:

答案 0 :(得分:0)

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

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

此外,您可以考虑在开始迭代之前设置属性Application.ScreenUpdating = False(如果您根据示例在迭代期间更改单元格值,并在之后将其重置为True。< / p>

希望这可能会有所帮助。

答案 1 :(得分:0)

使用工作表功能

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