Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.misc
external usenet poster
 
Posts: 204
Default Sorting rows of data of varying lengths

I think I've left the hardest question to last. See data below
H I J K L M
N O P.....
Name No lap1 lap2 lap3 lap4 lap5
lap6........

5 Name / Name 100 0:00:08
6 Name / Name 101 0:00:10 0:00:18
7 Name / Name 102 0:00:11 0:00:19 0:00:19 0:00:25 0:00:27
8 Name / Name 103 0:00:13 0:00:21 0:00:21 0:00:27 0:00:31
9 Name / Name 104 0:00:16 0:00:24 0:00:24 0:00:29 0:00:29 0:00:33
10 105
11 106
..
..
..

I need to sort the riders to determine places. The H,I.... and 5,6... are
cell references (and do not change) if that helps. The number of laps any one
rider may have completed in a race varies from 0 to unlimited. Riders are
ranked by number of laps completed and then finish time on their last lap if
number of laps is equal.

There are 2 ways to determine the number of rows for sorting that I can see.
1) determine the number of rider names till the first blank
2) just sort every rider number anyway even if unused. The maximum rider
number is 199 (row 104).

My hassle is determining the max number of columns for the range and then
sorting the rows based on what could realistically be 30 columns of times.

Thanks
  #2   Report Post  
Posted to microsoft.public.excel.misc
external usenet poster
 
Posts: 9,101
Default Sorting rows of data of varying lengths

Put in an auxilary column the number of columns with data. If lap 1 starts
in column J then in row 5

=countA(J5:P5)

Then copy the formula down the column. Now sort this new column in
descending order. The new column will tell you the number of laps completed
since countA is the count of non blank cells.

"NDBC" wrote:

I think I've left the hardest question to last. See data below
H I J K L M
N O P.....
Name No lap1 lap2 lap3 lap4 lap5
lap6........

5 Name / Name 100 0:00:08
6 Name / Name 101 0:00:10 0:00:18
7 Name / Name 102 0:00:11 0:00:19 0:00:19 0:00:25 0:00:27
8 Name / Name 103 0:00:13 0:00:21 0:00:21 0:00:27 0:00:31
9 Name / Name 104 0:00:16 0:00:24 0:00:24 0:00:29 0:00:29 0:00:33
10 105
11 106
.
.
.

I need to sort the riders to determine places. The H,I.... and 5,6... are
cell references (and do not change) if that helps. The number of laps any one
rider may have completed in a race varies from 0 to unlimited. Riders are
ranked by number of laps completed and then finish time on their last lap if
number of laps is equal.

There are 2 ways to determine the number of rows for sorting that I can see.
1) determine the number of rider names till the first blank
2) just sort every rider number anyway even if unused. The maximum rider
number is 199 (row 104).

My hassle is determining the max number of columns for the range and then
sorting the rows based on what could realistically be 30 columns of times.

Thanks

  #3   Report Post  
Posted to microsoft.public.excel.misc
external usenet poster
 
Posts: 204
Default Sorting rows of data of varying lengths

Thanks Joel

Now I know the max number of columns. So it's 100 rows by (in this case) 7
columns (including name and rider number). How to I sort that with code.


"Joel" wrote:

Put in an auxilary column the number of columns with data. If lap 1 starts
in column J then in row 5

=countA(J5:P5)

Then copy the formula down the column. Now sort this new column in
descending order. The new column will tell you the number of laps completed
since countA is the count of non blank cells.

"NDBC" wrote:

I think I've left the hardest question to last. See data below
H I J K L M
N O P.....
Name No lap1 lap2 lap3 lap4 lap5
lap6........

5 Name / Name 100 0:00:08
6 Name / Name 101 0:00:10 0:00:18
7 Name / Name 102 0:00:11 0:00:19 0:00:19 0:00:25 0:00:27
8 Name / Name 103 0:00:13 0:00:21 0:00:21 0:00:27 0:00:31
9 Name / Name 104 0:00:16 0:00:24 0:00:24 0:00:29 0:00:29 0:00:33
10 105
11 106
.
.
.

I need to sort the riders to determine places. The H,I.... and 5,6... are
cell references (and do not change) if that helps. The number of laps any one
rider may have completed in a race varies from 0 to unlimited. Riders are
ranked by number of laps completed and then finish time on their last lap if
number of laps is equal.

