我从一个 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
注意:
根据需要调整公式中的单元格引用。