Как преобразовать вертикальный список данных в горизонтальный в Excel

Я пытаюсь экспортировать контакты со старого телефона Nokia моего отца в iPhone. Их старое программное обеспечение Nokia PC Suite может экспортировать эти контакты в CSV и в чистый текст, который отформатирован следующим образом:

First Name: ...
Last Name: ...
Phone: ...

First Name: ...
Last Name: ...
Phone: ...

...

Примечание №1. Иногда вместо имени указывается только фамилия и номер телефона. Они разделены разрывом строки.

Проблема с CSV в том, что кодировка перепутана, и я не могу понять, что это такое. Я хотел бы знать, как я могу экспортировать контакты в CSV или даже vCard из этого чистого текста.

Ожидаемый результат:

First Name | Last Name | Phone
FirstName1 | LastName1 | #####1
FirstName2 | LastName2 | #####2
FirstName3 | LastName3 | #####3

изменить: Примечание № 2: существует более 600 контактов.
изменить № 2: ' Вот пример. Левая сторона — исходный код, правая — то, что мне нужно для CSV-файла. Кстати, не обращайте внимания на эти «А», это просто приоритетная вещь, которую использует мой отец...


person effeKtSVK    schedule 30.03.2017    source источник
comment
VBA был бы лучшим методом.   -  person Scott Craner    schedule 30.03.2017
comment
VBA лучше всего, если контактов много. Если их не слишком много, вы можете использовать функцию транспонирования. Скопируйте каждый набор по одному, выберите ячейку справа от имени и выполните специальную вставку и установите флажок транспонирования в правом нижнем углу специальной вставки.   -  person dinotom    schedule 30.03.2017
comment
Можете ли вы показать некоторые из более тонких способов отображения данных? То есть, можете ли вы показать тот, где указаны два имени, два номера телефона и т. д., и как вы собираетесь с этим справиться? Или, во всяком случае, будет ли это просто пустое имя, фамилия или номер телефона? Работает ли моя формула или она не слишком полезна, учитывая различные способы хранения ваших данных?   -  person BruceWayne    schedule 30.03.2017
comment
@BruceWayne Я добавил пример к моему вопросу   -  person effeKtSVK    schedule 31.03.2017
comment
@BruceWayne На самом деле это хорошо, я просто должен изменить его на 2 входа, потому что сначала я не заметил, что только у первых нескольких контактов есть имя.   -  person effeKtSVK    schedule 31.03.2017


Ответы (1)


Я нашел способ сделать это без макроса/UDF VBA.

Это одна базовая формула с небольшим изменением для каждого столбца.

Вот макет, который я тестировал: введите здесь описание изображения

Итак, с вашими данными, начинающимися с A1, и с разрывом между каждым «блоком», вы можете сделать это в C2:

=RIGHT(OFFSET($A1,(ROW()-2)*3,0),LEN(OFFSET($A1,(ROW()-2)*3,0))-SEARCH(":",OFFSET($A1,(ROW()-2)*3,0))) и перетащите вниз.

Затем используйте ту же формулу в D2, за исключением замены $A1 на $A2 везде, где появляется $A1.

В E2 та же формула, но меняйте $A1 на $A3 каждый раз, когда появляется $A1, и перетаскивайте вниз.

Редактировать: Или вы можете поместить это в C2 и перетаскивать туда и вниз. Это одна формула, которую не нужно редактировать в каждом столбце:

=RIGHT(OFFSET(INDIRECT("$A"&ROW()-1+COLUMN()-3),(ROW()-2)*3,0),LEN(OFFSET(INDIRECT("$A"&ROW()-1+COLUMN()-3),(ROW()-2)*3,0))-SEARCH(":",OFFSET(INDIRECT("$A"&ROW()-1+COLUMN()-3),(ROW()-2)*3,0)))
person BruceWayne    schedule 30.03.2017
comment
Проблема в том, что в соответствии с OP Sometimes there isn't first name это означает, что нет шаблона для использования. Иногда это два, а иногда и три. - person Scott Craner; 30.03.2017
comment
@ScottCraner - Ой. Я пропустил это в своем рвении разобраться с этим. О, стоит попробовать! Даже если нет имени, он ничего не вернет, что все еще работает. Когда есть более одного имени, оно не будет выглядеть так, как хочет OP. Это поместит оба имени в ячейку «Имя». - person BruceWayne; 30.03.2017
comment
Я шел по тому же пути, когда увидел это. - person Scott Craner; 30.03.2017
comment
Это был бы простой vba, но поскольку он одноразовый, и ОП не проявил никаких усилий ... мне уже скучно. - person Scott Craner; 30.03.2017
comment
Я просто быстро просмотрел контакты, и их всего 9 с именем, а остальные - просто фамилия и номер, так что это должно быть полезно. Я собираюсь попробовать это, и я дам вам знать! :) - person effeKtSVK; 30.03.2017
comment
@ScottCraner Мне жаль, что я открываю Excel раз в несколько месяцев, и я понятия не имел, что VBA вообще существует ... - person effeKtSVK; 30.03.2017
comment
Хорошо, это сработало, в конце концов я использовал это: =RIGHT(OFFSET($A1;(ROW()-2)*2;0);LEN(OFFSET($A1;(ROW()-2)*2;0))-SEARCH(":";OFFSET($A1;(ROW()-2)*2;0))) мне пришлось изменить , на ;, вероятно, потому, что я использую Office для Mac... Я обнаружил, что есть больше тех контактов имени и фамилии, но я просто вырезать их оттуда вручную. Спасибо! - person effeKtSVK; 31.03.2017
comment
@effeKtSVK - Не зач! - person BruceWayne; 31.03.2017