Solved

Excel VBA Selecting Rows

Posted on 2011-02-23
9
181 Views
Last Modified: 2012-05-11
Hello,

Starting at cell A2 I need to go row by row looking for todays date in column A. All columns that have todays date should be selected and copied to another workbook. After that I need to have several columns added and some counted.  Depending on the day there could be 100 records or none. Finally I need to have the file saved as a text, CSV, or XML file.  

Thanks for the help as always.  Please let me know of any questions.
0
Comment
Question by:jvera524
  • 5
  • 4
9 Comments
 
LVL 22

Expert Comment

by:rspahitz
ID: 34965322
You don't need VBA to perform these task, although if you're doing them over and over, it may make sense.

For one thing, I would turn on filtering and only show today's date.  Then it's easy to select all and copy to another worksheet.
Then it's easy to go to that sheet and sum up the desired columns and count them then save the sheet as CSV.

I guess you could even record a macro with the steps and then you can run the macro every day.
  Should I show you the steps?
0
 

Author Comment

by:jvera524
ID: 34965359
Yes over and over. If it were the same number of records each time then I understand what you stated above, but the number of records varies from day to day. This is why I thought a while or for loop would be needed to scan through column A looking for today's date.
0
 
LVL 22

Accepted Solution

by:
rspahitz earned 500 total points
ID: 34965590
It looks like this code could do the job, except that it doesn't save at the moment, and assumes that Sheet2 is always blank.

 
Sub ExportDailyData()
    SelectTodaysItems
    CopyToBlankSheet
    AppendTotals
    SaveSheet
End Sub

Private Sub SelectTodaysItems()
    Range("A1").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$E$16").AutoFilter Field:=1, Operator:= _
        xlFilterValues, Criteria2:=Array(2, Format(Now(), "mm/dd/yyyy"))
    Range("A1:E16").Select
    Range("A2").Activate
End Sub

Private Sub CopyToBlankSheet()
    Dim strSheetName As String
    strSheetName = "Sheet2"
    
    Selection.Copy
    Sheets(strSheetName).Select
    Range("A1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    
    Range("A1").Select
    Selection.End(xlDown).Select
End Sub

Private Sub AppendTotals()
    Dim iFirstBlankRow As Integer
    
    iFirstBlankRow = Selection.Row + 1
    
    Cells(iFirstBlankRow, 2).FormulaR1C1 = "=SUM(r2c:R[-1]C)"
    Range("B" & iFirstBlankRow).AutoFill Destination:=Range("B" & iFirstBlankRow & ":E" & iFirstBlankRow), Type:=xlFillDefault
    Cells(iFirstBlankRow, 1).FormulaR1C1 = "=COUNT(r2c:R[-1]C)"
End Sub

Private Sub SaveSheet()
' TBD
End Sub

Open in new window

 
to run, paste this into a VB module, then Alt-F8 to see the macros and select ExportDailyData

Make sure you start from the sheet that has the dates.
0
Does Powershell have you tied up in knots?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

 

Author Comment

by:jvera524
ID: 34965628
Also I need to change something from above.  Todays date is not important. What I need to grab is the new records added from day to day.  So if yesterday there were 1000 records and today there are 1020 records only the 20 new records should be grabbed.  I was thinking of having the number of records stored in a variable daily and then next day when the new records are added it gets the new total and based on the difference it grabs the new records which are always at the top of spreadsheet starting on row 2.
0
 
LVL 22

Expert Comment

by:rspahitz
ID: 34965678
I suggest marking the ones that have been successfully processed then ignoring them

For example, add a new column (inserted into B?) and put an X to indicate that it's completed...this should be done when the macro completes.
0
 

Author Comment

by:jvera524
ID: 34965723
The Private Sub SelectTodaysItems() seems to always assume the number of records is the same.  Am I correct in reading?  If so, it will not work if the number of records changes from day to day and some days there are none.

I understand the most recent suggestion. Thanks
0
 
LVL 22

Expert Comment

by:rspahitz
ID: 34965846
It filters based on today's date, so if you are always running it today, it will always be the same unless new items are added with today's date.
0
 

Author Comment

by:jvera524
ID: 34965891
I apologize for the confusion on my part.  I checked it today. There were new records some of which do not have todays date but I would still want to grab them.

0
 
LVL 22

Expert Comment

by:rspahitz
ID: 34965925
So how do you know which have been processed and which don't ?  Without that info, this task cannot work effectively.
0

Featured Post

Is Your AD Toolbox Looking More Like a Toybox?

Managing Active Directory can get complicated.  Often, the native tools for managing AD are just not up to the task.  The largest Active Directory installations in the world have relied on one tool to manage their day-to-day administration tasks: Hyena. Start your trial today.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Vlookup for in-between dates 4 38
excel 2016 program to loop through scripts 6 35
Data in Rows to be converted into single row 9 40
Excel VBA User Form Help 21 28
This is about my first experience with programming Arduino.
Do you use a spreadsheet like Microsoft's Excel?  Have you ever wanted to link out to a non excel file on your computer or network drive?  This is the way I found to do it!
Graphs within dashboards are meant to be dynamic, representing data from a period of time that will change each time the dashboard is updated with new data. Rather than update each graph to point to a different set within a static set of data, t…
This Micro Tutorial will demonstrate in Google Sheets how to use the HYPERLINK function to create live links inside your spreadsheet.

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question