我正在尝试理解数组,但是我无法完全围绕这个概念。我有以下数据集:
我编写了以下代码以确认B列中的值大于零,如果是这样,它将值提供给数组,然后在消息框中输出最小值:
>=
现在我对代码有两个问题:
请您指点一下如何实现第1点和第2点?
感谢您的帮助!
答案 0 :(得分:1)
您需要的是拥有动态大小的数组。
首先,定义数组而不定义常量,使用Dim ValLng() As Variant
。
其次,Redim
在开始时将其设为较大的尺寸,请使用ReDim ValLng(0 To 1000)
。
第三,在使用For
循环内的所有匹配完成数组填充后,通过调整数组大小来优化数组,使用ReDim Preserve ValLng(0 To x - 1)
。 Redim Preserve
表示您Redim
数组,但保留其中的值。
以下代码将帮助您入门:
Option Explicit
Sub MinFunc()
Dim ValLng() As Variant, x As Long, i As Long
Dim MinRes, RngFind As Range
ReDim ValLng(0 To 1000) '<-- init dynamic array size to a very large value , will optimize later
x = 3
'-- just for example, loop until the last cell with data in Column B
For i = 1 To Cells(Rows.Count, "B").End(xlUp).Row
If Cells(x, 2).Value > 0 Then
ValLng(i) = Cells(x, 1).Value
Cells(x, 2).Value = Cells(x, 2).Value - 1
x = x + 1
End If
Next i
ReDim Preserve ValLng(0 To x - 1) '<-- resize array to actual size found
MinRes = Application.WorksheetFunction.Min(ValLng)
Set RngFind = Cells.Find(What:=MinRes, After:=Range("A1"), _
LookIn:=xlValues, LookAt:=xlWhole) '<-- use find method
Cells(RngFind.Row, 3) = MinRes '<-- put the Minimum value at column C at the same row
End Sub