сортировка по листам в Excel - PullRequest
0 голосов
/ 11 января 2012

Я не знаю, возможно ли это или нет.

У меня есть рабочая тетрадь с двумя листами: «вход» и «выход»

пользователь1 заполняет «лист ввода»

Столбец А = имя
Столбец B = Возраст
Колонка C = Местоположение
Колонка D = высота
..
..

Затем на листе «Вывод» в столбце А задается копирование значения из Столбца А на листе «ввода», и пользователь2 заполняет более подробную информацию, используя значения, введенные пользователем1

Колонка B = цвет глаз
Колонка C = цвет волос
Столбец D = количество пальцев
..
..

Так что я надеюсь, что вы поняли идею, User1 вводит некоторые детали, а затем User2 делает некоторую работу с этим и вводит больше деталей в «выходной лист». Столбец A является значением «index», которое связывает их вместе.

Моя проблема заключается в том, что если пользователь2 вводит туда данные, а затем возвращается на лист «ввода» и выполняет предварительную сортировку, значения на листе «вывода» больше не будут совпадать, поскольку в столбце А будут отображаться изменения, отражающие операция сортировки, остальное останется прежним.

Можно ли связать строки между листами или создать код сортировки, который будет проходить по обоим листам и сохранять их согласованность.

Это не должно работать для специальных поисков, которые пытается пользователь, я просто хочу поместить кнопку на листе «ввода», например, «сортировать по имени», «сортировать по местоположению» и т. Д.

С уважением

Аарон

1 Ответ

1 голос
/ 19 января 2012

Если у вас все в порядке с предварительно заданными сортировками, одно из решений состоит в том, чтобы отразить оба значения из листа A и листа B в лист C, а затем просто отсортировать их и заново заполнить значения в листах A и B с помощью новые, отсортированные, результаты.

* 1003 Т.е. *

Sheet1                   | Sheet 2                           | Sheet 3 (Hidden and named)
                         |                                   | 
Name     Age    etc,     | Eye Colour    Hair colour   etc.  | =Sheet1!A1 ... =Sheet2!A1

Тогда ваша кнопка сортировки вызовет подпрограмму примерно так:

Dim rngSortRange As Range, rngStartCell As Range, rngEndCell As Range
Set rngStartCell = Worksheets("Sheet_3_Name_Goes_Here").Range("A1")
Set rngEndCell = Worksheets("Sheet_3_Name_Goes_Here").Range( _
  rngStartCell.End(xlToRight).Column, _
  rngStartCell.End(xlDown).Row)
Set rngSortRange = Worksheets("Sheet_3_Name_Goes_Here").Range(rngStartCell, rngEndCell)
rngSortRange.Sort Key1:=<Column Number Here>, Order1:=xlAscending, Header:=xlYes
rngSortRange.Range(rngStartCell, _
                    Worksheets("Sheet_3_Name_Goes_Here").Range( _
                     Worksheets("Sheet 1").Range("A1").End(xlToRight).Column, _
                     rngEndCell.Row _
                    ) _
                   ).Copy
Worksheets("Sheet 1").Paste
rngSortRange.Range(Worksheets("Sheet_3_Name_Goes_Here").Range(
                     rngStartCell.Column + Worksheets("Sheet 1").Range("A1").End(xlToRight).Column, _
                     rngStartCell.Row _
                    ), _
                    rngEndCell _
                   ).Copy
Worksheets("Sheet 2").Paste

Это может потребовать некоторой работы (например, вам может понадобиться сбросить sheet3 впоследствии, вам, возможно, придется вставлять значения, а не просто вставлять, иначе вы в конечном итоге вставите формулы для самоссылки), но основная идея должна работать.

...