2016-04-22 113 views
-1

我試圖從一個表格(行中)複製單元格並將它們粘貼到另一個表格中(基本上轉置它)。我編寫了代碼,但無法繞過粘貼單元和pastespecial命令。複製單元格的長度因每行而異,所以如何使其選擇動態並以相同方式粘貼?截至目前,我正在考慮粘貼一個特定的長度,並在最後刪除空行。請參閱下面的代碼。如果有人能給我一個輸入或想法,那將是非常棒的。謝謝!!在excel中使用VBA轉置循環中的單元格

Sub Data_Sort_Test() 

Dim i As Long, j As Long, k As Long, lastrow1 As Long, lastrow2 As Long 
Dim rng As Range, row As Range, rowd1 As Range, cell As Range 
Dim bidtype As String 
k = 1 
lastrow1 = Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).row 

For i = 1 To lastrow1 
bidtype = Sheets("Sheet2").Cells(i, "A").Value 

Sheets("Sheet1").Activate 
lastrow2 = Sheets("Sheet1").Range("B" & Rows.Count).End(xlUp).row 

For j = 1 To lastrow2 
If Sheets("Sheet1").Cells(j, "B").Value = bidtype Then 

Sheets("Sheet2").Activate 
Sheets("Sheet2").Range(Cells(i, "B"), Cells(i, "K")).Copy 
Sheets("Sheet3").Activate 
Sheets("Sheet3").Range(Cells(j, "C"), Cells(j, "L")).Select 
ActiveSheet.Paste 'Special Transpose:=True 
'k = k + 1 
End If 
Next j 
Application.CutCopyMode = False 
Next i 

End Sub 
+0

「但是無法解決粘貼單元格和pastespecial命令」是什麼意思?你有沒有得到一個錯誤 - 如果是的話是什麼?它沒有按照你的預期行事 - 如果是這樣的話? – CHill60

+0

如果您嘗試進行轉置,請從水平轉換爲垂直,爲什麼要將水平範圍粘貼到水平範圍? –

+0

@ CHill60我的意思是我無法編寫代碼進行轉置。我得到了1004運行時錯誤。 – adr0327

回答

1

試試這個,讓我知道,如果它的工作原理:

Sub Data_Sort_Test() 

Dim i As Long, j As Long, k As Long, lastrow1 As Long, lastrow2 As Long 
Dim rng As Range, row As Range, rowd1 As Range, cell As Range 
Dim bidtype As String 
Dim tWs As Worksheet 

Set tWs = Sheets("Sheet3") 
With Sheets("Sheet2") 
k = 1 
lastrow1 = .Range("A" & .Rows.Count).End(xlUp).row 

For i = 1 To lastrow1 
    bidtype = .Cells(i, "A").Value 

    lastrow2 = Sheets("Sheet1").Range("B" & Sheets("Sheet1").Rows.Count).End(xlUp).row 
    For j = 1 To lastrow2 
     If Sheets("Sheet1").Cells(j, "B").Value = bidtype Then 

      .Range(.Cells(i, "B"), .Cells(i, "K")).Copy 

      tWs.Range(tWs.Cells(j, "C"), tWs.Cells(j, "L")).PasteSpecial 'Transpose:=True 

     End If 
    Next j 
    Application.CutCopyMode = False 
Next i 
End with 
End Sub 

我刪除了所有的.Select.Activate並直接與適當的血統替換它們。這將加快代碼並使其更易於閱讀。

+0

我正在處理它,並能夠翻轉它,但我有rows.count命令的問題。請看一看。 – adr0327

0

@Scott我已經把轉置,但不知何故rows.count有問題。你怎麼看??

Sub Data_Sort_Test() 

Dim i As Long, j As Long, k As Long, lastrow1 As Long, lastrow2 As Long 
Dim rng As Range, row As Range, rowd1 As Range, cell As Range 
Dim bidtype As String 
Dim tWs As Worksheet 

Set tWs = Sheets("Sheet3") 
With Sheets("Sheet2") 
k = 1 
lastrow1 = .Range("A" & .Rows.Count).End(xlUp).row 

For i = 1 To lastrow1 
bidtype = .Cells(i, "A").Value 

lastrow2 = Sheets("Sheet1").Range("B" & **strong text**Sheets("Sheet1").Rows.Count).End(xlUp).row 
For j = 1 To lastrow2 
    If Sheets("Sheet1").Cells(j, "B").Value = bidtype Then 

     .Range(.Cells(i, "B"), .Cells(i, "K")).Copy 

     tWs.Range("B" & Rows.Count).End(xlUp).Offset(0, 0).PasteSpecial Paste:=xlPasteValues, Transpose:=True 
     tWs.Range("B1").Delete shift:=xlUp 

    End If 
Next j 
Application.CutCopyMode = False 
Next i 
End With 
End Sub 
+0

錯誤在說什麼? –

+0

另外我相信你不能同時粘貼值和轉置。它不這樣工作。它的全部或沒有轉置。 –

+0

@ScottCraner它沒有任何錯誤它編譯正確,但粘貼它時,循環開始時,循環開始時row.count的單元格(row.count)不正確,因爲row.count在進入循環之前與內部不同。 – adr0327