2013-04-03 51 views
0

我想比較行中的每個日期,採取最高,排序他們最近到最近,然後對值做同樣的事情。VBA想比較2日期列和2值列創建每個

有我的代碼

Sub Intersection() 

Dim nombre As Integer 
Dim tableauDate(1 To 130) As Date 
Dim tableauValeur(1 To 130) As String 
Dim incrementeurForeach As Integer 

nombre = 115 
incrementeurForeach = 1 

For incrementeur = 0 To nombre 
    If Range("A" & incrementeur).Value = Range("C" & incrementeur).Value Then 
     tableauDate(incrementeur) = Range("A" & incrementeur).Value 
     If Range("B" & incrementeur).Value > Range("D" & incrementeur).Value Then 
      tableauValeur(incrementeur) = Range("B" & incrementeur).Value 
     Else 
      tableauValeur(incrementeur) = Range("D" & incrementeur).Value 
     End If 
    Else 
     If Range("A" & incrementeur).Value > Range("C" & incrementeur).Value Then 
      tableauDate(incrementeur) = Range("A" & incrementeur).Value 
     Else 
      tableauDate(incrementeur) = Range("C" & incrementeur).Value 
     End If 
    End If 

Next incrementeur 

For Each valeur In tableauDate 

    Range("A", incrementeurForeach).Value = tableauDate(incrementeurForeach) 
    Range("B", incrementeurForeach).Value = tableauValeur(incrementeurForeach) 

    incrementeurForeach = incrementeurForeach + 1 

Next valeur 
End Sub 

而且還有表的一部分

  A     B    C    D 
1  Date A   Prix A   Date B   Prix B 
2  2000-01-31   34,84 $  2000-01-31 48,07 $ 
3  2000-05-31   29,22 $  2000-02-29 39,15 $ 
4  2000-06-30   29,00 $  2000-03-31 43,46 $ 
5  2000-07-31   30,25 $  2000-04-30 43,62 $ 
6  2000-08-31   33,27 $  2000-05-31 47,27 $ 

非常感謝您的幫助

+0

什麼是與您當前密碼的問題?你能發佈一個示例文件來幫助我們嗎? – brettdj

+0

更改'增量= 0更改'爲'增量= 2更改'。 –

回答

1

我嘗試清理你的代碼一點點,其可能會幫助你或他人。

有一些錯誤,例如incrementeur必須在1開始,因爲Range("A" & incrementeur)如果將錯誤incrementeur = 0。這需要在代碼的其他地方稍作改動。

我不知道具體是什麼問題,但我注意到,你只填充tableauValeur如果日期=日期B.

Sub Intersection() 

Dim nombre As Integer 
Dim tableauDate(1 To 130) As Date 
Dim tableauValeur(1 To 130) As String 
Dim valeur as Variant 
Dim incrementeurForeach As Integer 
Dim dateA As Date 
Dim dateB As Date 
Dim prixA As Variant 
Dim prixB As Variant 

nombre = 115 
incrementeurForeach = 1 

For incrementeur = 2 To nombre 'change to "2"' 
    'Add some variables to make the code more legible.' 
    dateA = Range("A" & incrementeur).Value 
    dateB = Range("c" & incrementeur).Value 
    prixA = Range("B" & incrementeur).Value 
    prixB = Range("D" & incrementeur).Value 

    'Rewrite the expressions using the variables'. 
    ' Also favor a Select Case instead of nested IF/Then.' 
    Select Case dateA 
     Case Is = dateB 
      tableauDate(incrementeur) = dateA 
      If prixA > prixB Then 
       tableauValeur(incrementeur - 1) = prixA 
      Else 
       tableauValeur(incrementeur - 1) = prixB 
      End If 

     Case Is > dateB 
      tableauDate(incrementeur - 1) = dateA 

     Case Else: 
      tableauDate(incrementeur - 1) = dateB 

    End Select 

Next incrementeur 


Sheets.Add After:=ActiveSheet 'I add a new worksheet to debug, you can remove this if necessary' 

For Each valeur In tableauDate 

'I also change the way you specify the Ranges, to use OFFSET. 
    Range("A1").Offset(incrementeurForEach,0).Value = tableauDate(incrementeurForeach) 
    Range("B1").Offset(incrementeurForEach,0).Value = tableauValeur(incrementeurForeach) 

    incrementeurForeach = incrementeurForeach + 1 

Next valeur 

End Sub 
+1

NOw,代碼創建了130張,我確實知道要更改哪個部分。我是VBA的初學者。感謝您的幫助。 – user2238411

+0

我更新了代碼 - 它現在應該在'for tableau_table'循環中的For Each valeur之前添加一張。以前,它是爲每個'valeur'添加一張表,這是不正確的。 –

+0

嗨,現在它工作的日期的一部分,但不是所有的人。此外,價格不在那裏,在日期...我的名單上有130個日期出現在我的表單上,但事實上,有115 + 100個日期(2列)。感謝您的幫助。 – user2238411