powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сорировка строк в Excel
7 сообщений из 7, страница 1 из 1
Сорировка строк в Excel
    #35789943
Олегович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
Есть задача в Excel: на основе списка (лист 1) составить список (лист 2), перемешав записи первого в случайном порядке. Номер по порядку есть и в первом списке и во втором. С этим я справился. А как теперь отсортировать список с первого листа в порядке второго, т.е. восстановить ту же случайную последовательность со второго листа на первом.
Пока вижу так. Создать временный лист. Переместить туда список с первого листа, отсортированный в порядке возрастания номера по порядку. Берем iую запись со второго листа, по номеру по порядку в этой строке копируем строку с временного листа на лист 1. Удаляю временный лист.
Есть ли более простой способ, может я велосипед изобретаю. Заранее спасибо.
...
Рейтинг: 0 / 0
Сорировка строк в Excel
    #35790002
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вам доброго времени!
А просто скопировать со 2-го листа на 1-й чем не устраиает?
...
Рейтинг: 0 / 0
Сорировка строк в Excel
    #35790057
Олегович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZVI, во втором только номер по порядку и фио из 1го списка, остальные поля там другие. Ну если конкретизировать задачу, то лист 1 - сводная таблица, в которую вносятся данные из листа 2,3 и т.д.
...
Рейтинг: 0 / 0
Сорировка строк в Excel
    #35790412
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про неполный список 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
Сорировка строк в Excel
    #35790420
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для ускорения обработки можно немного добавить кода:
Код: 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
Сорировка строк в Excel
    #35790454
Олегович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZVI, большое спасибо. Решение с доп колонкой очень грамотное. Еще маленький вопрос: как сделать столбик невидимым, чтоб в любое время можно было отсортировать в "случайном" порядке.
...
Рейтинг: 0 / 0
Сорировка строк в Excel
    #35790562
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант для скрытия столбца со случайными числами:
Код: 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
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сорировка строк в Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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