Я делаю каталог для моего района. У нас была большая часть информации из предыдущего каталога. Введена информация: имя А1, адрес B1 и номер телефона C1; Имя B1, адрес B2, номер телефона C2 и т.д. Издатель хочет получить информацию в другом формате: имя А1, адрес А2, номер телефона А3, бланк А4; Имя A5, адрес A6, номер телефона A7, бланк A8 и т.д. Есть ли простой (или, черт возьми, не так-то простой) способ заставить Excel изменить формат информации, и мне не придется передавать информацию 1300 домохозяйств?

Мне также нужно будет переформатировать информацию во второй раз в перекрестье. Формат для этого: название улицы A1, номер адреса A2, имя резидента B2 и номер телефона C2.

5 ответов5

2

В Excel есть функция, позволяющая это сделать, например, перейти от A1 A2 A3 к A1 B1 C1. Выберите данные, скопируйте их и затем перейдите в область, где вы хотите их обойти. Тогда не просто вставьте, но пропустите "прошлое особенное" (или вставьте содержимое или что-то, что там написано, на немецком языке написано "inhalte einfügen" ;-)). В появившемся диалоговом окне есть мальчик проверки транспонирования, который поможет вам достичь вашего решения.

2

Добавьте этот макрос в Excel и запустите «MyTranspose», когда будет выбран лист с данными вашего адреса.

Option Explicit

'Copy all the data from the active sheet into a  new worksheet
' and transpose all the columns into a single column
Sub MyTranspose()
    Dim r As Range
    Dim wsNew As Worksheet
    Dim wsCurrent As Worksheet

    Set wsCurrent = ActiveSheet
    Set wsNew = Worksheets.Add(Before:=Sheets(1))

    For Each r In wsCurrent.UsedRange.Rows
        r.Copy
        wsNew.Cells(LastRowOnWS(wsNew, 1) + 2, 1).PasteSpecial Transpose:=True
    Next r

    Application.CutCopyMode = False
    Set wsCurrent = Nothing
    Set wsNew = Nothing
End Sub

'Find the last row used in column 'col'
Function LastRowOnWS(ByVal ws As Worksheet, _
                     Optional ByVal col As Long = 1) As Long
    LastRowOnWS = ws.Cells(65536, col).End(xlUp).Row
End Function
1

Первый - преобразование таблицы данных в один столбец с пустыми строками, разделяющими каждую запись, - на самом деле я бы сделал в Word. Скопируйте и вставьте данные в Word, преобразуйте таблицу в текст, используя Tab в качестве разделителя столбцов, замените каждый существующий знак абзаца двумя знаками абзаца (^ p на ^ p ^ p), замените каждую вкладку знаком абзаца (^ t на ^ p) и скопируйте и вставьте результат обратно в Excel.

Для второй задачи, если адреса отформатированы обычным способом США - 123 Main Street - тогда вам нужно будет использовать функции обработки текста в Excel, чтобы отделить номер адреса от названия улицы. Если адреса находятся в столбце B (и всегда есть один пробел, отделяющий число от улицы), то в D1 введите

=Trim(Left(B1,Find(" ",B2)))

а в е1 поставь

=Trim(Right(B1,Len(B1)-Len(D1)))

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

Если это глупо, но это работает, это не глупо. :)

0

Управление инструментом конкатенации Excel должно помочь

http://www.techonthenet.com/excel/formulas/concat.php

0

Этот вопрос лучше относится к http://superuser.com, но так как вы задали вопрос в SO, который является сайтом для обсуждения программ ...

Я бы определенно сделал следующее:

  1. Экспортируйте данные в файл .csv
  2. Манипулируйте файлом .csv с помощью мощного языка программирования, такого как Python
  3. Импортируйте новый файл .csv обратно в Excel

Изучение таких инструментов может быть выгодно всем, а не только программистам!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .