4

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

от а1 до б1,
от а2 до с1,
от a3 до d1,
от а4 до е1,
от a5 до f1,
от а6 до g1,
от а7 до ч1,
от a8 до i1,

от а9 до б2
от А10 до С2
от А11 до D2
от А12 до Е2
с13 по F2
с 14 по G2
с15 до H2
с16 по I2

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

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

3 ответа3

2

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

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

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

Картинка, чтобы прояснить ситуацию:

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

2

Вот решение 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
0

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

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

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

Быстрее в некоторых обстоятельствах.

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