There are 2 ways to determine the number of rows for sorting that I can see.
1) determine the number of rider names till the first blank
2) just sort every rider number anyway even if unused. The maximum rider
number is 199 (row 104).

My hassle is determining the max number of columns for the range and then
sorting the rows based on what could realistically be 30 columns of times.

Thanks

  #4   Report Post  
Posted to microsoft.public.excel.misc
external usenet poster
 
Posts: 9,101
Default Sorting rows of data of varying lengths

Copy the new column then paste back using Paste Special and select value to
replace the formula with a number. Then sort.

"NDBC" wrote:

Thanks Joel

Now I know the max number of columns. So it's 100 rows by (in this case) 7
columns (including name and rider number). How to I sort that with code.


"Joel" wrote:

Put in an auxilary column the number of columns with data. If lap 1 starts
in column J then in row 5

=countA(J5:P5)

Then copy the formula down the column. Now sort this new column in
descending order. The new column will tell you the number of laps completed
since countA is the count of non blank cells.

"NDBC" wrote:

I think I've left the hardest question to last. See data below
H I J K L M
N O P.....
Name No lap1 lap2 lap3 lap4 lap5
lap6........

5 Name / Name 100 0:00:08
6 Name / Name 101 0:00:10 0:00:18
7 Name / Name 102 0:00:11 0:00:19 0:00:19 0:00:25 0:00:27
8 Name / Name 103 0:00:13 0:00:21 0:00:21 0:00:27 0:00:31
9 Name / Name 104 0:00:16 0:00:24 0:00:24 0:00:29 0:00:29 0:00:33
10 105
11 106
.
.
.

I need to sort the riders to determine places. The H,I.... and 5,6... are
cell references (and do not change) if that helps. The number of laps any one
rider may have completed in a race varies from 0 to unlimited. Riders are
ranked by number of laps completed and then finish time on their last lap if
number of laps is equal.

There are 2 ways to determine the number of rows for sorting that I can see.
1) determine the number of rider names till the first blank
2) just sort every rider number anyway even if unused. The maximum rider
number is 199 (row 104).

My hassle is determining the max number of columns for the range and then
sorting the rows based on what could realistically be 30 columns of times.

Thanks

  #5   Report Post  
Posted to microsoft.public.excel.misc
external usenet poster
 
Posts: 204
Default Sorting rows of data of varying lengths

I see two problems . One, I am trying to write code for a command button to
do this so that inexperienced users don't have to do anything but click the
button. The second is the method below doesn't sort the rows with the same
number of laps. There could be 5 competitors with 6 laps, 10 with 5 laps 4
with 4 laps etc.





"Joel" wrote:

Copy the new column then paste back using Paste Special and select value to
replace the formula with a number. Then sort.

"NDBC" wrote:

Thanks Joel

Now I know the max number of columns. So it's 100 rows by (in this case) 7
columns (including name and rider number). How to I sort that with code.


"Joel" wrote:

Put in an auxilary column the number of columns with data. If lap 1 starts
in column J then in row 5

=countA(J5:P5)

Then copy the formula down the column. Now sort this new column in
descending order. The new column will tell you the number of laps completed
since countA is the count of non blank cells.

"NDBC" wrote:

I think I've left the hardest question to last. See data below
H I J K L M
N O P.....
Name No lap1 lap2 lap3 lap4 lap5
lap6........

5 Name / Name 100 0:00:08
6 Name / Name 101 0:00:10 0:00:18
7 Name / Name 102 0:00:11 0:00:19 0:00:19 0:00:25 0:00:27
8 Name / Name 103 0:00:13 0:00:21 0:00:21 0:00:27 0:00:31
9 Name / Name 104 0:00:16 0:00:24 0:00:24 0:00:29 0:00:29 0:00:33
10 105
11 106
.
.
.

I need to sort the riders to determine places. The H,I.... and 5,6... are
cell references (and do not change) if that helps. The number of laps any one
rider may have completed in a race varies from 0 to unlimited. Riders are
ranked by number of laps completed and then finish time on their last lap if
number of laps is equal.

There are 2 ways to determine the number of rows for sorting that I can see.
1) determine the number of rider names till the first blank
2) just sort every rider number anyway even if unused. The maximum rider
number is 199 (row 104).

My hassle is determining the max number of columns for the range and then
sorting the rows based on what could realistically be 30 columns of times.

Thanks



  #6   Report Post  
