Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сорировка строк в Excel / 7 сообщений из 7, страница 1 из 1
01.02.2009, 00:02:41
    #35789943
Олегович
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сорировка строк в Excel
Доброго времени суток.
Есть задача в Excel: на основе списка (лист 1) составить список (лист 2), перемешав записи первого в случайном порядке. Номер по порядку есть и в первом списке и во втором. С этим я справился. А как теперь отсортировать список с первого листа в порядке второго, т.е. восстановить ту же случайную последовательность со второго листа на первом.
Пока вижу так. Создать временный лист. Переместить туда список с первого листа, отсортированный в порядке возрастания номера по порядку. Берем iую запись со второго листа, по номеру по порядку в этой строке копируем строку с временного листа на лист 1. Удаляю временный лист.
Есть ли более простой способ, может я велосипед изобретаю. Заранее спасибо.
...
Рейтинг: 0 / 0
01.02.2009, 02:58:08
    #35790002
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сорировка строк в Excel
И вам доброго времени!
А просто скопировать со 2-го листа на 1-й чем не устраиает?
...
Рейтинг: 0 / 0
01.02.2009, 09:49:29
    #35790057
Олегович
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сорировка строк в Excel
ZVI, во втором только номер по порядку и фио из 1го списка, остальные поля там другие. Ну если конкретизировать задачу, то лист 1 - сводная таблица, в которую вносятся данные из листа 2,3 и т.д.
...
Рейтинг: 0 / 0
01.02.2009, 19:18:36
    #35790412
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сорировка строк в Excel
Про неполный список 2–го листа изначально не говорилось.
Можно вообще обойтись без 2-го листа, например, так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Sub RandomSort()
  Dim TitleCell As Range, Rng As Range, Tmp As Range, i&
  Const Debugging = False     ' <-- Для отладки
  Set TitleCell = Лист1.[A3]  ' <-- Менять здесь: заголовок ФИО
  ' Задать диапазон данных с дополнительной колонкой справа
  Set Rng = TitleCell.CurrentRegion
  i = TitleCell.Row - Rng.Row
  If i >  0  Then Set Rng = Rng.Resize(Rng.Rows.Count - i).Offset(i)
  Set Rng = Rng.Resize(, Rng.Columns.Count +  1 )
  ' В дополнительной колонке справа записать случайные числа
  Set Tmp = Rng.Columns(Rng.Columns.Count)
  With Tmp
    .Formula = "=RAND()"
    .Cells( 1 ,  1 ).Value = "Random"
  End With
  ' Отсортировать все по доп.колонке
  Rng.Sort Key1:=Tmp.Cells( 1 ,  1 ), Order1:=xlAscending, Header:=xlYes
  ' Очистить доп колонку
  If Debugging = False Then Tmp.ClearContents
End Sub
...
Рейтинг: 0 / 0
01.02.2009, 19:29:59
    #35790420
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сорировка строк в Excel
Для ускорения обработки можно немного добавить кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
' Если важна скорость обработки
Sub RandomSort1()
  Freeze True
  ' 
  ' <-- Предыдущий код
  '
  Freeze False
End Sub

' True/False -> Заморозить/Отморозить экран, события и пересчет
Sub Freeze(OnOff As Boolean)
  With Application
    .ScreenUpdating = Not OnOff
    .EnableEvents = Not OnOff
    .Calculation = IIf(OnOff, xlCalculationManual, xlCalculationAutomatic)
  End With
End Sub

...
Рейтинг: 0 / 0
01.02.2009, 20:35:07
    #35790454
Олегович
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сорировка строк в Excel
ZVI, большое спасибо. Решение с доп колонкой очень грамотное. Еще маленький вопрос: как сделать столбик невидимым, чтоб в любое время можно было отсортировать в "случайном" порядке.
...
Рейтинг: 0 / 0
01.02.2009, 23:09:40
    #35790562
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сорировка строк в Excel
Вариант для скрытия столбца со случайными числами:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Sub RandomSort2()
  Dim TitleCell As Range, Rng As Range, Tmp As Range, i&
  Const RandomTitle = "Random"  ' <-- Заголовок доп столбца справа
  Set TitleCell = Лист1.[A3]    ' <-- Менять здесь: заголовок ФИО
  'Заморозить Excel
  Freeze True
  ' Задать диапазон данных с дополнительной колонкой справа
  Set Rng = TitleCell.CurrentRegion
  i = TitleCell.Row - Rng.Row
  If i >  0  Then Set Rng = Rng.Resize(Rng.Rows.Count - i).Offset(i)
  ' Убедиться, что заголовок последней колонки = RandomTitle
  If Rng.Cells( 1 ,  1 ).Offset(, Rng.Columns.Count -  1 ) <> RandomTitle Then
    Set Rng = Rng.Resize(, Rng.Columns.Count +  1 )
  End If
  ' Задать доп. столбец справа для случайных чисел
  Set Tmp = Rng.Columns(Rng.Columns.Count)
  ' Скрыть доп. столбец
  Tmp.EntireColumn.Hidden = True
  ' В доп. столюце справа записать случайные числа
  With Tmp
    .Formula = "=RAND()"
    '.Value = .Value ' <-- Формулы случ.чисел заменить на значения
    .Cells( 1 ,  1 ).Value = RandomTitle
  End With
  ' Отсортировать все по доп.колонке
  Rng.Sort Key1:=Tmp.Cells( 1 ,  1 ), Order1:=xlAscending, Header:=xlYes
  ' Отморозить Excel
  Freeze False
End Sub
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сорировка строк в Excel / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]