Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 586
Default Sort by Cells Interior Color Then by Date

I have a spreadsheet that I use to keep track of ship dates. Currently if a
particular product is ready to ship I highlight the ship date cell by
changing its interior color = 31. All ship dates are in Column K. Is there
a way to sort the entire worksheet in this order:

1.) all .Interior.ColorIndex = 31 at the top
2.) then sort the dates of those cells in ascending order
3.) then sort all other dates after the .Interior.ColorIndex = 31 by
ascending order
4.) then sort those cells by Sales order number in Column A

Is this possible?
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 9,101
Default Sort by Cells Interior Color Then by Date

See if this code helps

Sub mysort()


'Move all with .Interior.ColorIndex = 31
'to beginning of worksheet

RowCount = 1
Do While Range("K" & RowCount) < ""
If Range("K" & RowCount).Interior.ColorIndex = 31 Then
If RowCount < 1 Then
Rows(RowCount).Cut
' ActiveSheet.Paste Destination:=Rows(1)
Rows(1).Insert Shift:=xlDown
End If
End If
RowCount = RowCount + 1
Loop

'Now find where end of highlighted cells are located
RowCount = 1
Do While Range("K" & RowCount).Interior.ColorIndex = 31
RowCount = RowCount + 1
Loop
firstNonHighlightedcell = RowCount
LastHighlightcell = RowCount - 1
Lastrow = Range("K" & Rows.Count).End(xlUp).Row

Set sortrange1 = Rows("1" & LastHighlightcell)
Set sortrange2 = Rows(firstNonHighlightedcell & ":" & Lastrow)

sortrange1.Sort _
Key1:=Range("K1"), _
Order1:=xlAscending, _
Key2:=Range("A1"), _
Order2:=xlAscending, _
Header:=xlGuess

sortrange2.Sort _
Key1:=Range("K" & firstNonHighlightedcell), _
Order1:=xlAscending, _
Key2:=Range("A" & firstNonHighlightedcell), _
Order2:=xlAscending, _
Header:=xlGuess

End Sub


"RyanH" wrote:

I have a spreadsheet that I use to keep track of ship dates. Currently if a
particular product is ready to ship I highlight the ship date cell by
changing its interior color = 31. All ship dates are in Column K. Is there
a way to sort the entire worksheet in this order:

1.) all .Interior.ColorIndex = 31 at the top
2.) then sort the dates of those cells in ascending order
3.) then sort all other dates after the .Interior.ColorIndex = 31 by
ascending order
4.) then sort those cells by Sales order number in Column A

Is this possible?

  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 35,218
Default Sort by Cells Interior Color Then by Date

I would use a helper column that would return the colorindex of the cell.

Chip Pearson has a routine that will do that:
http://cpearson.com/excel/colors.htm

Then I could sort my data by that column and the info in column A.

Remember that if you change colors, those UDFs that return the colorindex won't
recalculate. You'll want to force a manual recalculation before you trust the
results.

RyanH wrote:

I have a spreadsheet that I use to keep track of ship dates. Currently if a
particular product is ready to ship I highlight the ship date cell by
changing its interior color = 31. All ship dates are in Column K. Is there
a way to sort the entire worksheet in this order:

1.) all .Interior.ColorIndex = 31 at the top
2.) then sort the dates of those cells in ascending order
3.) then sort all other dates after the .Interior.ColorIndex = 31 by
ascending order
4.) then sort those cells by Sales order number in Column A

Is this possible?


--

Dave Peterson
  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 78
Default Sort by Cells Interior Color Then by Date

How do you change this to work in 2007? I like the idea and have a similar
application but am having issues with it in 2007 Excel.


"Joel" wrote:

You are missing the colon (actually I was missing the colon in my original
code). Statement need to look like this Rows("3:27")

from
Set rngReady = Rows("3" & LastHighlightcell)
to
Set rngReady = Rows("3" & ":" & LastHighlightcell)

Also chage this line
from
Rows(1).Insert Shift:=xlDown
to
Rows(3).Insert Shift:=xlDown


The code may be better if you make the startrow a variable. Not sure if I
got all your changges into the code below.


Sub ColorSort()

Dim FirstNonHighlightedCell As Long, HighlightedCell As Long, LastRow As Long
Dim rngReady As Range, rngRegular As Range

Sheets("Global Schedule").Activate
StartRow = 3

'Move all with .Interior.ColorIndex = 8 (teal) to the top of worksheet
RowCount = StartRow
Do While Range("K" & RowCount) < ""
If Range("K" & RowCount).Interior.ColorIndex = 8 Then
If RowCount < StartRow Then
Rows(RowCount).Cut
Rows(StartRow).Insert Shift:=xlDown
End If
End If
RowCount = RowCount + 1
Loop

'Now find where end of highlighted cells are located
RowCount = StartRow
Do While Range("K" & RowCount).Interior.ColorIndex = 8
RowCount = RowCount + 1
Loop
FirstNonHighlightedCell = RowCount
LastHighlightcell = RowCount - 1
LastRow = Range("A" & Rows.Count).End(xlUp).Row

Set rngReady = Rows(StartRow & ":" & LastHighlightcell)
Set rngRegular = Rows(FirstNonHighlightedCell & ":" & LastRow)

