Вопрос Как перенести несколько ячеек сразу в Excel


У меня есть документ Excel, такой как этот, со многими списками:

Name
Address
City, State
ZIP

Name
Address
City, State
ZIP

Между ними есть пустая строка. Как я могу преобразовать его в нечто вроде:

Name, Address, City, Sate, ZIP
Name, Address, City, Sate, ZIP

Я сделал некоторые исследования, и макросы, похоже, дают ошибки. Специальная паста также позволяет мне делать по одному.


2
2017-11-15 22:01


происхождения


Отправьте макрос. Может быть, кто-то здесь может это исправить.


ответы:


Для этого вам не нужны макросы!

Просто введите это в Sheet2 и адаптируйте имя листа в формулах:

  • A1: = OFFSET (Sheet1! $ A $ 1, (ROW () - 1) * 6,0)
  • A2: = OFFSET (Sheet1! $ A $ 1, (ROW () - 1) * 6 + 1,0)
  • A3: = OFFSET (Sheet1! $ A $ 1, (ROW () - 1) * 6 + 2,0)
  • A4: = OFFSET (Sheet1! $ A $ 1, (ROW () - 1) * 6 + 3,0)
  • A5: = OFFSET (Sheet1! $ A $ 1, (ROW () - 1) * 6 + 4,0)

Затем отметьте записи, которые вы только что сделали, и перетащите их до тех пор, пока это необходимо .. Готово!


6
2017-11-15 22:56





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

Я не жил в Штатах с конца 1970-х годов, но наши два адреса в Детройте имели разное количество строк. Решение формулы полагается на каждый адрес, имеющий одинаковое количество строк, поэтому я не рассматриваю его как адекватное решение.

В Листе 1 я разместил следующие английские адреса. Первый - типичный адрес Великобритании. Остальные два являются реальными (за исключением имени и почтового индекса), но менее обычны. Второй - это деревенский адрес с названиями домов, а не номерами, а местный город включен в дополнение к названию деревни. Третий адрес является самым необычным, поскольку у него нет названия улицы. Как следует из адреса, дом был встроен в руины того, что когда-то было западным фронтом аббатства Бери-Сент-Эдмундс.

John Smith
5 Acacia Avenue
York
Yorkshire
YO3 2RG

Sarah Jones
Lilac Cottage
Chapel Lane
Houghton
Huntingdon
Cambridgeshire
CB12 4TG

Alice Green
1 The West Front
Abbey Ruins
Bury St Edmunds
IP33 1RS

Следующий макрос скопирует эти адреса в Sheet2 в стиле, который вы ищете.

Sub Test2()

  Dim Col1Crnt As Integer
  Dim Col1Max As Integer
  Dim Col2Crnt As Integer
  Dim Sheet1() As Variant
  Dim Row1Crnt As Integer
  Dim Row1Max As Integer
  Dim Row2Crnt As Integer

  With Sheets("Sheet1")
    ' Find the last used row in Sheet1
    Row1Max = .Cells.Find("*", .Range("A1"), xlFormulas, _
                                            , xlByRows, xlPrevious).Row
    ' Load column 1 to Sheet1.
    Sheet1 = .Range(.Cells(1, 1), .Cells(Row1Max, 1)).Value
    ' Although I am only loading one column, Sheet 1 will be a 2D array
    ' with the row as the first dimension and the column as the second.
    ' I have loaded Sheet1 to an array because switching between
    '  worksheets is very slow.
  End With

  With Sheets("Sheet2")
    Row2Crnt = 1
    Col2Crnt = 1
    For Row1Crnt = 1 To Row1Max
      If Sheet1(Row1Crnt, 1) = "" Then
        ' blank line
        If Col2Crnt <> 1 Then
          ' Only advance row for first blank row
          Row2Crnt = Row2Crnt + 1
          Col2Crnt = 1
        End If
      Else
        .Cells(Row2Crnt, Col2Crnt).Value = Sheet1(Row1Crnt, 1)
        Col2Crnt = Col2Crnt + 1
      End If
    Next
  End With

End Sub

Надеюсь это поможет


1
2017-11-21 11:21



Ваш ответ вообще не был опубликован, по крайней мере, он не показан как удаленный здесь. Хорошо, что ты проверил! - slhck