0

我想比较行中的每个日期,取最高的,按最接近的对它们进行排序,然后对这些值做同样的事情。

这是我的代码

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 $ 

非常感谢您的帮助

4

1 回答 1

1

我尝试稍微清理一下您的代码,这可能会对您或其他人有所帮助。

有一些错误,例如incrementeurmust begin at1因为Range("A" & incrementeur)会出错 if incrementeur = 0。这需要在代码的其他地方进行一些小的更改。

我不确定具体问题是什么,但是我注意到您只填充了tableauValeurif Date A = Date 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
于 2013-04-03T02:37:17.640 回答