由于我在这里工作,每个职位都成对出现。我想循环遍历整个列表并计算每个位置对的值差异(所以我想找到损失或增益),并将其返回到另一个单元格。这里第一个位置对的差值是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
答案 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
按照评论并逐步完成代码,了解正在发生的事情