我想比较行中的每个日期,取最高点,按最近的距离对它们进行排序,然后对值进行相同的操作。
有我的代码
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 :(得分:1)
我尝试稍微清理你的代码,这可能对你或其他人有所帮助。
有一些错误,例如incrementeur
必须从1
开始,因为如果Range("A" & incrementeur)
incrementeur = 0
会出错。这需要在代码中的其他地方进行一些小的更改。
我不确定具体问题是什么,但是我注意到,如果日期A =日期B,您只填充tableauValeur
。
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