2016-10-28 55 views
-2

我有這個問題:循環,以確定我的數據對

enter image description here

由於我與位置在這裏工作,每個位置是在一個對。我想遍歷整個列表並計算每個位置對的價值差異(所以我想找到損失或增益),並將其返回給另一個單元格。這裏第一個位置對的區別是14688,以下是另一個位置對。在這裏的一些真棒人的幫助下,我使用了Area屬性,因爲我的數據結構是由空單元格分隔的非空單元格。但是,我需要一個代碼,考慮具有像下面這樣的連續非空單元格的數據,並將它們配對。

的第一個位置是在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 

任何幫助嗎?如果你需要我具體的問題,我會相應地編輯它。謝謝。

+3

你嘗試什麼嗎?我在問這是因爲您發佈的代碼是您之前的問題之一的答案... – RCaetano

+0

您可以擴展您的示例嗎?也許通過向我們展示代碼運行之前和之後您期望看到的內容? –

+0

@Rcaetano嗨,我不知道如何去做,因爲我是新來的VBA,所以我只手動移動細胞,道歉。 – jadeliew123

回答

0

Areas還是有幫助的,只有你通過每個Area細胞具有循環也

顯式的選項

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