VB Macro to Sort Columns in multiple workbooks

Posted on 2013-06-10
Last Modified: 2013-06-11
I have an excel workbook with about 48 sheets. About 40 of those sheets are formatted the same way, and I need to sort from C2 to the end, E2 to the end, and G2 to the end. I have tried recording a macro, but it only works for one sheet, and it's hard to adapt because each sheet has a range of different length. After the sort, I then need to hide columns A,B,H,L, and M. Thanks for all the help!
Question by:indigo6
  • 3
  • 3
LVL 14

Expert Comment

ID: 39236537
Are the columns in any one sheet all of the same length? If not, can you tell which is the longest column?
LVL 92

Expert Comment

by:Patrick Matthews
ID: 39236552
A sample file would be helpful

Author Comment

ID: 39238582
The column lengths always vary. The longest column is 1319 rows long.
ScreenConnect 6.0 Free Trial

Want empowering updates? You're in the right place! Discover new features in ScreenConnect 6.0, based on partner feedback, to keep you business operating smoothly and optimally (the way it should be). Explore all of the extras and enhancements for yourself!

LVL 92

Expert Comment

by:Patrick Matthews
ID: 39238731
The column lengths always vary.

That's not a worry at all.  However...

I have an excel workbook with about 48 sheets. About 40 of those sheets are formatted the same way, ...

Which have to be sorted?  All worksheets?  Only the ~40 or so?  If all, then what sorting instructions should be used for the ~8 or so that are different?

...and I need to sort from C2 to the end, E2 to the end, and G2 to the end.

What columns on the worksheets are actually populated?  Are there header rows, or not?

This is why I asked for a sample file :)

Author Comment

ID: 39238752
Let me see if I can make a sample file. It's private data, so I'm a bit leery about it.

Also, I can move the sheets that don't need to be sorted to another workbook, so let's go on the assumption that all sheets need to be sorted.

Yes, there are header rows. Columns A-O have data.

LVL 92

Accepted Solution

Patrick Matthews earned 500 total points
ID: 39238856
OK, assuming that Row 1 is where your headings are...

Sub SortThemAll()
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        With ws
            .Columns.Hidden = False
            .Rows.Hidden = False
            .[a1].Sort Key1:=.[c1], Key2:=.[e1], Key3:=.[g1], Order1:=xlAscending, _
                Order2:=xlAscending, Order3:=xlAscending, Header:=xlYes
            .Columns("A:B").Hidden = True
            .Columns("H:H").Hidden = True
            .Columns("L:M").Hidden = True
        End With
    MsgBox "Done"
End Sub

Open in new window


Author Closing Comment

ID: 39239706
This is perfect! Nice separation of statements to make it easy to edit for future use too!

Featured Post

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

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

Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
This Micro Tutorial demonstrate the bugs in Microsoft Excel for Mac with Pivot Charts.
This Micro Tutorial will demonstrate in Microsoft Excel how to add style and sexy appeal to horizontal bar charts.

778 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