Я делаю каталог для своего окружения. У нас была большая часть информации из предыдущего каталога. Информация вводилась: имя A1, адрес B1 и номер телефона C1; имя B1, адрес B2, номер телефона C2 и т.д. Издатель хочет информацию в другом формате имя A1, адрес A2, номер телефона A3, пробел A4; имя A5, адрес A6, номер телефона A7, A8 очищают и т.д... Существует ли легкое (или heck - не настолько легкий), способ иметь Excel изменяет формат информации без меня имеющий необходимость вручить информацию о домашних хозяйствах типа 1300?
Я должен буду также переформатировать информацию во второй раз в крестик. Формат, для которого: Название улицы A1, Число Адреса A2, Резидентное Имя B2 и Номер телефона C2.
Excel имеет функцию, чтобы сделать это, например, перемещение от A1 A2 A3 до A1 B1 C1. Выберите рассматриваемые данные, скопируйте их и затем перейдите к области, где Вы хотите к прошлому их. Затем просто не вставляйте, но мимо "мимо особенный" (или вставляйте содержание или независимо от того, что оно говорит на немецком языке, который оно говорит "inhalte einfügen" ;-)). Предстоящее диалоговое окно имеет транспонировать мальчика проверки, который поможет Вам достигнуть своего решения.
Добавьте этот макрос к своему 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
Первый - преобразование таблицы данных к отдельному столбцу с пустыми строками, разделяющими каждую запись - я на самом деле сделал бы в Word. Скопируйте и вставьте данные в Word, преобразуйте таблицу в текстовую Вкладку использования как разделитель столбцов, замените каждую существующую метку абзаца двумя метками абзаца (^p с ^p^p), замените каждую вкладку меткой абзаца (^t с ^p), и скопируйте и вставьте результат назад в Excel.
Для второй задачи, если адреса отформатированы обычный американский путь - Мэйн-Стрит, 123, - затем, необходимо будет использовать текстовые функции управления Excel для разделения числа адреса от названия улицы. Если адреса находятся в столбце B (и всегда существует одиночный пробел, разделяющий число от улицы), то в D1, помещенном
=Trim(Left(B1,Find(" ",B2)))
и в E1, помещенном
=Trim(Right(B1,Len(B1)-Len(D1)))
и заливка вниз. Затем как прежде, используйте Word для стратегической замены вкладок метками абзаца для получения расположения, в котором Вы нуждаетесь.
Если это глупо, но это работает, это не глупо.:)
Управление инструментом конкатенации Excel должно помочь
Этот вопрос лучше принадлежит на http://superuser.com, но так как Вы спросили в Так, который является сайтом обсуждения программирования...
Я определенно сделал бы следующее:
Изучение таких инструментов может быть выгодно для всех, не просто программистов!