Posted to microsoft.public.excel.misc
external usenet poster
 
Posts: 204
Default Sorting rows of data of varying lengths

Sorry I wasn't clearer about wanting to do this with code. By sorting rows
with the same number of laps I mean sort rows with same number of laps in
ascending order based on the time it was when they finished their last lap.
(ie. fastest to slowest in each lap)

Thanks again for your help.

"NDBC" wrote:

I see two problems . One, I am trying to write code for a command button to
do this so that inexperienced users don't have to do anything but click the
button. The second is the method below doesn't sort the rows with the same
number of laps. There could be 5 competitors with 6 laps, 10 with 5 laps 4
with 4 laps etc.





"Joel" wrote:

Copy the new column then paste back using Paste Special and select value to
replace the formula with a number. Then sort.

"NDBC" wrote:

Thanks Joel

Now I know the max number of columns. So it's 100 rows by (in this case) 7
columns (including name and rider number). How to I sort that with code.


"Joel" wrote:

Put in an auxilary column the number of columns with data. If lap 1 starts
in column J then in row 5

=countA(J5:P5)

Then copy the formula down the column. Now sort this new column in
descending order. The new column will tell you the number of laps completed
since countA is the count of non blank cells.

"NDBC" wrote:

I think I've left the hardest question to last. See data below
H I J K L M
N O P.....
Name No lap1 lap2 lap3 lap4 lap5
lap6........

5 Name / Name 100 0:00:08
6 Name / Name 101 0:00:10 0:00:18
7 Name / Name 102 0:00:11 0:00:19 0:00:19 0:00:25 0:00:27
8 Name / Name 103 0:00:13 0:00:21 0:00:21 0:00:27 0:00:31
9 Name / Name 104 0:00:16 0:00:24 0:00:24 0:00:29 0:00:29 0:00:33
10 105
11 106
.
.
.

I need to sort the riders to determine places. The H,I.... and 5,6... are
cell references (and do not change) if that helps. The number of laps any one
rider may have completed in a race varies from 0 to unlimited. Riders are
ranked by number of laps completed and then finish time on their last lap if
number of laps is equal.

There are 2 ways to determine the number of rows for sorting that I can see.
1) determine the number of rider names till the first blank
2) just sort every rider number anyway even if unused. The maximum rider
number is 199 (row 104).

My hassle is determining the max number of columns for the range and then
sorting the rows based on what could realistically be 30 columns of times.

Thanks

  #7   Report Post  
Posted to microsoft.public.excel.misc
external usenet poster
 
Posts: 913
Default Sorting rows of data of varying lengths

On Fri, 3 Jul 2009 18:20:01 -0700, NDBC
wrote:


I think I've left the hardest question to last. See data below
H I J K L M
N O P.....
Name No lap1 lap2 lap3 lap4 lap5
lap6........

5 Name / Name 100 0:00:08
6 Name / Name 101 0:00:10 0:00:18
7 Name / Name 102 0:00:11 0:00:19 0:00:19 0:00:25 0:00:27
8 Name / Name 103 0:00:13 0:00:21 0:00:21 0:00:27 0:00:31
9 Name / Name 104 0:00:16 0:00:24 0:00:24 0:00:29 0:00:29 0:00:33
10 105
11 106
.
.
.

I need to sort the riders to determine places. The H,I.... and 5,6... are
cell references (and do not change) if that helps. The number of laps any one
rider may have completed in a race varies from 0 to unlimited. Riders are
ranked by number of laps completed and then finish time on their last lap if
number of laps is equal.

There are 2 ways to determine the number of rows for sorting that I can see.
1) determine the number of rider names till the first blank
2) just sort every rider number anyway even if unused. The maximum rider
number is 199 (row 104).

My hassle is determining the max number of columns for the range and then
sorting the rows based on what could realistically be 30 columns of times.

Thanks




Sub sort_laps()
With ActiveWorkbook.Worksheets("Sheet2")
maxlap = .Range("K4").End(xlToRight).Column - .Range("J4").Column
For i = 1 To maxlap
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=Range("J5").Offset(100, i) _
, SortOn:=xlSortOnValues, Order:=xlAscending, _
CustomOrder:="0,1,2,3,4,5,6,7,8,9,"" """, _
DataOption:=xlSortNormal
.Sort.SetRange Range("H5:H104").Resize(, maxlap + 3)
.Sort.Header = xlNo
.Sort.MatchCase = False
.Sort.Orientation = xlTopToBottom
.Sort.SortMethod = xlPinYin
.Sort.Apply
Next i
End With
End Sub

