2013-07-26 2 views
-1

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

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

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

+0

질문 더 흥미를 변환한다. 무엇을 시도 했습니까? 시도했을 때 어떤 일이 일어 났습니까? –

+0

@pnuts : 예 1x3000을 6x6x5로 변환하고 싶습니다. – slyclam

+0

@TimWilliams : 내 질문과 포함 된 코드를 수정했습니다. 가능한 경우 도와주세요. – slyclam

답변

1

이 기능이 작동합니까?

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

멈 추면'Ctrl + G '를 눌러 즉시 창을 열고'? cells (R1,1)'을 입력하십시오. 그것은 무엇을 말하는가? – stenci

+0

"셀이 선언되지 않았으며 보호 수준으로 인해 액세스 할 수 없습니다"라는 메시지가 표시됩니다. – slyclam

0

코드는 VBA에 있습니다. 대신 복사/붙여 넣기를하는
는, 상기 범위의 함량 (즉 어레이)의 실제 코드

Option Explicit 

Sub Tabulate(ByVal src As Range, ByVal splitSize As Integer, _ 
ByVal destRangeStart As Range) 
Dim i As Integer 
Dim rangeToCopy As Range 
Dim rangeToPasteOver As Range 

Set rangeToCopy = src 
Set rangeToPasteOver = destRangeStart 

Debug.Print Now 
Application.ScreenUpdating = False 
For i = 1 To src.Cells.Count Step splitSize 
' rangeToCopy.Resize(splitSize).Copy 
' rangeToPasteOver.PasteSpecial Transpose:=True 

    rangeToPasteOver.Resize(ColumnSize:=splitSize).Value = _ 
     Transform2DArray(rangeToCopy.Resize(splitSize).Value) 

    Set rangeToCopy = rangeToCopy.Offset(splitSize) 
    Set rangeToPasteOver = rangeToPasteOver.Offset(1) 
Next 
Application.ScreenUpdating = True 

Debug.Print Now 
End Sub 
Function Transform2DArray(ByVal src As Variant) As Variant 
Dim returnValue As Variant 

Dim rowCtr As Long 
Dim colCtr As Long 

Dim destColCtr As Long 
Dim destRowCtr As Long 


Dim lRows As Long 
Dim uRows As Long 

Dim lCols As Long 
Dim uCols As Long 

lRows = LBound(src, 1) 
uRows = UBound(src, 1) 

lCols = LBound(src, 2) 
uCols = UBound(src, 2) 

ReDim returnValue(lCols To uCols, lRows To uRows) 

destRowCtr = lCols 

For colCtr = lCols To uCols 
    destColCtr = lRows 
    For rowCtr = lRows To uRows 
     returnValue(destRowCtr, destColCtr) = src(rowCtr, colCtr) 
     destColCtr = destColCtr + 1 
    Next 
    destRowCtr = destRowCtr + 1 
Next 

Transform2DArray = returnValue 
End Function 
관련 문제