我想将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数组调整为我要比较的Stoploss中值的行号。这意味着,当我将54与OHLC进行比较时,我的OHLC范围现在将变为B2:B3而不是停留在B1:B3。
Stoploss范围内会有空格。到目前为止我有这个:
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的新手。
答案 0 :(得分:0)
现在您搜索每一行的值大于该行中的Stoploss,因为您的范围OHLC
只包含一行。因此,首先搜索37 43 30 40以获得大于45的值,依此类推。这没有任何命中(至少在你的例子中)。
如果要搜索Stoploss的每个值的所有行,您需要将范围设置为所有这些行,然后循环它们
'Set OHLC = Range("B1:E10000") 'If you want to search the whole range
For i = 63 To 166
'Set OHLC = Range("B" & i & "E10000") 'if you want to search from row i onwards
If Range("X" & i).Value > 0 Then
stoploss = Range("x" & i)
Set OHLC = Range("B" & i & "E10000") 'based on your comment "first row of OHLC to match the row of the value in Stoploss" (only update OHLC if stoploss is updated)
End If
For Each cll In OHLC 'will loop row by row
If cll.Value > stoploss Then
Range("s" & cll.Row) = cll.Value
Exit For 'don't loop through all 40000 cells!
End If
Next cll
Next i