循环和行引用

时间:2016-07-21 09:54:44

标签: excel excel-vba vba

下面的代码需要在循环上运行= disvincenty公式,并且每次代码块运行时,引用的单元格$ C $ 2,$ D $ 2每次需要在同一列中向下一行,直到ABF(最后一行为列T中的数据。)然后退出子

对于每一行,它需要在已引用的相同列中运行公式= Min和两个= small,但也一次下降一行 - 与= distvincenty相同,但每次都粘贴值保留结果。

所以= distvincenty正在查看同一行中彼此相邻的单元格中的两个条件,与列中运行的列表进行比较,将其他三个公式应用于该行,然后向下移动。

Dim rng As Range
Dim row As Range
Dim cell As Range
Dim ABF As Integer
ABF = Sheet9.Range("T" & Rows.Count).End(xlUp).row
Set rng = Range("Q2:Q" & ABF)

For Each row In rng.Rows
    For Each cell In row.Cells


        Sheet9.Range("Q2").Formula = "=distVincenty($C$2,$D$2,$R2,$S2)/1609.344"
        Sheet9.Range("Q2").Copy
        Sheet9.Range("Q2:Q" & ABF).PasteSpecial xlPasteAll
        Application.CutCopyMode = False

        Sheet9.Range("E2").Formula = "=MIN(Q:Q)"
        Sheet9.Range("H2").Formula = "=SMALL(Q:Q,2)"
        Sheet9.Range("K2").Formula = "=SMALL(Q:Q,3)"

    Next cell
Next row

更新

我现在有了这个:

Dim ABF As Integer
Dim i As Integer

For i = 2 To Sheet9.Range("A" & Rows.Count).End(xlUp).row
  ABF = Sheet10.Range("AC" & Rows.Count).End(xlUp).row


    Sheet10.Range("AE3").Formula = "=distVincenty('Booking Workings'!$C$2,'Booking Workings'!$D$2,'User List'!$Z3,'User List'!$AA3)/1609.344"
    Sheet10.Range("AE3").Copy
    Sheet10.Range("AE3:AE" & ABF).PasteSpecial xlPasteAll
       Application.CutCopyMode = False


    Sheet9.Range("E" & i).Formula = "=MIN('User List'!AE:AE)"
    Sheet9.Range("H" & i).Formula = "=SMALL('User List'!AE:AE,2)"
    Sheet9.Range("K" & i).Formula = "=SMALL('User List'!AE:AE,3)"

   Next i    

End sub

我遇到的唯一问题是,每次运行此代码时,我都需要$ C $ 2和$ D $ 2来更改,就像更简单的公式一样。

我可以这样做吗?

        Sheet10.Range("AE3").Formula = "=distVincenty('Booking Workings'!$C$"(I)",'Booking Workings'!$D$"(I)",'User List'!$Z3,'User List'!$AA3)/1609.344"

更新 看起来像这样:

"=distVincenty('Booking Workings'!$C$" & (i) & ",'Booking Workings'!$D$" & (i) & ",'User List'!$Z3,'User List'!$AA3)/1609.344"

1 个答案:

答案 0 :(得分:0)

这很难解释。如果我离我很近,请告诉我。

Sub Test()

    Dim rng As Range
    Dim row As Range
    Dim cell As Range
    Dim ABF As Integer
    Dim arrValues
    Dim count As Integer

    ABF = Sheet9.Range("T" & Rows.count).End(xlUp).row
    Set rng = Range("Q2:Q" & ABF)
    arrValues = rng.Value

    For Each cell In rng

        Sheet9.Range("Q2:Q" & ABF).Formula = "=distVincenty($C$" & cell.row & ",$D$" & cell.row & ",$R2,$S2)/1609.344"

        Sheet9.Range("E2").Formula = "=MIN(Q:Q)"
        Sheet9.Range("H2").Formula = "=SMALL(Q:Q,2)"
        Sheet9.Range("K2").Formula = "=SMALL(Q:Q,3)"

        count = count + 1
        arrValues(count) = cell.Value
    Next cell

    Sheet9.Range("Q2:Q" & ABF).Value = arrValues


End Sub