• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 342
  • Last Modified:

I need a Macro to Clean Unwanted Data (Rows and Columns) from a Spreadsheet

I have a spreadsheet, generated by Accounting, that I want to strip of its extra Excel subtotals and spaces and reduce to a data table for use in Access.

Essentially, I want to, via a macro, Delete Rows in a certain column that start with "%", Delete Rows in a certain column that are blank, and delete columns in a certain row that start with "Q"

Can anyone show me how to do this?

Thank you
0
Rex85
Asked:
Rex85
  • 2
1 Solution
 
mvidasCommented:
Hi Rex,

Here you go, and you should be able to adapt it easily for any other future changes you have. Let me know if you have any questions.

Matt
Sub Rex85()
 Dim i As Long

 Application.ScreenUpdating = False 

'Change the row here accordingly (currently looking in row 3)
 For i = ActiveSheet.UsedRange.Columns.Count To 1 Step -1
  If Left(Cells(3, i).Text, 1) = "Q" Then
   Columns(i).Delete
  End If
 Next
 
 'Change the column here according (currently looking at column D)
 For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
  If Left(Range("D" & i).Text, 1) = "%" Then
   Rows(i).Delete
  End If
 Next
 
 'look in the used cells in a column and delete blank columns
 For i = ActiveSheet.UsedRange.Columns.Count To 1 Step -1
  If Application.WorksheetFunction.CountA(Intersect(Columns(i), ActiveSheet.UsedRange)) = 0 Then
   Columns(i).Delete
  End If
 Next

 Application.ScreenUpdating = True
End Sub

Open in new window

EDIT: toggled screen updating for less flicker, in case you didn't know to add it.
0
 
Alexander Eßer [Alex140181]Software DeveloperCommented:
Not as elegant as mvidas' solution, but maybe you want to give it a shot ;-)

Option Explicit

Sub cleanup()

Dim i, row As Long
Dim colummn As Long
Dim str_array() As String
Dim range_str As String

    ReDim str_array(0)
    row = 1
    
    Do While Cells(row, 1) <> "" ' here column 1 is used -> should be a column that is not empty throughout the entire sheet
    
        For i = 1 To 3 ' assuming the columns are fixed length, otherwise max column count has to be calculated per row
        
            If Mid(Cells(row, i), 1, 1) = "%" Or Mid(Cells(row, i), 1, 1) = "Q" Or Cells(row, i) = "" Then
                
                str_array(UBound(str_array)) = row & ":" & row
                ReDim Preserve str_array(UBound(str_array) + 1)
                
                Exit For
            
            End If
        
        Next i
        
        row = row + 1
    
    Loop
    
    range_str = Join(str_array, ",")
    range_str = Mid(range_str, 1, Len(range_str) - 1)
    
    Range(range_str).Delete

End Sub

Open in new window

0
 
Rex85Author Commented:
Thank you both. I had just successfully tried mvidas' solution and was getting ready to close.

Thanks

Rex
0
 
Rex85Author Commented:
Fantastic. Worked perfectly for what i asked.

Thank you!

Rex
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now