Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/ошибка в макросе сортировки - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
ошибка в макросе сортировки
Che79 Дата: Четверг, 27.06.2013, 12:38 | Сообщение № 1
Группа: Друзья
Ранг: Старожил
Сообщений: 1649
Репутация: 306 ±
Замечаний: 0% ±

2013 Win, 365 Mac
Приветствую всех!

Помогите, пжл, разобраться с макросом.

Есть книга с N-ым кол-вом листов. На каждом листе в столбце В выгрузка массива, содержащего время суток в формате h:mm. Кол-во строк на каждом листе различно.
Необходимо отсортировать эти массивы по возрастанию, но при условии - если время суток в интервале 00:00 - 00:59, то эти ячейки всегда должны быть внизу массива.
Задачу пытаюсь решить примерно таким макросом
[vba]
Код
Sub sort()
     Dim x&, sh As Worksheet
     For Each sh In ThisWorkbook.Worksheets
         x = sh.Cells(Rows.Count, 2).End(xlUp).Row
For i = 10 To x Step 1
If sh.Cells(i, 2).Value = "00:*" Then
  sh.Range("B10:B" & i - 1).sort sh.Range("B10:B" & i - 1), Order1:=xlAscending, Header:=xlGuess
ElseIf sh.Cells(i, 2).Value <> "00:*" Then
sh.Range("B10:B" & x).sort sh.Range("B10:B" & x), Order1:=xlAscending, Header:=xlGuess
End If
Next i
Next
End Sub
[/vba]

но условие , нужное мне, не выполняется. Макрос сортирует весь массив по возрастанию.
Подозреваю, я неверно задаю условие...
Подскажите, в чем может быть ошибка? Что делаю принципиально не так?

Спасибо.
К сообщению приложен файл: 181818.xls (31.0 Kb)


Делай нормально и будет нормально!
 
Ответить
СообщениеПриветствую всех!

Помогите, пжл, разобраться с макросом.

Есть книга с N-ым кол-вом листов. На каждом листе в столбце В выгрузка массива, содержащего время суток в формате h:mm. Кол-во строк на каждом листе различно.
Необходимо отсортировать эти массивы по возрастанию, но при условии - если время суток в интервале 00:00 - 00:59, то эти ячейки всегда должны быть внизу массива.
Задачу пытаюсь решить примерно таким макросом
[vba]
Код
Sub sort()
     Dim x&, sh As Worksheet
     For Each sh In ThisWorkbook.Worksheets
         x = sh.Cells(Rows.Count, 2).End(xlUp).Row
For i = 10 To x Step 1
If sh.Cells(i, 2).Value = "00:*" Then
  sh.Range("B10:B" & i - 1).sort sh.Range("B10:B" & i - 1), Order1:=xlAscending, Header:=xlGuess
ElseIf sh.Cells(i, 2).Value <> "00:*" Then
sh.Range("B10:B" & x).sort sh.Range("B10:B" & x), Order1:=xlAscending, Header:=xlGuess
End If
Next i
Next
End Sub
[/vba]

но условие , нужное мне, не выполняется. Макрос сортирует весь массив по возрастанию.
Подозреваю, я неверно задаю условие...
Подскажите, в чем может быть ошибка? Что делаю принципиально не так?

Спасибо.

Автор - Che79
Дата добавления - 27.06.2013 в 12:38
AndreTM Дата: Пятница, 28.06.2013, 01:09 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Попробуйте что-то вроде такого:
[vba]
Код
Sub SortNew()
     Dim sh As Object, c As Object, nRows&
     For Each sh In ThisWorkbook.Worksheets
         nRows = sh.Cells(Rows.Count, 2).End(xlUp).Row - 9
         With sh.[B10].Resize(nRows, 1)
             .Replace What:="00:", Replacement:="25::"
             .sort key1:=sh.[B10], Order1:=xlAscending, Header:=xlGuess
         End With
         For Each c In sh.[B10].Resize(nRows, 1).Cells
             If Left(c.Formula, 4) = "25::" Then c.Formula = "00:" & Mid(c.Formula, 5)
         Next
     Next
End Sub
[/vba]


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеПопробуйте что-то вроде такого:
[vba]
Код
Sub SortNew()
     Dim sh As Object, c As Object, nRows&
     For Each sh In ThisWorkbook.Worksheets
         nRows = sh.Cells(Rows.Count, 2).End(xlUp).Row - 9
         With sh.[B10].Resize(nRows, 1)
             .Replace What:="00:", Replacement:="25::"
             .sort key1:=sh.[B10], Order1:=xlAscending, Header:=xlGuess
         End With
         For Each c In sh.[B10].Resize(nRows, 1).Cells
             If Left(c.Formula, 4) = "25::" Then c.Formula = "00:" & Mid(c.Formula, 5)
         Next
     Next
End Sub
[/vba]

Автор - AndreTM
Дата добавления - 28.06.2013 в 01:09
Che79 Дата: Пятница, 28.06.2013, 10:22 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1649
Репутация: 306 ±
Замечаний: 0% ±

2013 Win, 365 Mac
AndreTM, спасибо! все так, как нужно. Про возможность замены 00 я не подумал)


Делай нормально и будет нормально!
 
Ответить
СообщениеAndreTM, спасибо! все так, как нужно. Про возможность замены 00 я не подумал)

Автор - Che79
Дата добавления - 28.06.2013 в 10:22
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!