Преобразовать каждые все 5 строк в столбец

Мне нужно помочь вам, потому что я хотел бы преобразовать данные в свой Excel.

Пример:

Я хотел бы перейти в эту форму:

У вас есть какие-нибудь советы для этого? Я "базовый" пользователь excel.

Пожалуйста, если мне нужно использовать VBA, дайте подробное описание: D

Спасибо заранее.


1
100
4

Ответы:

Используйте функцию TOCOL().

=TOCOL(A1:C5,,TRUE)

Ссылка на функцию:

ТОКОЛ()


Вы можете попробовать следующую формулу (обычно вводится) в O365:

=INDEX($A$1:$C$5,0,CEILING(ROWS($A$1:A1)/5,1))

Для установки, изображенной ниже:

Возможно, вам придется использовать CTRL+SHIFT+ENTER, если у вас другая версия Excel.


Решено

В столбец за столбцом

Option Explicit

Sub ToColumn()
    
    Const SRC_RANGE As String = "A2:C6"
    Const DST_FIRST_CELL As String = "E2"
    
    Dim ws As Worksheet: Set ws = ActiveSheet ' improve!
    
    Dim srg As Range: Set srg = ws.Range(SRC_RANGE)
    Dim Data(): Data = ToCol(srg, True)
    
    Dim drg As Range: Set drg = ws.Range(DST_FIRST_CELL).Resize(UBound(Data, 1))
    drg.Value = Data

End Sub

Function ToCol( _
    ByVal rg As Range, _
    Optional ByVal ByColumns As Boolean = False) _
As Variant()
    
    Dim sData(), srCount As Long, scCount As Long
    Dim dData(), IsNotSingleCell As Boolean
    
    With rg.Areas(1)
        
        srCount = .Rows.Count
        scCount = .Columns.Count
        
        If srCount * scCount = 1 Then
            ReDim dData(1 To 1, 1 To 1): dData(1, 1) = .Value
        Else
            sData = .Value
            ReDim dData(1 To srCount * scCount, 1 To 1)
            IsNotSingleCell = True
        End If
    
    End With
    
    If IsNotSingleCell Then
        
        Dim sr As Long, sc As Long, dr As Long
        
        If ByColumns Then
            For sc = 1 To scCount
                For sr = 1 To srCount
                    dr = dr + 1
                    dData(dr, 1) = sData(sr, sc)
                Next sr
            Next sc
        Else
            For sr = 1 To srCount
                For sc = 1 To scCount
                    dr = dr + 1
                    dData(dr, 1) = sData(sr, sc)
                Next sc
            Next sr
        End If
    
    End If
        
    ToCol = dData
        
End Function

(Устаревшие) решения для формул

По столбцам

=INDEX($A$2:$C$6,
    MOD(ROWS($A$2:$A2)-1,ROWS($A$2:$A$6))+1,
    QUOTIENT(ROWS($A$2:$A2)-1,ROWS($A$2:$A$6))+1)       

По строкам

=INDEX($A$2:$C$6,
    QUOTIENT(ROWS($A$2:$A2)-1,COLUMNS($A$2:$C$2))+1,
    MOD(ROWS($A$2:$A2)-1,COLUMNS($A$2:$C$2))+1)

По столбцам

Если данные начинаются с A1...

E1:E15  =MOD(ROW()-1,5)+1
F1:F15  =QUOTIENT(ROW()-1,5)+1
G1:G15  =INDEX($A$1:$C$5,MOD(ROW()-1,5)+1,QUOTIENT(ROW()-1,5)+1)

... но это не так.

I2:I16   =MOD(ROW()-2,5)+1
J2:J16  =QUOTIENT(ROW()-2,5)+1
K2       =INDEX($A$2:$C$6,
             MOD(ROWS($A$2:$A2)-1,ROWS($A$2:$A$6))+1,
             QUOTIENT(ROWS($A$2:$A2)-1,ROWS($A$2:$A$6))+1)

По строкам

Если данные начинаются с A1...

M1:M15  =QUOTIENT(ROW()-1,3)+1
N1:N15  =MOD(ROW()-1,3)+1
O1:O15  =INDEX($A$1:$C$5,QUOTIENT(ROW()-1,3)+1,MOD(ROW()-1,3)+1)

... но это не так.

Q2:Q16  =QUOTIENT(ROW()-2,3)+1
R2:R16  =MOD(ROW()-2,3)+1
S2      =INDEX($A$2:$C$6,
            QUOTIENT(ROWS($A$2:$A2)-1,COLUMNS($A$2:$C$2))+1,
            MOD(ROWS($A$2:$A2)-1,COLUMNS($A$2:$C$2))+1)

Если вы хотите, чтобы результат все еще находился в первом столбце, что-то вроде изображения ниже (до/после):

==>

Sub test()
Dim rg As Range: Dim i As Integer

With ActiveSheet 'change as needed
    Set rg = .Range("A2", .Range("C2").End(xlDown)) 'change as needed
End With

For i = 1 To rg.Columns.Count - 1
    rg.End(xlDown).Offset(1, 0).Resize(rg.Rows.Count, 1).Value = _
    rg.Columns(1).Offset(0, i).Value: rg.Columns(1).Offset(0, i).ClearContents
Next

End Sub

rg — это диапазон данных (в примере — от ячейки A2 до C6).
он зацикливается, используя i в качестве значения смещения, и каждый цикл заполняет последнюю пустую строку значением диапазона смещения.


Интересные вопросы для изучения

VBA | Попытка получить совпадающие значения, чтобы иметь определенные результаты на другом листеОшибка Excel при использовании кнопки, созданной в пользовательском редакторе пользовательского интерфейса. Не удается запустить макрос «***». Макросы могут быть недоступны в этой книге или во всех макросахДвухмерное вращение объекта вдоль пользовательской осиОдна формула с несколькими Countifs и где таблица данных содержит повторяющиеся значения в более чем одном столбцеКак я могу разрешить пользователю изменять ячейку в excel только при определенных условиях?VBA | Попытка получить совпадающие значения, чтобы иметь определенные результаты на другом листеОшибка Excel при использовании кнопки, созданной в пользовательском редакторе пользовательского интерфейса. Не удается запустить макрос «***». Макросы могут быть недоступны в этой книге или во всех макросахДвухмерное вращение объекта вдоль пользовательской осиКак я могу разрешить пользователю изменять ячейку в excel только при определенных условиях?Загрузка файла VBA в SharePoint с использованием REST API (загрузка уже реализована в примере)