Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在数组中存储循环数?_Arrays_Excel_Vba - Fatal编程技术网

Arrays 如何在数组中存储循环数?

Arrays 如何在数组中存储循环数?,arrays,excel,vba,Arrays,Excel,Vba,我有一个程序,可以循环一张表中的每一行数据。这些行包含数字。我想存储在数组变量中找到的所有数字,然后将每个数字与最高值和最低值进行比较 但我不知道如何自动将数字存储在数组中。不要将数字存储在数组中,而是动态检查最小/最大的数字 Sub test() dim max As Double, min As Double dim r As Range, rng As Range Set rng = Range("A1","A10")' Set this to the appropriate rang

我有一个程序,可以循环一张表中的每一行数据。这些行包含数字。我想存储在数组变量中找到的所有数字,然后将每个数字与最高值和最低值进行比较


但我不知道如何自动将数字存储在数组中。

不要将数字存储在数组中,而是动态检查最小/最大的数字

Sub test()

dim max As Double, min As Double
dim r As Range, rng As Range

Set rng = Range("A1","A10")' Set this to the appropriate range
min = rng(1).Value
max = rng(1).Value

For each r in rng

If r.Value > max Then

max = r.Value

Elseif r.Value < min Then

min = r.Value

End If
Next r

Range("B1").Value = max ' store where ever you want
Range("B2").Value = min 'same as above

End Sub
子测试()
最大尺寸为双精度,最小尺寸为双精度
变暗r为范围,rng为范围
设置rng=范围(“A1”、“A10”)'将其设置为适当的范围
最小值=rng(1)。数值
最大值=rng(1)。数值
对于rng中的每个r
如果r.值>最大值,则
最大值=r.值
Elseif r.值<最小值
最小值=r.值
如果结束
下一个r
范围(“B1”)。值=最大值,可任意存放
范围(“B2”)。值=最小值,同上
端接头

获取一行空格、文本和数字中的最小值和最大值有更简单的方法,但下面是一个将一行中的数字收集到变量数组中的示例

Sub minmax()
    Dim r As Long, c As Long, n As Long, vNUMs As Variant
    Dim mn As Double, mx As Double

    With Worksheets("Sheet2")
        For r = 2 To .Cells(Rows.Count, 2).End(xlUp).Row

            'you can do this the easy way
            mx = Application.Max(.Rows(r))
            mn = Application.Min(.Rows(r))
            Debug.Print mn & " to " & mx

            'or the hard way
            n = 0
            ReDim vNUMs(Application.Count(.Rows(r)) - 1)
            For c = 1 To .Cells(r, Columns.Count).End(xlToLeft).Column
                If IsNumeric(.Cells(r, c)) And Not IsEmpty(.Cells(r, c)) Then
                    vNUMs(n) = .Cells(r, c).Value2
                    n = n + 1
                    If n > UBound(vNUMs) Then Exit For
                End If
            Next c

            mx = -2 ^ 20
            mn = 2 ^ 20
            For n = LBound(vNUMs) To UBound(vNUMs)
                If vNUMs(n) < mn Then mn = vNUMs(n)
                If vNUMs(n) > mx Then mx = vNUMs(n)
            Next n
            Debug.Print mn & " to " & mx
        Next r
    End With
End Sub
Sub-minmax()
尺寸r为长,c为长,n为长,vNUMs为变体
尺寸mn为双精度,mx为双精度
带工作表(“表2”)
对于r=2到.Cells(Rows.Count,2).End(xlUp).Row
“你可以用简单的方法做到这一点
mx=应用程序.Max(.Rows(r))
mn=Application.Min(.Rows(r))
调试。打印mn&“to”&mx
“还是艰难的道路
n=0
ReDim vNUMs(Application.Count(.Rows(r))-1)
对于c=1到.Cells(r,Columns.Count).End(xlToLeft).Column
如果是数值(.Cells(r,c))而不是空(.Cells(r,c)),则
vNUMs(n)=.单元(r,c).值2
n=n+1
如果n>UBound(vNUMs),则退出
如果结束
下一个c
mx=-2^20
mn=2^20
对于n=LBound(vNUMs)到UBound(vNUMs)
如果vNUMs(n)mx,则mx=vNUMs(n)
下一个
调试。打印mn&“to”&mx
下一个r
以
端接头

如果您的最终目的是查找一行中的最大值,那么
Application.Max(.Rows(i))
就足够了。同样适用于
Application.Min