a friend kindly wrote a code for me that take data from one spreadsheet and lists it in set categories in another by fiscal years and quarters.
the code detects maxium of the 'FYs'-column in one sheet and then runs the loop from the minimum to the maxium.
the highest number in the FY-column is 2012, but the loop stops there even though there's data to copy to the other sheet, and that's where I need help. problem is that i need this asap
Here's the code:
![]()
Sub CopyRowstoDiffSheet() 'made by Wittig Rico Dim ws1 As Worksheet, ws2 As Worksheet Dim QUART As String, FYmax As String Dim lngRow As Long, FY As Long, Leerzeile As Long, MaxZeile As Long, NeuZeile As Long, QuStZ As Long Dim SuW1col As Long, SuW2col As Long, SuW3col As Long, SuW4col As Long, SuW5col As Long Dim cathcol As Long, CrsNam As String, Crsvorh As Integer Set ws1 = Sheets("Raw Data - Summary") Set ws2 = Sheets("Scorecards") ws2.Rows("3:65000").Borders(xlEdgeBottom).LineStyle = xlNone ws2.Rows("3:65000").Borders(xlInsideHorizontal).LineStyle = xlNone ws2.Range("A4:B65000").ClearContents ws2.Range("C3:C65000").ClearContents ws2.Range("I3:I65000").ClearContents ws2.Range("O3:O65000").ClearContents ws2.Range("U3:U65000").ClearContents ws2.Range("AA3:AA65000").ClearContents Application.ScreenUpdating = False SuW1col = ws1.Range("A1:dd1").Find("Course Name").Column SuW2col = ws1.Range("A1:dd1").Find("Region").Column SuW3col = ws1.Range("A1:dd1").Find("FYs").Column SuW4col = ws1.Range("A1:dd1").Find("Quarter").Column SuW5col = ws1.Range("A1:dd1").Find("Course Category").Column With ws1.Range(ws1.Cells(2, SuW3col), ws1.Cells(65000, SuW3col)) .Replace What:="FY", Replacement:="" .NumberFormat = "0" End With If ws2.Range("b3").Value = "Q1" _ Or ws2.Range("b3").Value = "Q2" _ Or ws2.Range("b3").Value = "Q3" _ Or ws2.Range("b3").Value = "Q4" Then GoTo weiter Else MsgBox ("Start-Quartal in zelle B3 eingeben") GoTo Ende End If weiter: If ws2.Range("a3").Value = Empty _ Or ws2.Range("a3").Value < 2000 Then MsgBox ("Start-Jahr in zelle A3 eingeben") GoTo Ende End If If Not IsNumeric(ws2.Range("a3").Value) Then MsgBox ("Start-Jahr in zelle A3 eingeben") End If FY = ws2.Range("a3").Value FYmax = WorksheetFunction.Max(ws1.Range(ws1.Cells(2, SuW3col), ws1.Cells(65000, SuW3col))) If FY > FYmax Then MsgBox ("ab diesem Start-Jahr keine Ergebnisse vorhanden") GoTo Ende End If MaxZeile = 3 QuStZ = MaxZeile QUART = ws2.Range("b" & MaxZeile).Value FY = ws2.Range("a" & MaxZeile).Value Do Until FY = FYmax Do Until QUART = "Q5" For lngRow = 1 To ws1.Cells(Rows.Count, SuW5col).End(xlUp).Row Step 1 If ws1.Cells(lngRow, SuW2col) = ws2.Range("A1") _ And ws1.Cells(lngRow, SuW3col) = ws2.Range("a" & MaxZeile) _ And ws1.Cells(lngRow, SuW4col) = ws2.Range("b" & MaxZeile) Then CrsNam = ws1.Cells(lngRow, SuW1col).Value cathcol = ws2.Range("A1:dd2").Find(ws1.Cells(lngRow, SuW5col).Value).Column Leerzeile = ws2.Cells(Rows.Count, ws2.Range("A1:dd2"). _ Find(ws1.Cells(lngRow, SuW5col).Value).Column).End(xlUp).Row + 1 Crsvorh = Application.WorksheetFunction.CountIf(ws2.Range(Cells(QuStZ, cathcol), Cells(Leerzeile, cathcol)) _ , Trim(CrsNam)) If Crsvorh > 0 Then GoTo wertexist Else End If If NeuZeile > Leerzeile Then Leerzeile = NeuZeile End If If Leerzeile > MaxZeile Then MaxZeile = Leerzeile ws2.Range("a" & MaxZeile).Value = ws2.Range("a" & MaxZeile - 1).Value ws2.Range("b" & MaxZeile).Value = ws2.Range("b" & MaxZeile - 1).Value End If ws2.Cells(Leerzeile, ws2.Range("A1:dd2").Find(ws1.Cells(lngRow, SuW5col).Value).Column).Value _ = CrsNam Else End If wertexist: Next ws2.Range("A" & MaxZeile & ":AF" & MaxZeile).Borders(xlEdgeBottom).Weight = xlThick If QUART = "Q4" Then QUART = "Q5" If QUART = "Q3" Then QUART = "Q4" If QUART = "Q2" Then QUART = "Q3" If QUART = "Q1" Then QUART = "Q2" MaxZeile = MaxZeile + 1 NeuZeile = MaxZeile QuStZ = MaxZeile If MaxZeile > 3 Then ws2.Range("a" & MaxZeile).Value = ws2.Range("a" & MaxZeile - 1).Value Else End If ws2.Range("b" & MaxZeile).Value = QUART Loop FY = FY + 1 ws2.Range("a" & MaxZeile).Value = FY QUART = "Q1" ws2.Range("b" & MaxZeile).Value = QUART ws2.Range("A" & MaxZeile - 1 & ":AG" & MaxZeile - 1).Borders(xlEdgeBottom).LineStyle = xlDouble Loop Ende: Application.ScreenUpdating = True End Sub











LinkBack URL
About LinkBacks

Register To Reply

Bookmarks