The macro first finds the total number of laps, note that there must
be a blank cell to the right of e.g. "lap6" if there are 6 laps.
Then the data is sorted on each lap, starting from lap1.
The "CustomOrder" part makes the sorting put the blanks last.

Macro is only tested in Excel 2007.

Hope this helps / Lars-Åke


  #8   Report Post  
Posted to microsoft.public.excel.misc
external usenet poster
 
Posts: 204
Default Sorting rows of data of varying lengths

I've got 2003 so didn't try it but it gave me an idea how it is done. Thanks


"Lars-Ã…ke Aspelin" wrote:

On Fri, 3 Jul 2009 18:20:01 -0700, NDBC
wrote:


I think I've left the hardest question to last. See data below
H I J K L M
N O P.....
Name No lap1 lap2 lap3 lap4 lap5
lap6........

5 Name / Name 100 0:00:08
6 Name / Name 101 0:00:10 0:00:18
7 Name / Name 102 0:00:11 0:00:19 0:00:19 0:00:25 0:00:27
8 Name / Name 103 0:00:13 0:00:21 0:00:21 0:00:27 0:00:31
9 Name / Name 104 0:00:16 0:00:24 0:00:24 0:00:29 0:00:29 0:00:33
10 105
11 106
.
.
.

I need to sort the riders to determine places. The H,I.... and 5,6... are
cell references (and do not change) if that helps. The number of laps any one
rider may have completed in a race varies from 0 to unlimited. Riders are
ranked by number of laps completed and then finish time on their last lap if
number of laps is equal.

There are 2 ways to determine the number of rows for sorting that I can see.
1) determine the number of rider names till the first blank
2) just sort every rider number anyway even if unused. The maximum rider
number is 199 (row 104).

My hassle is determining the max number of columns for the range and then
sorting the rows based on what could realistically be 30 columns of times.

Thanks




Sub sort_laps()
With ActiveWorkbook.Worksheets("Sheet2")
maxlap = .Range("K4").End(xlToRight).Column - .Range("J4").Column
For i = 1 To maxlap
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=Range("J5").Offset(100, i) _
, SortOn:=xlSortOnValues, Order:=xlAscending, _
CustomOrder:="0,1,2,3,4,5,6,7,8,9,"" """, _
DataOption:=xlSortNormal
.Sort.SetRange Range("H5:H104").Resize(, maxlap + 3)
.Sort.Header = xlNo
.Sort.MatchCase = False
.Sort.Orientation = xlTopToBottom
.Sort.SortMethod = xlPinYin
.Sort.Apply
Next i
End With
End Sub

The macro first finds the total number of laps, note that there must
be a blank cell to the right of e.g. "lap6" if there are 6 laps.
Then the data is sorted on each lap, starting from lap1.
The "CustomOrder" part makes the sorting put the blanks last.

Macro is only tested in Excel 2007.

Hope this helps / Lars-Ã…ke



  #9   Report Post  
Posted to microsoft.public.excel.misc
external usenet poster
 
Posts: 913
Default Sorting rows of data of varying lengths

It seems that CustomFormat was not actually needed.
I have rewritten the macro. It now works in Excel2002 and Excel2007.

Sub sort_laps()
laps = Range("K4").End(xlToRight).Column - Range("K4").Column + 1
rovs = 100
Range("H5:H5").Resize(rovs, laps + 3).Select
For i = 1 To laps
Selection.Sort Key1:=Range("J5").Offset(0, i), _
Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Next i
End Sub

Hope this works also for your version of Excel / Lars-Åke


On Sat, 4 Jul 2009 02:06:01 -0700, NDBC
wrote:


I've got 2003 so didn't try it but it gave me an idea how it is done. Thanks


"Lars-Åke Aspelin" wrote:

On Fri, 3 Jul 2009 18:20:01 -0700, NDBC
wrote:


I think I've left the hardest question to last. See data below
H I J K L M
N O P.....
Name No lap1 lap2 lap3 lap4 lap5
lap6........

