如何在 VBA 中找到数组的最小值?
Posted
技术标签:
【中文标题】如何在 VBA 中找到数组的最小值?【英文标题】:How can I find the minimum value of an array in VBA? 【发布时间】:2019-05-01 09:56:01 【问题描述】:我有一个 Excel VBA 宏,用于计算加工零件的尺寸。宏的第一部分设置为从工作表中获取值,并根据一些预定义的选项计算面积并将它们打印到 Excel。第二部分是我有一些问题的地方。
我已将表格转换为二维数组(节省处理时间)并开始通过 2 个循环填充数组,1 个控制行,1 个控制列。在循环中,我试图找到最小的非零值和相关的列,这有助于宏的最后一部分起作用。我还将最小值设置为一个永远不会超过的大值。
当我逐步运行宏时,遇到的第一个非零值会将最小值重置为零并且不会更改列号。谁能指导我哪里出错了?
maxtubesel = Sheets("Tube OD").Cells(Rows.Count, "R").End(xlUp).Row - 4
'Find min and col value in array
Dim resarray() As Long
ReDim resarray(maxtubesel, 5)
min = 1000000
col = 0
For m = 0 To 2 ' maxtubesel
For n = 0 To 4
resarray(m, n) = Sheets("Tube OD").Cells(4 + m, 26 + n)
If Sheets("Tube OD").Cells(4 + m, 26 + n) <> "" Or Sheets("Tube OD").Cells(4 + m, 26 + n) <> 0 Then
min = Sheets("Tube OD").Cells(4 + m, 26 + n) And col = n
End If
Next n
Next m
【问题讨论】:
【参考方案1】:这一行
min = Sheets("Tube OD").Cells(4 + m, 26 + n) And col = n
应该是两行
min = Sheets("Tube OD").Cells(4 + m, 26 + n)
col = n
否则实际发生的情况是您将 min
设置为一个布尔值,以检查这两个语句是否都为真:
Sheets("Tube OD").Cells(4 + m, 26 + n)
col = n
似乎它们不是,所以min = False
,这是一个零值:)
【讨论】:
以上是关于如何在 VBA 中找到数组的最小值?的主要内容,如果未能解决你的问题,请参考以下文章