2012-12-03 3 views
5

그래, 비슷한 질문을 찾으려고했지만 엑셀의 VBA 편집기를 처음 보던 때부터 논의 된 내용을 많이 이해하지 못했습니다. 간단한 측면에서 병합으로 스프레드 시트를 하나의 스프레드 시트로 만들 수 있습니다.

, 나는이 스프레드 시트를 가지고 : "Sheet1의"와 "시트 2"

시트 1 :

A   B 
1 Header1 Header2 
2 Text1  Info1 
3 Text2  Info2 

시트 2 :

A   B 
1 Header1 Header2 
2 Text3  Info3 
3 Text4  Info4 

그리고 내가하고 싶은 다음과 같이 두 시트를 새 시트 (Sheet3)로 병합하는 매크로 :

A   B 
1 Header1 Header2 
2 Text1  Info1 
3 Text2  Info2 
4 Text3  Info3 
5 Text4  Info4 

매크로 기록을 시도하고 나중에 사용하기 위해 저장했습니다. 이렇게하려면 새 시트를 만들고 Sheet1에서 Sheet3까지 모두 복사하여 붙여 넣은 다음 Sheet2에서 Sheet3까지의 모든 정보를 복사합니다.

글쎄,이 매크로는 작동하지만 Excel에서 생성 한 코드가 데이터를 붙여 넣기 전에 셀 A4 (여기)를 선택하도록 만듭니다. 이 데이터에 대해서는 작동하지만 각 시트의 레코드 수가 계속 변경되면 작동하지 않습니다. 기본적으로

1) 다음 데이터 집합을 붙여 넣기 전에 자동으로 마지막 관련 셀로 이동하는 함수가 있는지 궁금합니다. (이 예제에서는 셀 A4이고 하나 이상의 테이블이 있으면 셀 A6).

2) "ActiveCell.SpecialCells (xlLastCell) .Select"(Ctrl + End를 사용할 때 활성화 됨) 기능을 보았지만 시트 끝까지 이동합니다. 그 기능을 잘 사용하려면 "Home"및 "Down"화살표 키와 비슷한 것이 필요할 것입니다.

이러한 옵션 중 하나는 나에게 좋을 것입니다. 나는 정보의 유용한 조각을 잊지 않았다 희망

Sub Collate_Sheets() 

    Sheets.Add After:=Sheets(Sheets.Count) 
    Sheets(Sheets.Count).Select 
    Sheets(Sheets.Count).Name = "Sheet3" 
    Sheets("Sheet1").Select 
    Range("A1").Select 
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select 
    Selection.Copy 
    Sheets("Sheet3").Select 
    ActiveSheet.Paste 
    ActiveCell.SpecialCells(xlLastCell).Select 
    ' I need to select one cell below, and the cell in column A at this point 
    Sheets("Sheet2").Select 
    Range("A2").Select 
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Sheet3").Select 
    ActiveSheet.Paste 
End Sub 

:^_^

여기에 엑셀 2010에서 매크로 레코더에서 녹음 된 내 현재 VBA 코드입니다. 내가 그랬다면 알려줘!

+0

아 감사합니다. 포럼에서 적절한 구문 강조를 선택했는지는 몰랐습니다 ^^; – Jerry

+0

마지막으로 실제로 사용 된 셀 아래의 행을 가져 오려면'Range ("A"& Rows.Count) .End (xlup) .Offset (1)'을 쓸 수 있습니다. ''A ''를 당신이 필요한 컬럼으로 대체하십시오. –

+0

제리를 환영합니다. 강조 표시를하려면 코드를 강조 표시 한 다음 맨 위에있는 코드 아이콘을 클릭하십시오. 그것은'{}'처럼 보입니다. –

답변

6

Jerry,이 코드를 사용해보십시오. 귀하의 코드를 약간 정리하고 원하는대로 할 수있게 효율적으로 만들었습니다. 나는 당신의 코드가 내가 옳다고 생각하는 것을 기반으로 몇 가지 가정을했다. 그렇지 않다면이 답변에 대해 의견을 말하고 필요할 경우 조정 해 드리겠습니다. 경우 사람에

Option Explicit 

Sub Collate_Sheets() 


    Sheets.Add After:=Sheets(Sheets.Count) 
    Dim wks As Worksheet 
    Set wks = Sheets(Sheets.Count) 

    wks.Name = "Sheet3" 

    With Sheets("Sheet1") 

    Dim lastrow As Long 
    lastrow = .Range("B" & .Rows.Count).End(xlUp).Row 

    .Range("A1:B" & lastrow).Copy wks.Range("A" & wks.Rows.Count).End(xlUp) 

    End With 

    With Sheets("Sheet2") 

    lastrow = .Range("B" & .Rows.Count).End(xlUp).Row 

    .Range("A2:B" & lastrow).Copy wks.Range("A" & wks.Rows.Count).End(xlUp).Offset(1) 

    End With 


End Sub 
+0

좋아, 나는 (동일한 레코드) 위의 샘플 데이터로 시도하고 나에게 이것을 준다 : "Cell A2 = Header1" "Cell A3 = Header1" "Cell A4 = Text3" 그리고 다른 모든 빈칸 여기 조금 늦었고 침대로 향할 것입니다. 나는 당신이 아직 그것에 있지 않다면 내일 코드에서 무엇이 잘못되었을지를 보도록 노력할 것이다. 도와 주셔서 감사합니다. =) – Jerry

+0

@Jerry -> 코드를 편집하여 데이터 세트에서 작동하게했습니다. 실제 데이터 세트를 위해 이것을 날려 버릴 필요가 있다면 트릭은 첫 번째 복사/붙여 넣기의 머리글 만 집어 넣고 데이터 세트에 공백이없는 열을 사용하여 마지막 행을 캡처하도록해야합니다 . –

+0

감사! 이제 완벽하게 작동하며 코드를 여러 시트 (필요한 번호)와 관련 열 수에 적용했습니다. 다시 한 번 감사드립니다!^_ ^ – Jerry

0

는 Shee3 전에는 오류

'Delete Sheet 3 
    Application.DisplayAlerts = False 
    Sheets("Sheet3").Delete 

감사 스콧 Holtzman을 피하기 위해 만든 삭제하고 싶어!

관련 문제