2013-07-27 35 views
0

我使用VB顯示在Excel中的大數據。他們出現在A1:A3000中。我調換A1:A6到B1:使用此代碼G1:移調在Excel中使用VB

sheet.Range("A1:A6").Copy() 
sheet.Range("B1").PasteSpecial(Transpose:=True) 

它的工作,但我面對的麻煩重複該過程高達A3000。基本上我想1列X3000行數據轉換成6列×500行的數據即最終的結果應該有500行和列B:摹

+0

如果您的Excel版本或工作簿的版本是2003或更早版本,紙張可能只有255列。 –

+0

製作6列1列絕對不是關於轉座 –

+0

哦......它是重複的!這就是爲什麼我發佈答案後,我沒有看到答案。因爲我正在看另一個帖子! – stenci

回答

0

這是否對你的工作?

Sub Test() 
    Dim R1 As Long, R2 As Long, C2 As Long 
    R2 = 1 
    C2 = 2 
    For R1 = 1 To ActiveSheet.UsedRange.Rows.Count 
    Cells(R2, C2) = Cells(R1, 1) 
    If C2 < 7 Then 
     C2 = C2 + 1 
    Else 
     R2 = R2 + 1 
     C2 = 2 
    End If 
    Next R1 
End Sub 
+0

它給 「(從HRESULT異常:0x80020003(DISP_E_MEMBERNOTFOUND))會員未找到」。誤差在線路'細胞(R2,C2)=細胞(R1,1)'。 – slyclam

+0

stenci的代碼適用於我。如果你是從VB.NET運行它,那麼你從VBA翻譯它的方式可能是一個問題。在VB.NET中,您可能需要明確使用「Cells(..)。Value」。 –

0

我只是檢查一個空單元格(「」)來決定何時停止。在一開始就確定的行數會更有效率(而不是每次都檢查空單元格),但與3000行,這不是什麼大不了的事:

Sub TransA() 
    Dim i As Long 
    Dim j As Integer 

    Application.ScreenUpdating = False 
    j = 1 
    For i = 1 To Rows.Count Step 6 
     If Cells(i, "A") = "" Then 
      Exit For 
     Else 
      Range(Cells(j, "B"), Cells(j, "G")).Formula = _ 
       Evaluate("=TRANSPOSE(A" & i & ":A" & i + 5 & ")") 
      j = j + 1 
     End If 
    Next i 
    Application.ScreenUpdating = True 
End Sub 

它可以被修改爲使用複製/ PasteSpecial的,但我喜歡Evaluate