【发布时间】:2026-02-19 15:40:01
【问题描述】:
我在一个数组中有 2 个嵌套循环,但据我所知,我需要第三个,但我无法实现。
我有以下数据(黄色):
当前代码按实际行为列中的指示计算:
Dim arr, outarr as Variant
Dim lastc, lastr as long
lastc = 2
lastr = Cells(ws.Rows.count, lastc).End(xlUp).Row
arr = Range(Cells(2, lastc), Cells(lastr, lastc))
cnt = ((UBound(arr, 1) - 1) * UBound(arr, 1)) / 2
k = 1
ReDim outarr(1 To cnt, 1 To 1)
For i = LBound(arr, 1) + 1 To UBound(arr, 1)
For j = LBound(arr, 1) To i - 1
outarr(k, 1) = arr(j, 1) - arr(i, 1)
k = k + 1
Next j
Next i
期望的行为是从 1.1 到 6.1 的值将最小值存储在该范围内作为结果。 10 - 0 = 10 但我需要该范围内的实际最小值(1.6 到 6.6),最小值为 10 - 40 = -30。
始终将最小值计算为范围的第一个值 - 范围的 X 值非常重要。给定循环中的第一个值是一个常数。
我认为需要第三个循环来存储最小值,然后将此值插入到 outarr,但我还没有成功。
感谢您的帮助。
【问题讨论】:
-
我不确定我是否正确理解了最小值部分。对于
B7-B3,最小值不是5 - 40吗?和B7-B2,最小值为0 - 40? -
@RaymondWu 更新了我的查询。感谢您指出了这一点。范围内的第一个值是一个常数,计算基于(第一个值 - X 值,第一个值 - Y 值.....)。
-
抱歉,我还是没听懂,对于
B5-B3,输出是25但不是最小值30 - 40? -
@RaymondWu 是的,你是对的。我只是没有计算那个,因为在 B7 示例中解释了所需的行为。但是,是的,最小值是 - 10。
-
@RaymondWu 还有一个问题 Raymond。这个循环是更大循环的一部分,当我尝试访问下一个循环时,输出索引增加了 1。知道为什么吗?行数,数组大小,一切都是一样的。谢谢。