2010-04-20 17 views
0

我需要循環下面的公式,直到包含日期的列「B」爲空。 我被卡住了,我似乎無法編寫VBA代碼來做循環,直到列「B」中沒有更多日期爲止。該公式通過使用具有收益率的日期來平滑收益率。我需要使用偏移量函數循環公式,直到單元格爲空

我希望任何人都能夠幫助我。由於事先

 A  B  C   D 
5 Factor Date Yield  Input 
6 3  May-10 .25 
7 1  Jun-10 
8 2  Jul-10 
9 3  Aug-10 0.2000 
10 1  Sep-10 
11 2  Oct-10 
12 3  Nov-10 0.2418 
13 1  Dec-10 
14 2  Jan-11 
15 3  Feb-11 0.3156 
16 1  Mar-11 
17 2  Apr-11 

Sub IsNumeric() 
    ' IF(ISNUMBER(C6),C6, 
    If Application.IsNumber(range("c6").Value) Then 
    range("d6").Value = range("c6") 

    ' IF(C6<C5,((OFFSET(C6,2,0)-OFFSET(C6,-1,0))*A6/3+OFFSET(C6,-1,0)), 
    If range("c6").Select < range("c5").Select Then 
     range("d6").Value = range("c6").Offset(2, 0).Select - range("c6").Offset(-1, 0).Select * (range("a6").Select/3) + range("c6").Offset(-1, 0).Select 

     ' IF(C6<>C7,((OFFSET(C6,1,0)-OFFSET(C6,-2,0))*(A6/3)+OFFSET(C6,-2,0)),""))) 
     If range("c6").Select <> range("c7").Select Then 
     range("d6").Value = (range("c6").Offset(1, 0).Select) - range("c6").Offset(-2, 0).Select * (range("a6").Select/3) + range("c6").Offset(-2, 0).Select 
     Else 
     range("d6").Value = "" 
     End If 
    End If 
    End If 
End Sub 
+0

請重新讓你的代碼看起來迪不同於你的文本,因此縮進可以清楚說明什麼是嵌套的。 – atk 2010-04-20 18:39:12

+0

CEMG,我們很樂意提供幫助,但通過適當的縮進,這將更容易理解。 – PowerUser 2010-04-20 20:26:14

回答

1
Sub Test01() 
Dim m, r, cell As Object 
Dim n As Boolean 

Set m = Sheets("Sheet1").Cells(1, 2) 
Do 
    Set m = m.Offset(1, 0) 
    Set r = m.Resize(20, 1) 
    n = False 
    For Each cell In r 
    If cell.Formula <> "" Then 
    n = True 
    End If 
    Next cell 

    MsgBox m.Formula 
Loop Until n = False 
End Sub 

直到循環遇到一個細胞在其,在其下方,是20個連續的空白單元這將啓動在B1和環一路向下列B。當循環到達在其下面有20個連續空格單元格的單元格時,它將剛好偏移到它下面的第一個空單元格並停止。

0

如果我理解正確的話......

  1. 你需要硬編碼範圍轉換成變量
  2. 您正在使用正確偏移
  3. 我知道當/ WEND是過時的,不好意思: )

Sub IsNumeric() 
    dim tc as range 

    set tc = range("B6") 'this is always column B, but the row keeps changing in the loop 

    'IF(ISNUMBER(C6),C6, 

    while tc <> "" 
    If Application.IsNumber(tc.offset(0,1).Value) Then 
     tc.offset(0,2).Value = tc.offset(0,1) 

     'IF(C6<C5,((OFFSET(C6,2,0)-OFFSET(C6,-1,0))*A6/3+OFFSET(C6,-1,0)), 
     If tc.offset(0,1) < tc.offset(-1,1) Then 
     tc.offset(0,2).Value = tc.Offset(2, 1) - tc.Offset(-1, 1) * (tc.offset(0,-1)/3) + tc.Offset(-1, 1) 

     'IF(C6<>C7,((OFFSET(C6,1,0)-OFFSET(C6,-2,0))*(A6/3)+OFFSET(C6,-2,0)),""))) 
     If tc.offset(0,1) <> tc.offset(1,1) Then 
      tc.offset(0,2) = tc.offset(1,1) - tc.offset(-2,1) * (tc.offset(0,-1)/3) + tc.offset(-2,1) 
     Else 
      tc.offset(0,2) = "" 
     End If 
     End If 
    End If 
    set tc=tc.offset(1,0) 
    wend 
End Sub 
+0

我需要IF語句從D6循環到D17。所以我希望循環在列「B」爲空時停止,只要列「B」中有數據,我希望If語句計算。 – CEMG 2010-05-20 17:31:08

相關問題