2012-03-08 2 views
2

데이터가 채워진 열 A:ALC이 있고 각 열에는 다양한 수의 행이 있습니다. 가능하다면 두 개 쌍으로 열을 쌓을 매크로가 필요합니다. 예를 들어, 열 C은 열 A 바로 아래에 있고 열 D은 열 B 바로 아래에 있고 모든 열에 대해서도 마찬가지입니다. A:ALC. 명백하게 동일한 (AB 8 행, 열 CD 등등 5 행 및이있는 예를 들면 열) 각 열의 쌍에 대한 데이터의 양, 그러나 행의 수는있다여러 개의 열을 2 개의 쌍으로 된 두 개의 열로 쌓으십시오.

 COLUMN A COLUMN B   COLUMN C  COLUMN D 
ROW 1 2598  F800    2599   F800 
ROW 2 2598  K1300    2599   K1300 
ROW 3 2598  S1000RR   2599   R900 
ROW 4 2598  G650    2599   G650 
ROW 5 2598  R1200    2599   K1600 
ROW 6 2599  S1000 
ROW 7 2599  HP2 
ROW 8 2599  R1200 

이 다를 여러 쌍의 열 사이. 데이터 내에는 공백이 없습니다.

난 당신이 엑셀이 표시 준 매크로를 실행하는 경우 :

런타임 오류 '13': 형식 불일치가

은 어떤 문제가 될 수 있습니까?

참고 : 일부 열에는 한 쌍의 데이터 만 있습니다. 첫 번째 행에만있는 데이터입니다. 데이터가 범위 경우

 COLUMN A COLUMN B   
ROW 1 2598  F800    
ROW 2 2598  K1300    
ROW 3 2598  S1000RR 
ROW 4 2598  G650    
ROW 5 2598  R1200    
ROW 6 2599  S1000 
ROW 7 2599  HP2 
ROW 8 2599  R1200 
ROW 9 2599  F800 
ROW 10 2599  K1300 
ROW 11 2599  R900 
ROW 12 2599  G650 
ROW 13 2599  K1600 
+0

당신이 출력됩니다 무엇을 보여 주 시겠어요 [빈 범위 및/또는 단일 세포를 처리하기 위해 업데이트] ?? –

+0

출력을 추가했습니다 ... – user1256390

+2

의 소리를 지르지 않기를 바랍니다. –

답변

3

:

내가처럼 보이도록 출력을 필요로하는 무슨이다 ALC가 가득,이 변형 배열 코드는 매우 빠르게 열 A와 B에 새 범위를 형성합니다

주의해야 할 점은 변형 배열을 만들 수 없으므로 공백 또는 단일 셀 열이 발생하면 코드가 실패합니다. 이 경우 범위 테스트를 추가해야하므로 pls가 조언합니다.

Sub Combine() 
Dim OrigA 
Dim OrigB 
Dim strA As String 
Dim strB As String 
Dim strDelim As String 
Dim lngCol As Long 

strDelim = "||" 
strA = Join(Application.Transpose(Range([a1], Cells(Rows.Count, "A").End(xlUp))), strDelim) 
strB = Join(Application.Transpose(Range([b1], Cells(Rows.Count, "b").End(xlUp))), strDelim) 

For lngCol = Columns("C").Column To Columns("ALC").Column - 2 Step 2 
    If Application.CountA(Columns(lngCol)) > 1 Then 
    'handle odd column range 
     strA = strA & (strDelim & Join(Application.Transpose(Range(Cells(1, lngCol), Cells(Rows.Count, lngCol).End(xlUp))), strDelim)) 
    Else 
    'handle odd column single cell 
     If Len(Cells(1, lngCol)) > 0 Then strA = strA & (strDelim & Cells(1, lngCol).Value) 
    End If 
     If Application.CountA(Columns(lngCol + 1)) > 1 Then 
     'handle even column range 
    strB = strB & (strDelim & Join(Application.Transpose(Range(Cells(1, lngCol + 1), Cells(Rows.Count, lngCol + 1).End(xlUp))), strDelim)) 
    Else 
    'handle even column single cell 
    If Len(Cells(1, lngCol + 1)) > 0 Then strB = strB & (strDelim & Cells(1, lngCol + 1).Value) 
    End If 
Next 

OrigA = Application.Transpose(Split(strA, strDelim)) 
OrigB = Application.Transpose(Split(strB, strDelim)) 

[a1].Resize(UBound(OrigA, 1), 1) = OrigA 
[b1].Resize(UBound(OrigB, 1), 1) = OrigB 

End Sub 
+0

Excel에서 제공 한 매크로를 실행하면 다음과 같이 표시됩니다. 런타임 오류 '13': 형식이 일치하지 않습니다. – user1256390

+0

"범위 테스트"가 필요하다고 생각합니다. 또한, 열의 수가 변경되면 예를 들어. "ALC"에서 "A : AMD"로 변경하면 For 라인의 "ALC"를 간단히 "AMD"로 변경하겠습니까? 아니면 그 이상입니까? 도와 주셔서 감사합니다. – user1256390

+0

@ user1256390 1) 내 단서가 단일 셀이나 빈 범위를 보았습니까? 나는 갱신 할 것이다. 2) 귀하의 AMD 쿼리에 대한 대답은 예입니다. – brettdj

관련 문제