Excel - 如何将行分配到 5 列?

Excel - 如何将行分配到 5 列?

我从一个 5 列的 Web 表中复制了数据,但不幸的是,它只给出了一个“换行符”分隔的列表。粘贴到 Excel 中会得到 1 列和多行,其中一组 5 行代表原始表中的 1 行(有 5 列)。

我如何恢复原来的 5 行?例如数据

A1
B1
C1
D1
E1
A2
B2
C2
...

A1 B1 C1 D1 E1
A2 B2 C2 D2 E2
...

我知道 transpose 命令,但这里不适用。我还发现这个问题,但我不知道如何将答案应用到我的问题上,因为我的要求有点不同。

答案1

我想建议两种可能的方法,一种是使用公式,另一种是 VBA 宏。

在此处输入图片描述

方法 1:

  • 单元格 X1 中的公式:

    =IF(INDEX($V:$V,ROW(V1)*5-5+COLUMN(A1))=0,"",INDEX($V:$V,ROW(V1)*5-5+COLUMN(A1)))
    

方法 2:

  • 要获取 VB 编辑器,请按Alt+F11或者右键单击工作表 TAB,然后从弹出菜单中点击 VIEW CODE。

  • 将此代码复制并粘贴为标准模块。

  • Alt+Q返回工作表并将文件保存为宏启用*.xlsm。

  • 运行宏。

  • 响应第一个输入框时选择 V1:V11,响应第二个输入框时选择 X7。

     Public Sub TransposeData()
    
     Dim xLRow As Long
     Dim xNRow As Long
     Dim i As Long
     Dim xUpdate As Boolean
     Dim xRg As Range
     Dim xOutRg As Range
     Dim xTxt As String
     On Error Resume Next
    
     xTxt = ActiveWindow.RangeSelection.Address
    
     Set xRg = Application.InputBox("Select data range(only one column):", "Transpose", xTxt, , , , , 8)
     Set xRg = Application.Intersect(xRg, xRg.Worksheet.UsedRange)
    
     If xRg Is Nothing Then Exit Sub
     If (xRg.Columns.Count > 1) Or _
        (xRg.Areas.Count > 1) Then
         MsgBox "the used range only contains one column", , "Transpose"
         Exit Sub
     End If
    
     Set xOutRg = Application.InputBox("Select output range(specify one cell):", "Transpose", xTxt, , , , , 8)
    
     If xOutRg Is Nothing Then Exit Sub
    
     Set xOutRg = xOutRg.Range(1)
    
     xUpdate = Application.ScreenUpdating
     Application.ScreenUpdating = False
     xLRow = xRg.Rows.Count
    
     For i = 1 To xLRow Step 5
         xRg.Cells(i).Resize(5).Copy
         xOutRg.Offset(xNRow, 0).PasteSpecial Paste:=xlPasteAll, Transpose:=True
         xNRow = xNRow + 1
     Next
     Application.ScreenUpdating = xUpdate
    
     End Sub
    

注意:

根据需要调整公式中的单元格引用。

相关内容