Tab month tracker












0














The code works; the problem is in the processing. I feel like the code can further improved and I believe the answer is Arrays however, my knowledge is very limited. Here, I loop through ~ 1000 columns. Each column has a start and end date; which will span from 1 day to 20 days, averaging ~ 3-5 days for each column. Upwards of 5000 lines are moved through and it shows in the speed of return. I will be adding If statements and I feel that if I add too much more where I am at that the program will crash.



I am hoping to speed it up. I believe arrays will do this however, the only array I use in here is borrowed from SO.



Tab Month Tracker



Raw Data Columns



Tabs Example



'Function to return array for dates between Start Date and End Date
Function GetDatesRange(dateStart As Date, dateEnd As Date) As Collection
Dim dates As New Collection
Dim currentDate As Date
currentDate = dateStart
Do While currentDate <= dateEnd

dates.Add currentDate
currentDate = DateAdd("d", 1, currentDate)
Loop
Set GetDatesRange = dates
End Function



'Sub to move raw data into predictable format
Sub Program()

Application.ScreenUpdating = False

Dim dateStartCell As Range, dateEndCell As Range, StartDate As Range, Cell As Range
Dim allDates As Collection
Dim currentDateSter As Variant
Dim currentDate As Date
Dim TestDate As Integer

Dim NextRow As Long
Dim AdvRow As Long

Dim Facility As String
Dim Unit As String
Dim TheDay As String
Dim TheUnit As String
Dim Pax As String

Dim Test1 As Boolean
Dim Test2 As Boolean

Set StartDate = Range("E2:E1000")

NextRow = 2

Sheets("Raw").Activate

'Evaluating Each Date in Range
For Each Cell In StartDate

Set dateStartCell = Range("E" & NextRow)
Set dateEndCell = Range("G" & NextRow)
Set allDates = GetDatesRange(dateStartCell.Value, dateEndCell.Value)

Facility = Cells(NextRow, 3)
Unit = Cells(NextRow, 2)
Pax = Cells(NextRow, 12)
'Evaluating if the date and name already exist
For Each currentDateSter In allDates
currentDate = CDate(currentDateSter)
Sheets(MonthName(Month(currentDate), True) & Year(currentDate)).Activate


AdvRow = 3
PropRow = Empty
Test1 = False
Test2 = False
'evaluating if the date and name already exists if it does, and determines row for data entry
'eventually end up writing over data if it already exists however, column C has 125 unique possibilities
'that will fill another column in the month tabs
Do
AdvRow = AdvRow + 1
PropRow = AdvRow

TheDay = Cells(AdvRow, 1)
TheUnit = Cells(AdvRow, 2)

If TheDay = Day(currentDate) And TheUnit = Unit Then
Test1 = True
Else: Test1 = False
End If

If TheDay = TheUnit Then
Test2 = True
Else: Test2 = False
End If

Loop Until Test1 = True Or Test2 = True



Cells(PropRow, 2).Value = Unit
Cells(PropRow, 1).Value = Day(currentDate)
Cells(PropRow, 3).Value = Pax




Sheets("Raw").Activate

Next currentDateSter

NextRow = NextRow + 1
Next Cell
Application.ScreenUpdating = True
End Sub









share|improve this question









New contributor