5 Name / Name 100 0:00:08
6 Name / Name 101 0:00:10 0:00:18
7 Name / Name 102 0:00:11 0:00:19 0:00:19 0:00:25 0:00:27
8 Name / Name 103 0:00:13 0:00:21 0:00:21 0:00:27 0:00:31
9 Name / Name 104 0:00:16 0:00:24 0:00:24 0:00:29 0:00:29 0:00:33
10 105
11 106
.
.
.

I need to sort the riders to determine places. The H,I.... and 5,6... are
cell references (and do not change) if that helps. The number of laps any one
rider may have completed in a race varies from 0 to unlimited. Riders are
ranked by number of laps completed and then finish time on their last lap if
number of laps is equal.

There are 2 ways to determine the number of rows for sorting that I can see.
1) determine the number of rider names till the first blank
2) just sort every rider number anyway even if unused. The maximum rider
number is 199 (row 104).

My hassle is determining the max number of columns for the range and then
sorting the rows based on what could realistically be 30 columns of times.

Thanks




Sub sort_laps()
With ActiveWorkbook.Worksheets("Sheet2")
maxlap = .Range("K4").End(xlToRight).Column - .Range("J4").Column
For i = 1 To maxlap
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=Range("J5").Offset(100, i) _
, SortOn:=xlSortOnValues, Order:=xlAscending, _
CustomOrder:="0,1,2,3,4,5,6,7,8,9,"" """, _
DataOption:=xlSortNormal
.Sort.SetRange Range("H5:H104").Resize(, maxlap + 3)
.Sort.Header = xlNo
.Sort.MatchCase = False
.Sort.Orientation = xlTopToBottom
.Sort.SortMethod = xlPinYin
.Sort.Apply
Next i
End With
End Sub

The macro first finds the total number of laps, note that there must
be a blank cell to the right of e.g. "lap6" if there are 6 laps.
Then the data is sorted on each lap, starting from lap1.
The "CustomOrder" part makes the sorting put the blanks last.

Macro is only tested in Excel 2007.

Hope this helps / Lars-Åke




  #10   Report Post  
Posted to microsoft.public.excel.misc
external usenet poster
 
Posts: 9,101
Default Sorting rows of data of varying lengths

You just need to sort on two columns. first the number of laps completed
descending order and then the last lap time in ascending order.

"NDBC" wrote:

I've got 2003 so didn't try it but it gave me an idea how it is done. Thanks


"Lars-Ã…ke Aspelin" wrote:

On Fri, 3 Jul 2009 18:20:01 -0700, NDBC
wrote:


I think I've left the hardest question to last. See data below
H I J K L M
N O P.....
Name No lap1 lap2 lap3 lap4 lap5
lap6........

5 Name / Name 100 0:00:08
6 Name / Name 101 0:00:10 0:00:18
7 Name / Name 102 0:00:11 0:00:19 0:00:19 0:00:25 0:00:27
8 Name / Name 103 0:00:13 0:00:21 0:00:21 0:00:27 0:00:31
9 Name / Name 104 0:00:16 0:00:24 0:00:24 0:00:29 0:00:29 0:00:33
10 105
11 106
.
.
.

I need to sort the riders to determine places. The H,I.... and 5,6... are
cell references (and do not change) if that helps. The number of laps any one
rider may have completed in a race varies from 0 to unlimited. Riders are
ranked by number of laps completed and then finish time on their last lap if
number of laps is equal.

There are 2 ways to determine the number of rows for sorting that I can see.
1) determine the number of rider names till the first blank
2) just sort every rider number anyway even if unused. The maximum rider
number is 199 (row 104).

My hassle is determining the max number of columns for the range and then
sorting the rows based on what could realistically be 30 columns of times.

Thanks




Sub sort_laps()
With ActiveWorkbook.Worksheets("Sheet2")
maxlap = .Range("K4").End(xlToRight).Column - .Range("J4").Column
For i = 1 To maxlap
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=Range("J5").Offset(100, i) _
, SortOn:=xlSortOnValues, Order:=xlAscending, _
CustomOrder:="0,1,2,3,4,5,6,7,8,9,"" """, _
DataOption:=xlSortNormal
.Sort.SetRange Range("H5:H104").Resize(, maxlap + 3)
.Sort.Header = xlNo
.Sort.MatchCase = False
.Sort.Orientation = xlTopToBottom
.Sort.SortMethod = xlPinYin
.Sort.Apply
Next i
End With
End Sub

