2014-12-03 27 views
0

當然,在VBA編輯其他人羣宏時,我絕對是一個初學者。我正在處理一個項目,需要將第一個數據透視行和列標題中的數據合併到一個新的工作表中。我需要在A列(它可以是數據和計數變量)乘以每行的列數(也可以是數據和計數變量),這樣,如果我有3列( A,B,C)和兩行(1,2)之後,我將有6行3列,前3行全部具有與原始行1相同的數據,而後面的3行具有相同的數據作爲原始行2.按列計數擴展行數VBA

然後,我必須粘貼列以匹配行以及數據以匹配行和列。

原始支點:

enter image description here

進球后宏:

enter image description here

我知道我需要數列數聲明一個變量,然後使用該變量複製使用循環將這些行放到新的工作表中。我不相信使用第二個主鍵會起作用,因爲即使我使用表格視圖,它也不會使用列標題單元格值。我試過編寫一些代碼,但我不能在家裏的電腦上看到它。

任何有關如何通過計算列數和擴大行的第一部分的建議將不勝感激。

+0

我提供了一個答案來完成你想要的,但我真的認爲你的原始表格處於更好的標準化格式。出於好奇,你爲什麼要把它分解成Sheet2的形式? – peege 2014-12-03 02:53:07

+0

謝謝PJ我會在我的最後測試一下。這是因爲項目的後續步驟要求accnt和value部分彼此相鄰以上傳到公司系統中。 – concs10 2014-12-03 03:03:09

+0

解釋它。優秀。 – peege 2014-12-03 03:50:31

回答

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 
+0

感謝這正是我所需要的,現在我知道如何做VBA中的循環。 – concs10 2014-12-03 03:11:47

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