2013-07-27 6 views
0

VB에서 Excel로 큰 데이터를 표시하고 있습니다. 그들은 A1 : A3000에 나타납니다. 나는 A1을 전치하고 있습니다 : A6를 B1에 : G1은이 코드를 사용 :VB를 사용하여 Excel에서 변환하십시오.

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

그것은 일하고있어하지만 난 A3000 개까지이 과정을 반복에 대한 문제에 직면하고있다. 기본적으로 1 열 x3000 행 데이터를 6 열 x 500 행 데이터로 변환하려고합니다. 즉, 최종 결과는 500 행과 열이어야합니다. B : G

+0

Excel 2003 또는 이전 버전 인 경우 시트에는 255 개의 열만있을 수 있습니다. –

+0

그리고 1 열로 6 열을 만드는 것은 확실히 전이에 관한 것이 아닙니다. –

+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

셀 (R2, C2) = 셀 (R1, 1)'줄에 "구성원을 찾을 수 없습니다 (HRESULT 예외 : 0x80020003 (DISP_E_MEMBERNOTFOUND))"오류가 발생합니다. – 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을 좋아한다.

관련 문제