2014-10-21 4 views
-1

저는 고객이 1 년마다 구매 한 파운드를 합산하는 Excel vba 서브 루틴을 작성하고 있지만 어떤 이유로 서브 루틴이 실패합니다. 그것은 B 열의 모든 고객 이름을 인쇄하지만 2011 년에는 그 행에 모두 0을 인쇄하고 2012, 2013 및 2014에 대해서는 첫 번째 열에 0을 인쇄하고 그 내용을 인쇄합니다.vba 코드가 합계 값을 제공하지 않습니다.

Private Sub lbsPerCustPerYear_Click() 
    Dim i As Integer 
    Dim Cust As Range 
    Dim Cust2 As Range 
    Dim Total2011 As Long 
    Dim Total2012 As Long 
    Dim Total2013 As Long 
    Dim Total2014 As Long 
    Dim Output As Range 
    Dim OutputY2011 As Range 
    Dim OutputY2012 As Range 
    Dim OutputY2013 As Range 
    Dim OutputY2014 As Range 
    Dim CustLbs As Range 
    Dim Cust2Lbs As Range 
    Dim YearD As Range 

    Total = 0 
    Set Cust = Range("C6") 
    Set Cust2 = Range("C7") 
    Set CustLbs = Range("Q6") 
    Set Cust2Lbs = Range("Q7") 
    Set Output = Sheets("Sheet10").Cells(2, 2) 
    Set OutputY2011 = Sheets("Sheet10").Cells(2, 3) 
    Set OutputY2012 = Sheets("Sheet10").Cells(2, 4) 
    Set OutputY2013 = Sheets("Sheet10").Cells(2, 5) 
    Set OutputY2014 = Sheets("Sheet10").Cells(2, 6) 
    Set YearD = Range("K6") 

    For i = 0 To 14750 
    If IsDate(Sheets("Sheet1").Cells(6 + i, 11)) And IsNumeric(Sheets("Sheet1").Cells(6 + i, 17)) Then 
     If Year(YearD) = "2011" Then 
     Total2011 = Total2011 + CustLbs.Value 
     Output.Value = Cust.Value 
     OutputY2011.Value = Total 
     ElseIf Year(YearD) = "2012" Then 
     Total2012 = Total2012 + CustLbs.Value 
     Output.Value = Cust.Value 
     OutputY2012.Value = Total 
     ElseIf Year(YearD) = "2013" Then 
     Total2013 = Total2013 + CustLbs.Value 
     Output.Value = Cust.Value 
     OutputY2013.Value = Total 
     ElseIf Year(YearD) = "2014" Then 
     Total2014 = Total2014 + CustLbs.Value 
     Output.Value = Cust.Value 
     OutputY2014.Value = Total 
     End If 

     If Cust.Value = Cust2.Value Then 
     Set Cust = Cust.Offset(1, 0) 
     Set Cust2 = Cust2.Offset(1, 0) 
     Set CustLbs = CustLbs.Offset(1, 0) 
     Set Cust2Lbs = Cust2Lbs.Offset(1, 0) 
     Set YearD = YearD.Offset(1, 0) 
     Else 
     Set Cust = Cust.Offset(1, 0) 
     Set Cust2 = Cust2.Offset(1, 0) 
     Set CustLbs = CustLbs.Offset(1, 0) 
     Set Cust2Lbs = Cust2Lbs.Offset(1, 0) 
     Set Output = Output.Offset(1, 0) 
     Set OutputY2011 = OutputY2011.Offset(1, 0) 
     Set OutputY2012 = OutputY2011.Offset(1, 0) 
     Set OutputY2013 = OutputY2011.Offset(1, 0) 
     Set OutputY2014 = OutputY2011.Offset(1, 0) 
     Set YearD = YearD.Offset(1, 0) 
     Total2011 = 0 
     Total2012 = 0 
     Total2013 = 0 
     Total2014 = 0 
     End If 
    Else 
     Set Cust = Cust.Offset(1, 0) 
     Set Cust2 = Cust2.Offset(1, 0) 
     Set CustLbs = CustLbs.Offset(1, 0) 
     Set Cust2Lbs = Cust2Lbs.Offset(1, 0) 
     Set YearD = YearD.Offset(1, 0) 
    End If 
    Next i 
End Sub 

왜 이런 일이 발생했는지에 대한 도움은 크게 감사하겠습니다.

답변

0

각 반복을 통해 변수를 확인하기 위해 MsgBox를 사용하여 시작할 것입니다. 이런 식으로 문제를 찾아 낼 수 있습니다.

있는 MsgBox (커스트 & ""& Cust2 & "을"& Total2011)

0

당신은 Total = 0를 정의하지만, 여기에 당신의 범위에 값을 쓰기 전에 변경하지 : OutputY2011.Value = Total

귀하의 코드 대신에 다른 총 변수 (예 : Total2011)를 사용하는 것으로 나타납니다. 다음과 같이 결과를 변경해보십시오 (마지막 행은 내가 변경 한 변수입니다) :

For i = 0 To 14750 
    If IsDate(Sheets("Sheet1").Cells(6 + i, 11)) And IsNumeric(Sheets("Sheet1").Cells(6 + i, 17)) Then 
     If Year(YearD) = "2011" Then 
      Total2011 = Total2011 + CustLbs.Value 
      Output.Value = Cust.Value 
      OutputY2011.Value = Total2011 
관련 문제