Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何将此数据集转换为此特定顺序?_Excel_Vba_Transpose_Excel 2016 - Fatal编程技术网

Excel 如何将此数据集转换为此特定顺序?

Excel 如何将此数据集转换为此特定顺序?,excel,vba,transpose,excel-2016,Excel,Vba,Transpose,Excel 2016,我使用的是Excel 2016,我的数据集有492行,没有标题。数据从单元格A1开始 数据集的提取如下所示: 我想将此数据集转换为以下格式: 我是VBA新手,很难找到正确的解决方案。我已尝试将转置一步一步地记录为宏,并查看了VBA代码,但仍无法将其组合在一起。尝试此代码,但在调整顶部的两个常量以匹配工作表上的事实之前。执行代码时,包含数据的工作表必须处于活动状态 Sub TransposeData() Const FirstDataRow As Long = 2

我使用的是Excel 2016,我的数据集有492行,没有标题。数据从单元格A1开始

数据集的提取如下所示:

我想将此数据集转换为以下格式:


我是VBA新手,很难找到正确的解决方案。我已尝试将转置一步一步地记录为宏,并查看了VBA代码,但仍无法将其组合在一起。

尝试此代码,但在调整顶部的两个常量以匹配工作表上的事实之前。执行代码时,包含数据的工作表必须处于活动状态

Sub TransposeData()

    Const FirstDataRow As Long = 2              ' presuming row 1 has headers
    Const YearColumn As String = "A"            ' change as applicable

    Dim Rng As Range
    Dim Arr As Variant, Pos As Variant
    Dim Rl As Long, Cl As Long
    Dim R As Long, C As Long
    Dim i As Long

    With ActiveSheet
        Cl = .UsedRange.Columns.Count - .UsedRange.Column + 1
        Rl = .Cells(.Rows.Count, Columns(YearColumn).Column).End(xlUp).Row
        Set Rng = Range(.Cells(FirstDataRow, YearColumn), .Cells(Rl, Cl))
    End With
    Arr = Rng.Value
    ReDim Pos(1 To (UBound(Arr) * UBound(Arr, 2)), 1 To 2)

    For R = 1 To UBound(Arr)
        For C = 2 To UBound(Arr, 2)
            i = i + 1
            Pos(i, 1) = Arr(R, 1)
            Pos(i, 2) = Arr(R, C)
        Next C
    Next R

    R = Rl + 5                                  ' write 5 rows below existing data
    Set Rng = ActiveSheet.Cells(R, YearColumn).Resize(i, 2)
    Rng.Value = Pos
End Sub

发布您尝试过的代码和特定问题,这样您就更有可能获得帮助。这是一个简单的取消PIVOT操作。使用VBA或Power QueryTanks的例子很多。正是我所需要的。