比较不同列中的值 - 循环

时间:2016-10-12 02:55:51

标签: excel vba excel-vba

我想比较

中的值

EntryP:

6

11

4

TwndHigh:

5

10

4

6

10

11

我想将EntryP中的每个值与TwndHigh中的值进行比较,并找到TwndHigh中大于EntryP的第一个值。例如,大于6的第一个值是10,,大​​于4的第一个值是6. 这意味着我希望我在TwndHigh中的行号匹配我想要的EntryP行相比。

Sub BUYexitGAIN()

Dim ohlc As Range
Dim cll, cell, twndhigh, twndlow As Range
Dim stoplossb, entrypriceb, stoplosss, entryprices As Double
Dim exitgains, exitlosss, exitgainb, exitlossb As Range
Dim n As Range
Dim i As Long


For i = 990 To 2000

'BUY
    If Range("M" & i).Value = "buy" Then
        entrypriceb = Range("w" & i)
        Set twndlow = Range("K" & i & ":" & "K10000")

    For Each cell In twndlow
        If cell.Value > entrypriceb Then
            Range("z" & cell.Row) = cell.Value
            Range("t" & cell.Row) = -Range("t" & i)
            Range("u" & cell.Row) = Range("t" & i) * cell.Value * 10000
            Exit For
        End If
    Next cell
End If

Next i
End Sub

现在有点乱,但我正在使用双循环(For和For each cell)。这在我的返回列中给了我大约3个值(当我只想要符合我条件的第一个值时),其中2个通常是错误的值,其中1个是正确的。如何让我的代码成为一个循环,或者让它只返回我想要的第一个值?谢谢你们

* PS对不起,我知道我已经问了类似的问题,但我想重写我的整个问题,让你们更容易。

1 个答案:

答案 0 :(得分:-1)

我已在下方提供代码以解决您在顶部说明的问题。如果您在A1:A3中有EntryP,在A5:A10中有TwndHigh,如示例中那样,它将输出EntryP数据旁边的结果。根据您处理相对较小整数的示例数据,请注意您需要将possibleResult初始化为大于预期输入数据的值,并且您可能需要更改数据类型以适应这一点。

Public Sub FindFirstHigher()

Dim possibleResult As Integer

Dim EntryP, TwndHigh As Range

Set EntryP = Worksheets("firstHigher").Range("A1:A3")
Set TwndHigh = Worksheets("firstHigher").Range("A5:A10")

For Each entrycell In EntryP

    possibleResult = 9999

    For Each checkcell In TwndHigh

        If (checkcell.Value > entrycell.Value And checkcell.Value < possibleResult) Then

            possibleResult = checkcell.Value

        End If

    Next checkcell

    entrycell.Offset(0, 1).Value = possibleResult

Next entrycell

End Sub