rngReady.Sort _ '<== ERROR ERROR
Key1:=Range("K" & StartRow), _
Order1:=xlAscending, _
Key2:=Range("A" & StartRow), _
Order2:=xlAscending, _
Header:=xlGuess

rngRegular.Sort _
Key1:=Range("K" & FirstNonHighlightedCell), _
Order1:=xlAscending, _
Key2:=Range("A" & FirstNonHighlightedCell), _
Order2:=xlAscending, _
Header:=xlGuess

End Sub



"RyanH" wrote:

After a little tweaking I got it to work. I have to code the rows to be
sorted like this:

Set rngReady = Rows(3 & ":" & LastHighlightcell)

For some reason this does not sort the rngReady.

Set rngReady = Rows("3" & LastHighlightcell)

I am new to VBA so I do not know the reason why, do you? Thanks for all
your help on this!



"Joel" wrote:

Check the values of FirstNonHighlightedCell , LastHighlightcell , and
LastHighlightcell . I think you need to change RowCount = 1
to RowCount = 3. If your cells highlighted cells are start in row 3 there
may be a problem.

"RyanH" wrote:

Thanks for the quick response. I customized this to my application a bit,
but I am getting an error "Sort method of range class failed" labeled below:

Sub ColorSort()

Dim FirstNonHighlightedCell As Long, HighlightedCell As Long, LastRow As Long
Dim rngReady As Range, rngRegular As Range

Sheets("Global Schedule").Activate

'Move all with .Interior.ColorIndex = 8 (teal) to the top of worksheet
RowCount = 3
Do While Range("K" & RowCount) < ""
If Range("K" & RowCount).Interior.ColorIndex = 8 Then
If RowCount < 3 Then
Rows(RowCount).Cut
Rows(1).Insert Shift:=xlDown
End If
End If
RowCount = RowCount + 1
Loop

'Now find where end of highlighted cells are located
RowCount = 1
Do While Range("K" & RowCount).Interior.ColorIndex = 8
RowCount = RowCount + 1
Loop
FirstNonHighlightedCell = RowCount
LastHighlightcell = RowCount - 1
LastRow = Range("A" & Rows.Count).End(xlUp).Row

Set rngReady = Rows("3" & LastHighlightcell)
Set rngRegular = Rows(FirstNonHighlightedCell & ":" & LastRow)

rngReady.Sort _ '<== ERROR ERROR
Key1:=Range("K1"), _
Order1:=xlAscending, _
Key2:=Range("A1"), _
Order2:=xlAscending, _
Header:=xlGuess

rngRegular.Sort _
Key1:=Range("K" & FirstNonHighlightedCell), _
Order1:=xlAscending, _
Key2:=Range("A" & FirstNonHighlightedCell), _
Order2:=xlAscending, _
Header:=xlGuess

End Sub


"Joel" wrote:

See if this code helps

Sub mysort()


'Move all with .Interior.ColorIndex = 31
'to beginning of worksheet

RowCount = 1
Do While Range("K" & RowCount) < ""
If Range("K" & RowCount).Interior.ColorIndex = 31 Then
If RowCount < 1 Then
Rows(RowCount).Cut
' ActiveSheet.Paste Destination:=Rows(1)
Rows(1).Insert Shift:=xlDown
End If
End If
RowCount = RowCount + 1
Loop

'Now find where end of highlighted cells are located
RowCount = 1
Do While Range("K" & RowCount).Interior.ColorIndex = 31
RowCount = RowCount + 1
Loop
firstNonHighlightedcell = RowCount
LastHighlightcell = RowCount - 1
Lastrow = Range("K" & Rows.Count).End(xlUp).Row

Set sortrange1 = Rows("1" & LastHighlightcell)
Set sortrange2 = Rows(firstNonHighlightedcell & ":" & Lastrow)

sortrange1.Sort _
Key1:=Range("K1"), _
Order1:=xlAscending, _
Key2:=Range("A1"), _
Order2:=xlAscending, _
Header:=xlGuess

sortrange2.Sort _
Key1:=Range("K" & firstNonHighlightedcell), _
Order1:=xlAscending, _
Key2:=Range("A" & firstNonHighlightedcell), _
Order2:=xlAscending, _
Header:=xlGuess

End Sub


"RyanH" wrote:

I have a spreadsheet that I use to keep track of ship dates. Currently if a
particular product is ready to ship I highlight the ship date cell by
changing its interior color = 31. All ship dates are in Column K. Is there
a way to sort the entire worksheet in this order:

1.) all .Interior.ColorIndex = 31 at the top
2.) then sort the dates of those cells in ascending order
3.) then sort all other dates after the .Interior.ColorIndex = 31 by
ascending order
4.) then sort those cells by Sales order number in Column A

Is this possible?

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
lock cells based on interior color MIke Excel Discussion (Misc queries) 4 December 27th 07 08:59 PM
Cell background color (interior color) setting not working Martin E. Excel Programming 1 May 21st 06 07:00 PM
cells interior/color index tandavina[_7_] Excel Programming 4 February 12th 06 11:28 AM
Sum all cells with interior color... Ctech[_65_] Excel Programming 4 January 11th 06 07:46 PM
Passing Back Color to Interior Color ExcelMonkey[_190_] Excel Programming 1 March 22nd 05 04:27 PM


All times are GMT +1. The time now is 08:55 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"