Simple MultiColumn Sorting

  • Thread starter Thread starter Jaemun
  • Start date Start date
J

Jaemun

Hello ppl,

Please help to simplify my following macros. The sorting event should be in
order and
must not be loop.

Sub MultiColumn_Sorting()
Application.screenupdating = false
Range("A3:U52").Select

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("A3"), Order2:=xlDescending, _
Header:=xlGuess, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("Q3"), Order2:=xlDescending, _
Key3:=Range("R3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("P3"), Order2:=xlDescending, _
Key3:=Range("Q3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("O3"), Order2:=xlDescending, _
Key3:=Range("P3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("N3"), Order2:=xlDescending, _
Key3:=Range("O3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("M3"), Order2:=xlDescending, _
Key3:=Range("N3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("L3"), Order2:=xlDescending, _
Key3:=Range("M3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("K3"), Order2:=xlDescending, _
Key3:=Range("L3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("J3"), Order2:=xlDescending, _
Key3:=Range("K3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom

End Sub

Thanks in advance.
 
What are you trying to accomplish? Each sort refers to cell X3, that
isn't in the selected range.
 
Hi Debra Dalgleish,
First of all, many thanks for your respond.
There was a mistake in the range given which is suppose to be as follows:-

Sub MultiColumn_Sorting()
Application.screenupdating = false

' ----------Corrected----------
Range("A3:X52").Select

' ----------Corrected----------

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("A3"), Order2:=xlDescending, _
Header:=xlGuess, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("Q3"), Order2:=xlDescending, _
Key3:=Range("R3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("P3"), Order2:=xlDescending, _
Key3:=Range("Q3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("O3"), Order2:=xlDescending, _
Key3:=Range("P3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("N3"), Order2:=xlDescending, _
Key3:=Range("O3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("M3"), Order2:=xlDescending, _
Key3:=Range("N3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("L3"), Order2:=xlDescending, _
Key3:=Range("M3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("K3"), Order2:=xlDescending, _
Key3:=Range("L3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("J3"), Order2:=xlDescending, _
Key3:=Range("K3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom

End Sub

Thank you again.
Jaemun
 
For someone to help you simplify the code, you still need to explain
what you are trying to accomplish. The same columns seem to be
repeatedly sorted in the code, which is confusing.
What sort order do you need in the final result?
 
Hi again,

The effected area should be within range("A3:X52"). But the main target
column to sort the area is Column "X" while Column "J,K,L,M,N,O,P,Q,R,A" are
the next sort order (This is the rules).

The following are an exact example that the macro should accomplished the
sort order.

A B C J K L M N O P
Q R X

2 01 James 6 5 5 5 5 5
5 5 5 46
2 02 David 5 6 5 5 5 5
5 5 5 46
2 03 Harry 5 5 6 5 5 5
5 5 5 46
2 04 Steve 5 5 5 6 5 5
5 5 5 46
2 05 Peter 5 5 5 5 6 5
5 5 5 46
2 06 Jack 5 5 5 5 5 6
5 5 5 46
2 07 Jacky 5 5 5 5 5 5
6 5 5 46
2 08 Philip 5 5 5 5 5 5
5 6 5 46
2 09 Mike 5 5 5 5 5 5
5 5 6 46
5 10 George 5 5 5 5 5 5
5 5 5 45
3 11 Garry 5 5 5 5 5 5
5 5 5 45
2 12 Kent 5 5 5 5 5 5
5 5 5 45

To do that kind of job, I've recorded a macros and then manipulated them as
in the
following sub:-

Sub MultiColumn_Sorting()
Application.ScreenUpdating = False
Range("A3:X52").Select

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("A3"), Order2:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("Q3"), Order2:=xlDescending, _
Key3:=Range("R3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("P3"), Order2:=xlDescending, _
Key3:=Range("Q3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("O3"), Order2:=xlDescending, _
Key3:=Range("P3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("N3"), Order2:=xlDescending, _
Key3:=Range("O3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("M3"), Order2:=xlDescending, _
Key3:=Range("N3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("L3"), Order2:=xlDescending, _
Key3:=Range("M3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("K3"), Order2:=xlDescending, _
Key3:=Range("L3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom

Selection.Sort _
Key1:=Range("X3"), Order1:=xlDescending, _
Key2:=Range("J3"), Order2:=xlDescending, _
Key3:=Range("K3"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom
End Sub
 
You can sort the columns in four groups, in order of least importance.

First, sort QRA, then NOP, then KLM, then XJ.

Use the macro recorder to create the code as you do the sort manually.
 
Is there any other way to simplify the codes to make is shorter like
repeating the event or whatever (I have no idea how)?
 
You could use a With -- End With for the range, but that wouldn't make
it much shorter or faster. Maybe your teacher could help.
 
Thanks for the help Debra,

I guest what I'm up to is not really neccessary, but, I'm very happy and
appreciate your help with your suggestions which is much simple compare to
mine.

Thanks again,
 
Back
Top