Как разделить данные Excel из 1 столбца на 8 столбцов, сохранив при этом определенный порядок данных?

Как разделить данные Excel из 1 столбца на 8 столбцов, сохранив при этом определенный порядок данных?

Мне нужно сохранить порядок данных. Поэтому, чтобы объяснить, мне нужно переместить данные из ячейки

a1 до b1,
a2 до c1,
a3 до d1,
a4 до e1,
a5 до f1,
a6 до g1,
a7 до h1,
a8 до i1,

a9 в B2
a10 в C2
a11 в D2
a12 в E2
a13 в F2
a14 в G2
a15 в H2
a16 в I2

Промыть и повторить, пока не пройдут все 24000 записей в столбце A.

Конечно, есть простой способ сделать это через макрос или vba? Может быть, функция в последних версиях уже может это делать?

решение1

Вот решение VBA:

Option Explicit
Private Sub ReArrangeCells()

  Dim ws As Worksheet, LastRow As Long
  Set ws = Excel.ActiveSheet

  LastRow = Range("A65536").End(xlUp).Row

  Dim i As Long, j As Long, FromCell As Range, ToCell As Range, sNewCol As String, sNewRow As String
  For i = 1 To LastRow

    Set FromCell = ws.Range("A" & i)                       'the cell we want to move
    sNewCol = IIf(i Mod 8 = 0, Chr$(72), Chr$((i Mod 8) + 64))
    sNewRow = IIf(i Mod 8 = 0, (i \ 8), (i \ 8) + 1)
    Set ToCell = ws.Range(sNewCol & sNewRow)               'the cell we want to copy the data to

    FromCell.Copy ToCell
    If i <> 1 Then FromCell.Clear

    If i Mod 100 = 0 Then DoEvents

  Next i

End Sub

решение2

Вот решение. Оно предполагает следующее:

  1. Все исходные данные находятся в столбце A.
  2. Столбец B содержит только индекс строки.

Формула: =INDIRECT(CONCATENATE("a",$B2*8 + col_offset))где col_offset — номер столбца (индексированный с нуля). Таким образом, в первом столбце это будет , =INDIRECT(CONCATENATE("a",$B2*8))а в 8-м столбце это будет =INDIRECT(CONCATENATE("a",$B2*8+7)).

Картинка для большей ясности:

введите описание изображения здесь

Редактировать:Новая формула: =INDIRECT(CONCATENATE("a",(ROW()-2)*8+(COLUMN()-3)))где -2и -3— смещения строк и столбцов. Просто вставьте это во все ячейки, где вы хотите, чтобы отображались ваши данные. (это решение лучше, потому что столбец B теперь можно удалить)

решение3

Ответы VBA лучше всего подходят для обработки большого объема данных, но я укажу, что вы также можете сделать это с помощью копирования/вставки с помощью "Транспонирования". Это простое решение правой кнопкой мыши для небольших нужд. Это применимо к 2010 году, и я думаю, что к 2007 году тоже.

Похоже, я пока тоже не умею делать изображения.

  • Скопируйте ячейки вертикально
  • Щелкните правой кнопкой мыши по другой ячейке и используйте четвертый параметр в разделе «Параметры вставки» (выглядит как два синих прямоугольника под прямым углом).

В некоторых случаях быстрее.

Связанный контент