2016-04-21 1 views
1

У меня проблема. Я отфильтровываю из большой таблицы продуктов (около 32 000 рядов) нужные мне продукты и сортирую их сначала по имени продукта, а затем по номеру доставки.Сортировка чисел и текста в одно время создает проблемы

Проблема заключается в том, что если я хочу фильтровать и сортировать числа как названия продуктов (что также возможно), оно не сортируется правильно (см. Рисунок).

Picture of the filtered and sorted table

Мой код это один:

'************************************************************* 
'Filter Product Code 
Set myrange = Range("A1:A" & lastrow) 

For Each c In myrange 
    If Len(c.Value) <> 0 Then 
       ThisWorkbook.Worksheets(Worksheets.Count).Columns("A:D").AdvancedFilter xlFilterCopy, _ 
      Sheet1.Range("A1:A" & lastrow), Sheet1.Range("G1"), False 
    End If 
Next 

'Sheet1.Range("51:100").RemoveDuplicates Columns:=3, Header:=xlYes 

'******************************************************************* 
'Sort the filtered list first by Product Code then by the Delivery number 
Dim lngRow As Long 
Dim lngRowMax As Long 
Dim wsf As WorksheetFunction 

With Sheet1 

lastrow = Cells(Rows.Count, 8).End(xlUp).Row 

Range("G2:J" & lastrow).Sort Key1:=Range("G2:G" & lastrow), _ 
Order1:=xlAscending, Key2:=Range("I2:I" & lastrow), _ 
Order1:=xlAscending, Header:=xlNo 

Set wsf = Application.WorksheetFunction 
lngRowMax = .UsedRange.Rows.Count 

End With 

Как я могу продолжить, чтобы он правильно отсортирован. Сначала одни и те же коды продуктов, затем по номеру доставки (по возрастанию), поскольку я хочу сначала продать самые старые продукты.

Благодарим вас за ответ.

+0

Являются ли форматы ячеек строк данных 4 и 5 отличными от других? Просто используя функцию Сортировка на ленте данных, она сортируется так, как вы ожидаете от меня. – PeterT

+0

Это должно быть сделано с помощью макроса. Столбец G форматируется как текст, colum I форматируется как число. Я думаю, это не должно быть проблемой, не так ли? Все еще не работает. Любые идеи @PeterT, @ user3598756? – Abduuul

ответ

0

Теперь я нашел решение для этого. Только небольшая настройка. Код сортировки выглядит следующим образом:

Dim lngRow As Long 
Dim lngRowMax As Long 
Dim wsf As WorksheetFunction 

With Sheet1 

lastrow = Cells(Rows.Count, 8).End(xlUp).Row 

Range("G1:J" & lastrow).Sort Key1:=Range("G1:G" & lastrow), _ 
    Order1:=xlAscending, Key2:=Range("I1:I" & lastrow), _ 
    Order2:=xlAscending, Header:=xlYes, DataOption1:=xlSortTextAsNumbers 


Set wsf = Application.WorksheetFunction 
lngRowMax = .UsedRange.Rows.Count 

End With 
Смежные вопросы