按列数VBA展开行数

时间:2014-12-03 02:21:33

标签: excel vba excel-vba pivot

对于VBA来说,除了编辑其他人的宏外,我绝对是一个初学者。我正在处理一个项目,我需要将从第一个数据透视行和列标题中获取的数据合并到一个新的工作表中。

我需要获取A列中的行值(可以在数据和计数中变量)将每行乘以列数(也可以在数据和计数中变量),这样如果我有3列(A在宏之前,我将有6行和3列,其中前3行与原始行1具有相同的数据,而后3行具有相同的数据原来的第2行。

然后我必须粘贴列以匹配行以及与行和列匹配的数据。

Original Pivot:

enter image description here

宏观后的目标:

enter image description here

我知道我需要计算声明该变量的列数,然后使用该变量使用循环将行复制到新工作表。我不相信使用第二个枢轴将工作,因为它不会使用列标题单元格值,即使我做表格视图。我已经尝试过编写一些代码,但是因为我在家里的电脑上,所以无法实现。

任何关于如何通过计算列数和扩展行的第一部分的建议将非常感激。

2 个答案:

答案 0 :(得分:0)

你走了。这应该做你想要的。您只需要将Sheet2(" A1")的值手动设置为Accnt ..

<强>试验:

Private Sub FormShift()

Dim tRow As Long     'target Row
Dim lastCol As Long
Dim lastRow As Long

lastCol = Sheets("Sheet1").Cells(1, Columns.Count).End(xlToLeft).Column
lastRow = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
tRow = 2

For iRow = 2 To lastRow
    For iCol = 2 To lastCol
        Sheets("Sheet2").Cells(tRow, 1) = Sheets("Sheet1").Cells(iRow, 1)
        Sheets("Sheet2").Cells(tRow, 2) = Sheets("Sheet1").Cells(1, iCol)
        Sheets("Sheet2").Cells(tRow, 3) = Sheets("Sheet1").Cells(iRow, iCol)
        tRow = tRow + 1
    Next iCol
Next iRow

End Sub

答案 1 :(得分:0)

Sub horz_vert()

noOfColumns = Worksheets("Sheet1").Cells(1, Columns.Count).End(xlToLeft).Column - 1
noOfRows = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row - 1

Worksheets("Sheet2").Cells(1, 1) = Worksheets("Sheet1").Cells(1, 1)

For j = 1 To noOfRows
 For I = 1 To noOfColumns
 Worksheets("Sheet2").Cells((I + 1) + (j - 1) * noOfColumns, 1) = Worksheets("Sheet1").Cells(j + 1, 1)
 Worksheets("Sheet2").Cells((I + 1) + (j - 1) * noOfColumns, 2) = Worksheets("Sheet1").Cells(1, I + 1)
 Worksheets("Sheet2").Cells((I + 1) + (j - 1) * noOfColumns, 3) = Worksheets("Sheet1").Cells(j + 1, I + 1)
 Next
Next

End Sub