Vba 循环以识别数据中的对

Vba 循环以识别数据中的对,vba,excel,Vba,Excel,我有一个问题: 因为我在这里处理职位,所以每个职位都是成对的。我想循环遍历整个列表,并计算每个位置对中的值差(因此我想找到损失或增益),然后将其返回到另一个单元格。此处,第一个位置对之间的差值为14688,以下为另一个位置对。在这里一些很棒的人的帮助下,我使用了区域属性,因为我的数据结构是由空单元格分隔的非空单元格。但是,我需要一个代码,该代码考虑到具有如下连续非空单元格的数据,并且仍然将它们配对 第一个位置在第63行 Sub main() Dim iPair As Long

我有一个问题:

因为我在这里处理职位,所以每个职位都是成对的。我想循环遍历整个列表,并计算每个位置对中的值差(因此我想找到损失或增益),然后将其返回到另一个单元格。此处,第一个位置对之间的差值为14688,以下为另一个位置对。在这里一些很棒的人的帮助下,我使用了
区域
属性,因为我的数据结构是由空单元格分隔的非空单元格。但是,我需要一个代码,该代码考虑到具有如下连续非空单元格的数据,并且仍然将它们配对

第一个位置在第63行

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


    pairDiff = 1

    With Worksheets("System 1") 
        With .range("T39", .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)
                .Areas(iPair + 1).Offset(, IIf(pairDiff < 0, 7, 8)) = 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
Sub-main()
暗淡的iPair就像长的一样
作为变体的Dim-pairDiff
pairDiff=1
带工作表(“系统1”)

使用.range(“T39“,.Cells(.Rows.Count,“T”).End(xlUp)).SpecialCells(xlCellTypeConstants,xlNumbers)
区域仍然很有用,只是您还需要在每个
区域中循环

选项显式

Sub main()
    Dim ielem As Long
    Dim pair1stValue As Double, pairDiff As Double
    Dim area As Range, cell As Range

    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
            For Each area In .Areas
                For Each cell In area.Cells
                    ielem = ielem + 1
                    If Int(ielem / 2) * 2 = ielem Then
                        pairDiff = cell.Offset(, 1) - pair1stValue  '<--| calculate the "pair" difference from corresponding column "U" values
                        cell.Offset(, IIf(pairDiff < 0, 2, 3)) = pairDiff '<--| write "pair" difference in corresponding column "V" (if loss) or "W" (if gain)
                    Else
                        pair1stValue = cell.Offset(, 1)
                    End If
                Next
            Next
        End With
    End With
End Sub
Sub-main()
像这样长
Dim pair1stValue为双精度,pairDiff为双精度
变暗区域作为范围,单元格作为范围

“你有没有试过什么?”?我问这个问题是因为你发布的代码是对你之前的一个问题的回答……你能扩展一下你的例子吗?也许通过向我们展示代码运行之前和之后您希望看到的内容?@Rcaetano嗨,我不知道如何执行此操作,因为我是VBA新手,所以我只手动移动单元格,抱歉。可能是重复的