Как объединить данные из нескольких столбцов в одну группу столбцов - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть лист, который собирает данные из еженедельных рабочих тетрадей.В каждой книге есть одна ячейка, в которой все данные, которые мне нужны, переносятся в одну ячейку.Данные взяты из диапазона 29 столбцов на 29 строк, но со временем это может увеличиться.Каждая строка представляет данные из одного рабочего задания (WO), включая WO #, стоимость рабочей силы ($) и список сотрудников, которые работали на работе (E #).

Затем эта ячейка открывается и извлекается в одну строку данных.29 столбцов для каждой из 29 строк в исходных данных.Это означает 29 х 29 столбцов.

WO1 $10 E1  E2  E3  E4  WO8    $10  E1  E2  E3  E4
WO2 $15 E1  E2          WO3    $15  E1  E2      
WO3 $20 E1  E2  E3      WO9    $20  E1  E2  E3  
WO4 $25 E1  E2  E3  E4  WO5    $25  E1  E2  E3  E4
WO5 $30 E1  E2          WO10   $30  E1  E2      
WO6 $35 E1  E2  E3  E4  WO11   $35  E1  E2  E3  E4
WO7 $40 E1  E2  E3      WO1    $40  E1  E2  E3  

Я хотел бы создать список, объединяющий все данные для каждой WO в единый список, состоящий из 29 столбцов шириной и 841 строкой.Возможно, что некоторые задания занимают более 1 недели и могут иметь данные в нескольких строках, поэтому на данный момент могут быть дубликаты WO.

WO1    $10  E1  E2  E3  E4
WO2    $15  E1  E2      
WO3    $20  E1  E2  E3  
WO4    $25  E1  E2  E3  E4
WO5    $30  E1  E2      
WO6    $35  E1  E2  E3  E4
WO7    $40  E1  E2  E3  
WO8    $10  E1  E2  E3  E4
WO3    $15  E1  E2      
WO9    $20  E1  E2  E3  
WO5    $25  E1  E2  E3  E4
WO10   $30  E1  E2      
WO11   $35  E1  E2  E3  E4
WO1    $40  E1  E2  E3  

Я думал, что если бы я мог получить список с каждой WOи связывая данные в единый список, я мог бы создать уникальный список WO и другой магии Excel, чтобы уточнить список и достичь того, что мне нужно.Эта часть, я думаю, я справлюсь.Задача для меня - сначала поместить все это в один список.

Я попробовал этот код: Excel - Объединить несколько столбцов в один столбец

=IF(ROW()<=COUNTA(A:A),INDEX(A:A,ROW()),IF(ROW()<=COUNTA(A:B),INDEX(B:B,ROW()-COUNTA(A:A)),IF(ROW()>COUNTA(A:C),"",INDEX(C:C,ROW()-COUNTA(A:B)))))

Но для этого потребуется 29 вложенных операторов if ивсе данные должны быть перегруппированы так, чтобы все соответствующие ячейки были смежными друг с другом.

Я бы предпочел использовать формулы, но буду использовать VBA, если это лучший способ.

Если интересноВот примерная версия файла: https://www.dropbox.com/s/58iex17wx3wuvug/stackoverflowsample.xlsx?dl=0

Первые 30 столбцов - это мои попытки начать работать с приведенной выше формулой.

Вероятно, я могу уменьшить количество исходных столбцов, посколькувероятность того, что более 10-15 сотрудников когда-либо будут работать на одной и той же работе, невелика, если не невозможна, но именно столько столбцов я изначально допустил.Это может быть изменено, если это выгодно.Хотя может быть больше строк для WO.

Я мог бы извлечь и по-другому, если это имеет значение.

1 Ответ

0 голосов
/ 03 января 2019

Если вы делаете это только несколько раз в день, выполните следующие действия:

В другую вкладку поместите =Sheet1!A1, перетащите формулу на любое количество сотрудников и перетащите ее вниз на 29 строк.Затем поместите =Sheet1!B1, перетащите и потяните вниз 29 строк и т. Д.

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

Затем вы можете скопировать значения вставки в этот столбец данных, куда бы вы ни захотели, иудалить дубликаты.

Интуитивно для большинства пользователей Excel это интуитивно понятно, поэтому он идеально подходит для передачи другим людям.

Если вам нужно делать это много раз в день, VBA, вероятно,быть хорошим решением.Я могу дать вам «эскиз» кода, чтобы начать работу, но сначала вам нужно будет попытаться написать его самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...