2017-03-15 5 views
1

Ich bin neu hier und schätze Ihre Hilfe bei der Herausforderung, der ich gegenüberstehe.Wie durchläuft monatliche Daten mit VBA?

Ich arbeite an einem Projekt mit VBA für Excel. Ich habe Daten von 14 Monaten und möchte den letzten Wert jedes Monats durch den ersten Wert des gleichen Monats teilen. Der erste Arbeitstag des Monats kann ein beliebiger Tag sein, ebenso der letzte Tag. Ich habe den folgenden Code geschrieben, um den letzten Tag jedes Monats zu finden und hervorzuheben, und es funktioniert.

sub find_lastrow() 
    Dim lrow As Long 
    Dim i As Long 
    Dim data As Date 
    Dim next_day As Date 

    lrow = Cells(Rows.Count, "A").End(xlUp).Row 

    For i = 2 To lrow 

     data = Cells(i, "A") 
     next_date = Cells(i, "A").Offset(1, 0) 

     'finding and painting last day of each month and last day of each year 

     If Month(next_date) = Month(data) + 1 Or _ 
      Year(next_date) = Year(data) + 1 Then 

      Range(Cells(i, "A"), Cells(i, "K")).Select 

      With Selection.Interior 
       .Pattern = xlSolid 
       .PatternColorIndex = xlAutomatic 
       .ThemeColor = xlThemeColorLight2 
       .TintAndShade = 0.799981688894314 
       .PatternTintAndShade = 0 
      End With 

     End If 
End sub 

Allerdings habe ich es schwer, den ersten Wert jedes Monats durch den letzten Wert des entsprechenden Monats zu teilen. Ich schätze Ihre Hilfe sehr.

enter image description here

Antwort

0

Zunächst müssen Sie Ihre Schleife beenden. Zweitens, den letzten Wert durch den ersten Wert zu teilen, erstellen Sie einfach eine Variable, um den ersten Wert zu halten, bis Sie die Zeile mit der letzten Zeile erreichen - dann ist es für die Division zur Verfügung:

sub find_lastrow() 
    Dim lrow As Long 
    Dim i As Long 
    Dim data As Date 
    Dim next_day As Date 
    Dim StartValue As Double 

    lrow = Cells(Rows.Count, "A").End(xlUp).Row 
    StartValue = Cells(2, "B").Value 

    For i = 2 To lrow 

     data = Cells(i, "A") 
     next_date = Cells(i + 1, "A") 

     'finding and painting last day of each month and last day of each year 

     If Month(next_date) = Month(data) + 1 Or _ 
      Year(next_date) = Year(data) + 1 Then 

      Cells(i, "C").Value = Cells(i, "B").Value/StartValue 
      'Set up start value for next month 
      StartValue = Cells(i + 1, "B").Value 

      With Range(Cells(i, "A"), Cells(i, "K")).Interior 
       .Pattern = xlSolid 
       .PatternColorIndex = xlAutomatic 
       .ThemeColor = xlThemeColorLight2 
       .TintAndShade = 0.799981688894314 
       .PatternTintAndShade = 0 
      End With 

     End If 
    Next 
End Sub 
+0

Ihr Code funktioniert. Vielen Dank! – Raphy