나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내
작성자:  

 참서리 (k5953)

추천:  2
파일:     시트_나누기_1.xlsm (31.2KB) 조회:  3749
제목:   [RE]엑셀 필드값 별 시트 나누기 (시트순서정렬)
     
  Sub make_sheet_by_name()
'-------------------------------


Dim rng As Range
Dim rngRow As Range
Dim sht As Worksheet
Dim newsht As Worksheet

Dim oList As Object: Set oList = CreateObject("System.Collections.ArrayList")

Application.ScreenUpdating = False

'기존시트 삭제
Application.DisplayAlerts = False
For Each sht In Worksheets
    If sht.Name <> "현황" Then sht.Delete
Next
Application.DisplayAlerts = True

'데이타 범위
Set rng = Sheet1.Range("A3").CurrentRegion
Set rng = rng.Offset(1).Resize(rng.Rows.Count - 1)

Dim rngC As Range
Dim vCell As String

For Each rngRow In rng.Rows
    '이름 셀
    Set rngC = rngRow.Cells(2)
    '이름 값
    vCell = rngC.Value

    If shtExist(vCell) Then '시트가 존재하면
    
        '현재행을 복사(시트의 데이타가 있는 마지막 행 다음 행에 복사)
        rngRow.Copy Worksheets(vCell).Range("A3").End(xlDown).Offset(1)
        
    Else '시트가 존재하지 않으면
        'ArrayList에 추가
        oList.Add vCell
        '새로운 시트 생성
        Set newsht = Worksheets.Add(After:=Worksheets(Worksheets.Count))
        '시트 이름
        newsht.Name = vCell
        
        '타이틀 및 제목행 복사
        Sheet1.Range("a1:E3").Copy newsht.Range("a1")
        '현재 행 복사
        rngRow.Copy newsht.Range("A4")
        
    End If
 Next


'sheet소트
oList.Sort
'ArrayList 요소를 거꾸로
oList.Reverse

'ArrayList를 배열로 만듦
Dim vSheet As Variant: vSheet = oList.toarray

'시트 정렬
For Each sSheet In vSheet
    Worksheets(sSheet).Move After:=Worksheets(Worksheets.Count)
Next

'현황 시트를 제일 처음으로 이동
Worksheets("현황").Move Before:=Worksheets(1)

Application.ScreenUpdating = True


End Sub


'---------------------------------------------------    
Function shtExist(sSheet As String) As Boolean
'---------------------------------------------------    
    Dim shtX As Worksheet
    
    On Error Resume Next
    
    Set shtX = ThisWorkbook.Worksheets(sSheet)
    If Err.Number <> 0 Then '시트가 존재하지 않음
        shtExist = False
    Else
       shtExist = True
    End If
    
    On Error GoTo 0
    
End Function
 
[불량 게시물 신고]  
참서리다음 Youtube 동영상에 자세히 설명되어 있습니다.
https://youtu.be/rWbp5-3a5XY
05-31 (20:26)
삭제 ■신고
이정희앗 넘 어렵네요 ㅠㅠ05-31 (21:21)
삭제 ■신고
이정희감사합니다. 동영상 열심히 보고...(결국 걍 카피해서 붙여놓고) 한두개 조건만 바꿔봤는데...원하는 결과는 충분히 얻었습니다. 감사합니다!06-05 (18:00)
삭제 ■신고
        
  

작성일 : 2019-05-31(20:24)
최종수정일 : 2019-05-31(20:24)
 


 ◎ 관련글

  제 목   작성자   날짜
엑셀 필드값 별 시트 나누기 (시트순서정렬) 이정희 2019-05-31
[RE]엑셀 필드값 별 시트 나누기 (시트순서정렬) 참서리 2019-05-31