如何将行转置为以特定值开头的两个单元格之间的列?

How to transpose rows into columns between two cells which starts with certain value?

我有一个 excel sheet,其中包含具有特定地理参数的行。我想将 File 和下一个 File 之间的所有行转置到相邻的列中。原来的 sheet 就像图片 - 1 中的那个。我想把它转置成图片 - 2 中的那个。

对于一行 - 一列,我使用了这段代码 http://www.mrexcel.com/forum/excel-questions/79645-copying-alternate-rows-data-into-column.html 并且效果很好。但不知道如何对多行进行 - 列转置

这适用于 Google 表格。 作为示例,我有 3 条记录,每条记录有 4 个项目,所以我有从 A1 到 A12 的数据代表我的 3 条记录。 您想要创建一个列,例如 B,其中的数字从 0 到任意。

然后在单元格 C1 中你可以有类似 =INDEX($A$1:$A$12,$B1*4+1,1)

在单元格 D1 中你可以有类似的东西 =INDEX($A$1:$A$12,$B1*4+2,1)

在单元格 E1 中你可以有类似的东西 =INDEX($A$1:$A$12,$B1*4+3,1)

在单元格 F1 中你可以有类似的东西 =INDEX($A$1:$A$12,$B1*4+4,1)

所以我完成了第一行,然后我只需单击并拖动以填充其余行,因为 $B1 1 没有美元符号,它会自动从 $ 读取下一行B2 和 $B3 并抓取了正确的数据。

这是一个VBA解决方案

Sub TransposeData()

    Const FirstRow As Long = 1
    Const WorkSheetName As String = "Sheet4"
    Dim arData, v
    Dim List As Object
    Set List = CreateObject("System.Collections.ArrayList")
    Dim NextRow As Long, x As Long

    With Worksheets(WorkSheetName)
        arData = .Range("A1", .Range("A" & .Rows.Count).End(xlUp)).Value
        NextRow = WorksheetFunction.CountA(.Range("B:B")) + 1

        For Each v In arData
            If InStr(v, "File:") And List.Count > 0 Then

                .Cells(NextRow, "B").Resize(1, List.Count) = List.ToArray
                List.Clear
                NextRow = NextRow + 1

            End If
            List.Add v
        Next
        If List.Count > 0 Then .Cells(NextRow, "B").Resize(1, List.Count) = List.ToArray
    End With

End Sub