The macro first finds the total number of laps, note that there must
be a blank cell to the right of e.g. "lap6" if there are 6 laps.
Then the data is sorted on each lap, starting from lap1.
The "CustomOrder" part makes the sorting put the blanks last.

Macro is only tested in Excel 2007.

Hope this helps / Lars-Ã…ke





  #11   Report Post  
Posted to microsoft.public.excel.misc
external usenet poster
 
Posts: 204
Default Sorting rows of data of varying lengths

For those tht may come across this problem. This is what I did. Process.
1) sort whole range by number of laps done (in column I)
2) count how many riders had done each amount of laps and sort them in sub
groups based on last lap time. (ie. if first 5 riders had done 6 laps then
sort the first 5 rows, if next 3 riders had done 5 laps sort the next 3 rows
etc).

My code for what it's worth (based on my level of experience it might be
rough but it works)

'A Grade
Worksheets("A Grade").Range("G5:IV104").Sort Key1:=Worksheets("A
Grade").Range("I5"), Order1:=xlDescending, _
MatchCase:=False, Orientation:=xlSortColumns, DataOption1:=xlSortNormal

MaxLap = Worksheets("A Grade").Range("I5")
Rdone = 0
If MaxLap 0 Then
For l = MaxLap To 1
lapnums = Worksheets("A Grade").Range("I5:I104")
Onlap = Application.CountIf(lapnums, l)
If Onlap 0 Then
tl = 5 + Rdone
br = 4 + Onlap + Rdone
Worksheets("A Grade").Range("G" & tl & ":IV" & br).Sort Key1:=Range("i" +
Onlap & tl), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlSortColumns,
DataOption1:=xlSortNormal
Rdone = Rdone + Onlap
End If
Next l
End If


Thanks for all the thoughts. It gave me a process.

"Joel" wrote:

You just need to sort on two columns. first the number of laps completed
descending order and then the last lap time in ascending order.

"NDBC" wrote:

I've got 2003 so didn't try it but it gave me an idea how it is done. Thanks


"Lars-Ã…ke Aspelin" wrote:

On Fri, 3 Jul 2009 18:20:01 -0700, NDBC
wrote:


I think I've left the hardest question to last. See data below
H I J K L M
N O P.....
Name No lap1 lap2 lap3 lap4 lap5
lap6........

5 Name / Name 100 0:00:08
6 Name / Name 101 0:00:10 0:00:18
7 Name / Name 102 0:00:11 0:00:19 0:00:19 0:00:25 0:00:27
8 Name / Name 103 0:00:13 0:00:21 0:00:21 0:00:27 0:00:31
9 Name / Name 104 0:00:16 0:00:24 0:00:24 0:00:29 0:00:29 0:00:33
10 105
11 106
.
.
.

I need to sort the riders to determine places. The H,I.... and 5,6... are
cell references (and do not change) if that helps. The number of laps any one
rider may have completed in a race varies from 0 to unlimited. Riders are
ranked by number of laps completed and then finish time on their last lap if
number of laps is equal.

There are 2 ways to determine the number of rows for sorting that I can see.
1) determine the number of rider names till the first blank
2) just sort every rider number anyway even if unused. The maximum rider
number is 199 (row 104).

My hassle is determining the max number of columns for the range and then
sorting the rows based on what could realistically be 30 columns of times.

Thanks



Sub sort_laps()
With ActiveWorkbook.Worksheets("Sheet2")
maxlap = .Range("K4").End(xlToRight).Column - .Range("J4").Column
For i = 1 To maxlap
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=Range("J5").Offset(100, i) _
, SortOn:=xlSortOnValues, Order:=xlAscending, _
CustomOrder:="0,1,2,3,4,5,6,7,8,9,"" """, _
DataOption:=xlSortNormal
.Sort.SetRange Range("H5:H104").Resize(, maxlap + 3)
.Sort.Header = xlNo
.Sort.MatchCase = False
.Sort.Orientation = xlTopToBottom
.Sort.SortMethod = xlPinYin
.Sort.Apply
Next i
End With
End Sub

The macro first finds the total number of laps, note that there must
be a blank cell to the right of e.g. "lap6" if there are 6 laps.
Then the data is sorted on each lap, starting from lap1.
The "CustomOrder" part makes the sorting put the blanks last.

Macro is only tested in Excel 2007.

Hope this helps / Lars-Ã…ke



  #12   Report Post  
