2

У меня есть куча строк, которые я хочу превратить в таблицу.

Есть ли способ в Excel преобразовать группу записей, каждая из которых занимает четыре строки в таблицу, где каждая из четырех строк помещается в один из четырех столбцов?

В основном это:

a
b
c
d

a
b
c
d

в

 a b c d
 a b c d

4 ответа4

4

Я не с ума схожу, моя голова знает, как это сделать для ВСЕХ, но вы можете вставить вот так ...

  • выберите один набор abcd
  • скопировать клетки
  • редактировать -> вставить специальный
  • [x] кнопка транспонирования внизу

Это будет сделано для ЭТОГО набора a/b/c/d. Я знаю, что это не полный ответ, но если их не так много, это может сработать.

Вот быстрый макрос, который сделает транспонирование за вас, если хотите. Просто поместите все в столбец "A", и он поместит все в B1, C1, D1 и т.д. Строки обозначены пробелами, а два пробела подряд означают "стоп".

исправлено, теперь должно работать до 255 столбцов. и да, вы можете использовать параметр Transpose в функции pastespecial в vba, но это только усложняет код для того же результата, поэтому я оставил его простым

Sub Macro1()
    lastBlank = False
    col = 2 'B
    row = 1
    For Each cell In Range("A:A")
        v = Trim(CStr(cell))
        If v = "" Then
            If lastBlank = True Then Exit For
            lastBlank = True
            col = 2 'B
            row = row + 1
        Else
            Cells(row, col) = v
            col = col + 1
            lastBlank = False
        End If
    Next
End Sub
  • Сервис-> Макросы-> Редактор Visual Basic
  • [меню] Вставка -> Модуль
  • Вставьте макрос в (должен быть в 'Module1')
  • Беги (зеленая стрелка). Или ... закрыть и инструменты-> макрос-> макросы -> [запустить]
1

Если кто-то все еще читает эту статью в блоге, вот еще один способ сделать это (просто установить, в какой строке первый фрагмент данных используется с помощью константы FirstRow, а затем отключить ее)...

Sub TransposeRowsFourAtATime()  
  Dim X As Long, LastRow As Long, OffSetCounter As Long  
  Const FirstRow As Long = 2  
  LastRow = Cells(Rows.Count, "A").End(xlUp).Row  
  For X = FirstRow To LastRow Step 5  
    Cells(FirstRow, "A").Offset(OffSetCounter).Resize(1, 4) = _  
       WorksheetFunction.Transpose(Cells(X, "A").Resize(4))  
  OffSetCounter = OffSetCounter + 1  
  Next  
  Range(Cells(FirstRow + OffSetCounter, "A"), Cells(LastRow, "A")).Clear  
End Sub  

Рик Ротштейн (MVP - Excel)

0

Есть отличная функция транспонирования . Введите функцию в ячейку, в которой вы хотите запустить транспонирование, затем используйте функции edit-> fill, чтобы скопировать функцию вбок (и при необходимости вниз).

Должен быть способ исправить индексирование строк (для учета пробелов) с помощью функции ADDRESS .

0

Вы можете ввести эти формулы (при условии, что ваши данные начинаются с A1) и заполнить, насколько вам нужно

B1            =IF(ISBLANK(A5),A1,"")
C1            =IF(ISBLANK(A5),A2,"")
D1            =IF(ISBLANK(A5),A3,"")
E1            =IF(ISBLANK(A5),A4,"")

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

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