如何根据条件改变我的循环范围

时间:2016-10-27 10:00:11

标签: vba excel-vba loops excel

我不知道我的问题描述是否准确,但基本上我有这个:enter image description here

由于我在这里工作,每个职位都成对出现。我想循环遍历整个列表并计算每个位置对的值差异(所以我想找到损失或增益),并将其返回到另一个单元格。这里第一个位置对的差值是14688,以下是另一个位置。我在这里做了一个简短的代码,试图让逻辑正确,但绝对不是。这有谁帮忙?非常感谢提前。如果我对我的问题含糊不清,我会修改它。

第一个位置在第63行。

Sub hello()

Dim sum As Long
Dim i As Long

For i = 63 To 100
    sum = range("T63").Value + range("T" & i)

    Do While sum <> 0
        If range("Y" & i) > 0 Then

'add result here

        End if
    Loop
Next

End Sub

1 个答案:

答案 0 :(得分:0)

因为您的数据&#34;结构&#34;具有由空单元格分隔的单个非空单元格,然后您可以利用Areas属性和Range对象的SpecialCells()方法,如下所示:

Option Explicit

Sub main()
    Dim iPair As Long
    Dim pairDiff As Double

    With Worksheets("lossgain") '<-- change "losspair" to your actual worksheet name
        With .Range("T63", .Cells(.Rows.Count, "T").End(xlUp)).SpecialCells(xlCellTypeConstants, xlNumbers) '<--| loop through column "T" cells containing numbers from row 63 down to last not empty one
            iPair = 1 '<--| initialize "pair" counter
            Do While iPair < .Areas.Count '<--| loop through "pairs"
                pairDiff = .Areas(iPair + 1).Offset(, 1) - .Areas(iPair).Offset(, 1) '<--| calculate the "pair" difference from corresponding column "U" values
                .Areas(iPair + 1).Offset(, IIf(pairDiff < 0, 2, 3)) = pairDiff '<--| write "pair" difference in corresponding column "V" (if loss) or "W" (if gain)
                iPair = iPair + 2 '<--| update "pair" counter by adding two not to mix "pairs"
            Loop
        End With
    End With
End Sub

按照评论并逐步完成代码,了解正在发生的事情