【发布时间】:2017-02-18 10:27:11
【问题描述】:
我想将 Multid 数组中的值与单个列中的值进行比较。
止损:
45
54
76
OHLC:
37 43 30 40
32 43 41 43
32 54 76 87
我想将 Stoploss 中的每个值与 OHLC 进行比较,并找到大于 OHLC 中 Stoploss 的第一个值,在这种情况下,OHLC 中大于 45 的第一个数字将是 54。这发生在 Stoploss 中的每个后续数字,将 OHLC 数组调整为我要比较的止损值的行号。这意味着,当我将 54 与 OHLC 进行比较时,我的 OHLC 范围现在将变为 B2:B3,而不是停留在 B1:B3。
止损范围内会有空格。到目前为止,我有这个:
For i = 63 To 166
Set OHLC = Range("B" & i & ":" & "E" & i)
For Each cll In OHLC
If Range("x" & i).Value > 0 Then
stoploss = Range("x" & i)
End If
If cll.Value > stoploss Then
Range("s" & cll.Row) = cll.Value
End If
Next cll
Next i
我的代码中没有错误消息,但“S”列中没有返回值。我也知道这种双循环方法不起作用,因为它为每一行返回范围 B:E 中的第一个值,这不是我想要的。有帮助吗?任何输入将不胜感激。谢谢你
*PS 我知道这方面的主题之前已经介绍过,但仅限于 VB 领域。似乎找不到正确的解决方案。我是 VBA 新手。
【问题讨论】:
-
没有阅读完整的问题,但很明显这个
Set OHLC = Range("B" & i & ":" & "E" & i)应该在for each循环之前。 -
不应该
cll也实际阅读cell吗? -
@BryanDavies 嗨,布莱恩,我已经将 cll 格式化为变量。所以这里没有错误。
-
@newguy 在循环内设置 OHLC 范围也可以。
-
好的,如果你之前定义过,没关系。但我真的同意 newguy 关于在
for each cll in ohlc的 for 循环中重置一系列 OHLC 是一个非常糟糕的主意。如果不出意外,您将面临无法逃脱的无限循环的风险。我不介意 i = 63 到 16 的 for 循环内的“设置 OHLC”,尽管这也需要一个步骤为 -1 或其他东西。因为它会 i=63,64,65 等,永远不会达到 16。
标签: vba excel loops multidimensional-array