Jon Dee is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

























    0














    The code works; the problem is in the processing. I feel like the code can further improved and I believe the answer is Arrays however, my knowledge is very limited. Here, I loop through ~ 1000 columns. Each column has a start and end date; which will span from 1 day to 20 days, averaging ~ 3-5 days for each column. Upwards of 5000 lines are moved through and it shows in the speed of return. I will be adding If statements and I feel that if I add too much more where I am at that the program will crash.



    I am hoping to speed it up. I believe arrays will do this however, the only array I use in here is borrowed from SO.



    Tab Month Tracker



    Raw Data Columns



    Tabs Example



    'Function to return array for dates between Start Date and End Date
    Function GetDatesRange(dateStart As Date, dateEnd As Date) As Collection
    Dim dates As New Collection
    Dim currentDate As Date
    currentDate = dateStart
    Do While currentDate <= dateEnd

    dates.Add currentDate
    currentDate = DateAdd("d", 1, currentDate)
    Loop
    Set GetDatesRange = dates
    End Function



    'Sub to move raw data into predictable format
    Sub Program()

    Application.ScreenUpdating = False

    Dim dateStartCell As Range, dateEndCell As Range, StartDate As Range, Cell As Range
    Dim allDates As Collection
    Dim currentDateSter As Variant
    Dim currentDate As Date
    Dim TestDate As Integer

    Dim NextRow As Long
    Dim AdvRow As Long

    Dim Facility As String
    Dim Unit As String
    Dim TheDay As String
    Dim TheUnit As String
    Dim Pax As String

    Dim Test1 As Boolean
    Dim Test2 As Boolean

    Set StartDate = Range("E2:E1000")

    NextRow = 2

    Sheets("Raw").Activate

    'Evaluating Each Date in Range
    For Each Cell In StartDate

    Set dateStartCell = Range("E" & NextRow)
    Set dateEndCell = Range("G" & NextRow)
    Set allDates = GetDatesRange(dateStartCell.Value, dateEndCell.Value)

    Facility = Cells(NextRow, 3)
    Unit = Cells(NextRow, 2)
    Pax = Cells(NextRow, 12)
    'Evaluating if the date and name already exist
    For Each currentDateSter In allDates
    currentDate = CDate(currentDateSter)
    Sheets(MonthName(Month(currentDate), True) & Year(currentDate)).Activate


    AdvRow = 3
    PropRow = Empty
    Test1 = False
    Test2 = False
    'evaluating if the date and name already exists if it does, and determines row for data entry
    'eventually end up writing over data if it already exists however, column C has 125 unique possibilities
    'that will fill another column in the month tabs
    Do
    AdvRow = AdvRow + 1
    PropRow = AdvRow

    TheDay = Cells(AdvRow, 1)
    TheUnit = Cells(AdvRow, 2)

    If TheDay = Day(currentDate) And TheUnit = Unit Then
    Test1 = True
    Else: Test1 = False
    End If

    If TheDay = TheUnit Then
    Test2 = True
    Else: Test2 = False
    End If

    Loop Until Test1 = True Or Test2 = True



    Cells(PropRow, 2).Value = Unit
    Cells(PropRow, 1).Value = Day(currentDate)
    Cells(PropRow, 3).Value = Pax




    Sheets("Raw").Activate

    Next currentDateSter

    NextRow = NextRow + 1
    Next Cell
    Application.ScreenUpdating = True
    End Sub









    share|improve this question









    New contributor




    Jon Dee is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.























      0












      0








      0







      The code works; the problem is in the processing. I feel like the code can further improved and I believe the answer is Arrays however, my knowledge is very limited. Here, I loop through ~ 1000 columns. Each column has a start and end date; which will span from 1 day to 20 days, averaging ~ 3-5 days for each column. Upwards of 5000 lines are moved through and it shows in the speed of return. I will be adding If statements and I feel that if I add too much more where I am at that the program will crash.



      I am hoping to speed it up. I believe arrays will do this however, the only array I use in here is borrowed from SO.



      Tab Month Tracker



      Raw Data Columns



      Tabs Example



      'Function to return array for dates between Start Date and End Date
      Function GetDatesRange(dateStart As Date, dateEnd As Date) As Collection
      Dim dates As New Collection
      Dim currentDate As Date
      currentDate = dateStart
      Do While currentDate <= dateEnd

      dates.Add currentDate
      currentDate = DateAdd("d", 1, currentDate)
      Loop
      Set GetDatesRange = dates
      End Function



      'Sub to move raw data into predictable format
      Sub Program()

      Application.ScreenUpdating = False

      Dim dateStartCell As Range, dateEndCell As Range, StartDate As Range, Cell As Range
      Dim allDates As Collection
      Dim currentDateSter As Variant
      Dim currentDate As Date
      Dim TestDate As Integer

      Dim NextRow As Long
      Dim AdvRow As Long

      Dim Facility As String
      Dim Unit As String
      Dim TheDay As String
      Dim TheUnit As String
      Dim Pax As String

      Dim Test1 As Boolean
      Dim Test2 As Boolean

      Set StartDate = Range("E2:E1000")

      NextRow = 2

      Sheets("Raw").Activate

      'Evaluating Each Date in Range
      For Each Cell In StartDate

      Set dateStartCell = Range("E" & NextRow)
      Set dateEndCell = Range("G" & NextRow)
      Set allDates = GetDatesRange(dateStartCell.Value, dateEndCell.Value)

      Facility = Cells(NextRow, 3)
      Unit = Cells(NextRow, 2)
      Pax = Cells(NextRow, 12)
      'Evaluating if the date and name already exist
      For Each currentDateSter In allDates
      currentDate = CDate(currentDateSter)
      Sheets(MonthName(Month(currentDate), True) & Year(currentDate)).Activate


      AdvRow = 3
      PropRow = Empty
      Test1 = False
      Test2 = False
      'evaluating if the date and name already exists if it does, and determines row for data entry
      'eventually end up writing over data if it already exists however, column C has 125 unique possibilities
      'that will fill another column in the month tabs
      Do
      AdvRow = AdvRow + 1
      PropRow = AdvRow

      TheDay = Cells(AdvRow, 1)
      TheUnit = Cells(AdvRow, 2)

      If TheDay = Day(currentDate) And TheUnit = Unit Then
      Test1 = True
      Else: Test1 = False
      End If

      If TheDay = TheUnit Then
      Test2 = True
      Else: Test2 = False
      End If

      Loop Until Test1 = True Or Test2 = True



      Cells(PropRow, 2).Value = Unit
      Cells(PropRow, 1).Value = Day(currentDate)
      Cells(PropRow, 3).Value = Pax




      Sheets("Raw").Activate

      Next currentDateSter

      NextRow = NextRow + 1
      Next Cell
      Application.ScreenUpdating = True
      End Sub









      share|improve this question









      New contributor




      Jon Dee is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      The code works; the problem is in the processing. I feel like the code can further improved and I believe the answer is Arrays however, my knowledge is very limited. Here, I loop through ~ 1000 columns. Each column has a start and end date; which will span from 1 day to 20 days, averaging ~ 3-5 days for each column. Upwards of 5000 lines are moved through and it shows in the speed of return. I will be adding If statements and I feel that if I add too much more where I am at that the program will crash.



      I am hoping to speed it up. I believe arrays will do this however, the only array I use in here is borrowed from SO.



      Tab Month Tracker



      Raw Data Columns



      Tabs Example



      'Function to return array for dates between Start Date and End Date
      Function GetDatesRange(dateStart As Date, dateEnd As Date) As Collection
      Dim dates As New Collection
      Dim currentDate As Date
      currentDate = dateStart
      Do While currentDate <= dateEnd

      dates.Add currentDate
      currentDate = DateAdd("d", 1, currentDate)
      Loop
      Set GetDatesRange = dates
      End Function



      'Sub to move raw data into predictable format
      Sub Program()

      Application.ScreenUpdating = False

      Dim dateStartCell As Range, dateEndCell As Range, StartDate As Range, Cell As Range
      Dim allDates As Collection
      Dim currentDateSter As Variant
      Dim currentDate As Date
      Dim TestDate As Integer

      Dim NextRow As Long
      Dim AdvRow As Long

      Dim Facility As String
      Dim Unit As String
      Dim TheDay As String
      Dim TheUnit As String
      Dim Pax As String

      Dim Test1 As Boolean
      Dim Test2 As Boolean

      Set StartDate = Range("E2:E1000")

      NextRow = 2

      Sheets("Raw").Activate

      'Evaluating Each Date in Range
      For Each Cell In StartDate

      Set dateStartCell = Range("E" & NextRow)
      Set dateEndCell = Range("G" & NextRow)
      Set allDates = GetDatesRange(dateStartCell.Value, dateEndCell.Value)

      Facility = Cells(NextRow, 3)
      Unit = Cells(NextRow, 2)
      Pax = Cells(NextRow, 12)
      'Evaluating if the date and name already exist
      For Each currentDateSter In allDates
      currentDate = CDate(currentDateSter)
      Sheets(MonthName(Month(currentDate), True) & Year(currentDate)).Activate


      AdvRow = 3
      PropRow = Empty
      Test1 = False
      Test2 = False
      'evaluating if the date and name already exists if it does, and determines row for data entry
      'eventually end up writing over data if it already exists however, column C has 125 unique possibilities
      'that will fill another column in the month tabs
      Do
      AdvRow = AdvRow + 1
      PropRow = AdvRow

      TheDay = Cells(AdvRow, 1)
      TheUnit = Cells(AdvRow, 2)

      If TheDay = Day(currentDate) And TheUnit = Unit Then
      Test1 = True
      Else: Test1 = False
      End If

      If TheDay = TheUnit Then
      Test2 = True
      Else: Test2 = False
      End If

      Loop Until Test1 = True Or Test2 = True



      Cells(PropRow, 2).Value = Unit
      Cells(PropRow, 1).Value = Day(currentDate)
      Cells(PropRow, 3).Value = Pax




      Sheets("Raw").Activate

      Next currentDateSter

      NextRow = NextRow + 1
      Next Cell
      Application.ScreenUpdating = True
      End Sub






      performance vba excel






      share|improve this question









      New contributor




      Jon Dee is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question









      New contributor




      Jon Dee is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question








      edited 10 mins ago









      Jamal

      30.2k11116226




      30.2k11116226






      New contributor




      Jon Dee is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 13 hours ago









      Jon Dee

      1




      1




      New contributor




      Jon Dee is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      Jon Dee is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      Jon Dee is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.



























          active

          oldest

          votes











          Your Answer





          StackExchange.ifUsing("editor", function () {
          return StackExchange.using("mathjaxEditing", function () {
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          });
          });
          }, "mathjax-editing");

          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "196"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });






          Jon Dee is a new contributor. Be nice, and check out our Code of Conduct.










          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f210120%2ftab-month-tracker%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown






























          active

          oldest

          votes













          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          Jon Dee is a new contributor. Be nice, and check out our Code of Conduct.










          draft saved

          draft discarded


















          Jon Dee is a new contributor. Be nice, and check out our Code of Conduct.













          Jon Dee is a new contributor. Be nice, and check out our Code of Conduct.












          Jon Dee is a new contributor. Be nice, and check out our Code of Conduct.
















          Thanks for contributing an answer to Code Review Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f210120%2ftab-month-tracker%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Create new schema in PostgreSQL using DBeaver

          Deepest pit of an array with Javascript: test on Codility

          Fotorealismo