Posted to microsoft.public.excel.misc
external usenet poster
 
Posts: 9,101
Default Sorting rows of data of varying lengths

I cheanged you code a little to make it easier to follow. I used a
different method to determine the rows where the number of laps were the
same. I also sorted the entire row which is more efficient then sorting on
specific columns.


Sub test()

'A Grade
With Worksheets("A Grade")
.Range("A" & Rows.Count).End(xlUp).Row
.Rows("5:" & LastRow).Sort _
Key1:=.Range("I5"), _
Order1:=xlDescending, _
header:=xlNo

RowCount = 5
Start = RowCount
Do While .Range("I" & RowCount) < 0
'check if number row completed is different
'between two row
If .Range("I" & RowCount) < .Range("I" & (RowCount + 1)) Then
LastCol = .Cells(RowCount, Columns.Count).End(xlToLeft).Column
.Rows(Start & ":" & RowCount).Sort _
Key1:=.Cells(Start, LastCol), _
Order1:=xlDescending, _
header:=xlNo

Start = RowCount + 1
End If
RowCount = RowCount + 1
Loop
End With

End Sub



"NDBC" wrote:

For those tht may come across this problem. This is what I did. Process.
1) sort whole range by number of laps done (in column I)
2) count how many riders had done each amount of laps and sort them in sub
groups based on last lap time. (ie. if first 5 riders had done 6 laps then
sort the first 5 rows, if next 3 riders had done 5 laps sort the next 3 rows
etc).

My code for what it's worth (based on my level of experience it might be
rough but it works)

'A Grade
Worksheets("A Grade").Range("G5:IV104").Sort Key1:=Worksheets("A
Grade").Range("I5"), Order1:=xlDescending, _
MatchCase:=False, Orientation:=xlSortColumns, DataOption1:=xlSortNormal

MaxLap = Worksheets("A Grade").Range("I5")
Rdone = 0
If MaxLap 0 Then
For l = MaxLap To 1
lapnums = Worksheets("A Grade").Range("I5:I104")
Onlap = Application.CountIf(lapnums, l)
If Onlap 0 Then
tl = 5 + Rdone
br = 4 + Onlap + Rdone
Worksheets("A Grade").Range("G" & tl & ":IV" & br).Sort Key1:=Range("i" +
Onlap & tl), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlSortColumns,
DataOption1:=xlSortNormal
Rdone = Rdone + Onlap
End If
Next l
End If


Thanks for all the thoughts. It gave me a process.

"Joel" wrote:

You just need to sort on two columns. first the number of laps completed
descending order and then the last lap time in ascending order.

"NDBC" wrote:

I've got 2003 so didn't try it but it gave me an idea how it is done. Thanks


"Lars-Ã…ke Aspelin" wrote:

On Fri, 3 Jul 2009 18:20:01 -0700, NDBC
wrote:


I think I've left the hardest question to last. See data below
H I J K L M
N O P.....
Name No lap1 lap2 lap3 lap4 lap5
lap6........

5 Name / Name 100 0:00:08
6 Name / Name 101 0:00:10 0:00:18
7 Name / Name 102 0:00:11 0:00:19 0:00:19 0:00:25 0:00:27
8 Name / Name 103 0:00:13 0:00:21 0:00:21 0:00:27 0:00:31
9 Name / Name 104 0:00:16 0:00:24 0:00:24 0:00:29 0:00:29 0:00:33
10 105
11 106
.
.
.

I need to sort the riders to determine places. The H,I.... and 5,6... are
cell references (and do not change) if that helps. The number of laps any one
rider may have completed in a race varies from 0 to unlimited. Riders are
ranked by number of laps completed and then finish time on their last lap if
number of laps is equal.

There are 2 ways to determine the number of rows for sorting that I can see.
1) determine the number of rider names till the first blank
2) just sort every rider number anyway even if unused. The maximum rider
number is 199 (row 104).

My hassle is determining the max number of columns for the range and then
sorting the rows based on what could realistically be 30 columns of times.

Thanks



Sub sort_laps()
With ActiveWorkbook.Worksheets("Sheet2")
maxlap = .Range("K4").End(xlToRight).Column - .Range("J4").Column
For i = 1 To maxlap
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=Range("J5").Offset(100, i) _
, SortOn:=xlSortOnValues, Order:=xlAscending, _
CustomOrder:="0,1,2,3,4,5,6,7,8,9,"" """, _
DataOption:=xlSortNormal
.Sort.SetRange Range("H5:H104").Resize(, maxlap + 3)
.Sort.Header = xlNo
.Sort.MatchCase = False
.Sort.Orientation = xlTopToBottom
.Sort.SortMethod = xlPinYin
.Sort.Apply
Next i
End With
End Sub

