如何在 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 中找到数组的最小值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在数组java中找到最大值和最小值?

如何找到 MIPS 中的第二个最小值?

如何在给定范围内找到数组中的最小值?

如何(稳健地)在python中的二维数组上找到局部最小值?

如何在数组上找到最小值、最大值以及如何使用角度更改最小绿色和最大红色的颜色文本

在浮点数组中找到最小值