2017-07-06 62 views
0

我試圖將數據從一張傳輸到另一張,格式如圖片所示。表一中的數據長度未知。我正在使用的代碼將以正確的格式放置數據,但所有數據都以最後一行的數據結束。只從最後一行開始循環傳輸數據

For b = 1 To l - 1 Step 1 
    For c = 0 To (l - 2) * 4 Step 4 

     idvalue = Sheet1.Cells(b + 1, 1).Value 
     Sheet3.Cells(c + 1, 2).Value = idvalue 
     namevalue = Sheet1.Cells(b + 1, 2).Value 
     Sheet3.Cells(c + 2, 2).Value = namevalue 
     amountvalue = Sheet1.Cells(b + 1, 3).Value 
     Sheet3.Cells(c + 3, 2).Value = amountvalue 
     commentsvalue = Sheet1.Cells(b + 1, 4).Value 
     Sheet3.Cells(c + 4, 2).Value = commentsvalue 

    Next c 
Next b 

enter image description here enter image description here

+0

試試看看這個代碼。一個通用的解決方案,不關心你的表的大小,你也可以使用它的任何表格將其轉換爲長格式。 https://www.chicagocomputerclasses.com/convert-crosstab-table-database-list-table-excel-vba-macro-code/ – Masoud

回答

0

這裏有一個解決方案,使代碼更容易閱讀。

很明顯,您還需要將For循環聲明更改爲需要的任何開始行/結束行。

Sub Example() 

Dim lNewRow As Long 
Dim lOldRow As Long 

lNewRow = 1 

For lOldRow = 2 To 7 

    With Sheets("Sheet3") 

     .Cells(lNewRow, 1) = "ID" 
     .Cells(lNewRow, 2) = Sheets("Sheet1").Cells(lOldRow, 1) 

     .Cells(lNewRow + 1, 1) = "NAME" 
     .Cells(lNewRow + 1, 2) = Sheets("Sheet1").Cells(lOldRow, 2) 

     .Cells(lNewRow + 2, 1) = "AMT" 
     .Cells(lNewRow + 2, 2) = Sheets("Sheet1").Cells(lOldRow, 3) 

     .Cells(lNewRow + 3, 1) = "COMMENTS" 
     .Cells(lNewRow + 3, 2) = Sheets("Sheet1").Cells(lOldRow, 4) 

    End With 

    lNewRow = lNewRow + 4 

Next 

End Sub 
+0

完美運作。謝謝! – chrisp19

+0

很高興幫助。請使用勾號將問題標記爲回答。 – jmdon

相關問題