The macro first finds the total number of laps, note that there must
be a blank cell to the right of e.g. "lap6" if there are 6 laps.
Then the data is sorted on each lap, starting from lap1.
The "CustomOrder" part makes the sorting put the blanks last.

Macro is only tested in Excel 2007.

Hope this helps / Lars-Ã…ke



  #13   Report Post  
Posted to microsoft.public.excel.misc
external usenet poster
 
Posts: 913
Default Sorting rows of data of varying lengths

If you do just those two sorts, how will you then make sure that the
display order is correct for players that are not among those who have
completed the same number of laps, but not the maximum number of laps?

Lars-Åke


On Sat, 4 Jul 2009 03:48:01 -0700, Joel
wrote:


You just need to sort on two columns. first the number of laps completed
descending order and then the last lap time in ascending order.

"NDBC" wrote:

I've got 2003 so didn't try it but it gave me an idea how it is done. Thanks


"Lars-Åke Aspelin" wrote:

On Fri, 3 Jul 2009 18:20:01 -0700, NDBC
wrote:


I think I've left the hardest question to last. See data below
H I J K L M
N O P.....
Name No lap1 lap2 lap3 lap4 lap5
lap6........

5 Name / Name 100 0:00:08
6 Name / Name 101 0:00:10 0:00:18
7 Name / Name 102 0:00:11 0:00:19 0:00:19 0:00:25 0:00:27
8 Name / Name 103 0:00:13 0:00:21 0:00:21 0:00:27 0:00:31
9 Name / Name 104 0:00:16 0:00:24 0:00:24 0:00:29 0:00:29 0:00:33
10 105
11 106
.
.
.

I need to sort the riders to determine places. The H,I.... and 5,6... are
cell references (and do not change) if that helps. The number of laps any one
rider may have completed in a race varies from 0 to unlimited. Riders are
ranked by number of laps completed and then finish time on their last lap if
number of laps is equal.

There are 2 ways to determine the number of rows for sorting that I can see.
1) determine the number of rider names till the first blank
2) just sort every rider number anyway even if unused. The maximum rider
number is 199 (row 104).

My hassle is determining the max number of columns for the range and then
sorting the rows based on what could realistically be 30 columns of times.

Thanks



Sub sort_laps()
With ActiveWorkbook.Worksheets("Sheet2")
maxlap = .Range("K4").End(xlToRight).Column - .Range("J4").Column
For i = 1 To maxlap
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=Range("J5").Offset(100, i) _
, SortOn:=xlSortOnValues, Order:=xlAscending, _
CustomOrder:="0,1,2,3,4,5,6,7,8,9,"" """, _
DataOption:=xlSortNormal
.Sort.SetRange Range("H5:H104").Resize(, maxlap + 3)
.Sort.Header = xlNo
.Sort.MatchCase = False
.Sort.Orientation = xlTopToBottom
.Sort.SortMethod = xlPinYin
.Sort.Apply
Next i
End With
End Sub

The macro first finds the total number of laps, note that there must
be a blank cell to the right of e.g. "lap6" if there are 6 laps.
Then the data is sorted on each lap, starting from lap1.
The "CustomOrder" part makes the sorting put the blanks last.

Macro is only tested in Excel 2007.

Hope this helps / Lars-Åke




Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
sorting ranges of various column lengths, lookup values in columns mrphinney Excel Worksheet Functions 0 May 14th 09 07:51 PM
copy data from varying slected rows into new spreadsheet standard_guy Excel Discussion (Misc queries) 2 April 6th 08 04:58 PM
Formatting/Totalling Macro with varying rows of data MSteckbeck Excel Discussion (Misc queries) 2 February 5th 08 10:41 PM
Economical grouping of lengths out of much longer lengths Richard (a Builder not a Mathematician) Excel Worksheet Functions 1 January 19th 08 10:28 PM
Parse data with uneven lengths and different delimiters [email protected] Excel Worksheet Functions 3 January 5th 06 11:57 PM


All times are GMT +1. The time now is 07:31 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"