소방서별 데이터 합치기 코드
추가기능으로 만들었음.
나중에 쓸라고.
Option Explicit Sub Macro() Dim OldBook As Workbook Dim NewBook As Workbook Dim SingleSheet As Worksheet Dim fd As FileDialog Dim FileChosen%, i% Dim CopySheetIndex As Integer Dim tmp As String Dim FileName As String With Application .ScreenUpdating = False .Calculation = xlCalculationManual .DisplayAlerts = False .EnableEvents = False End With '월보 파일 선택 Set fd = Application.FileDialog(msoFileDialogFilePicker) Set OldBook = ActiveWorkbook '파일선택 대화상자 옵션 With fd .Title = "월보 파일 선택" .InitialFileName = ThisWorkbook.Path .InitialView = msoFileDialogViewList .AllowMultiSelect = True .Filters.Clear .Filters.Add "월보파일을 선택하세요", "*.xls*" FileChosen = .Show End With If FileChosen <> -1 Then Exit Sub '시트 인덱스 입력 CopySheetIndex = InputBox("몇번째 시트를 복사할까요") For i = 1 To fd.SelectedItems.Count With fd Workbooks.Open .SelectedItems(i), , True FileName = Split(.SelectedItems(i), "\")(UBound(Split(.SelectedItems(i), "\"))) End With Set NewBook = ActiveWorkbook tmp = GetStationName(FileName) '시트 복사하여 붙여넣기 With OldBook NewBook.Sheets(CopySheetIndex).Copy After:=.Sheets(.Sheets.Count) '동일한 시트명 있으면 시트 삭제 For Each SingleSheet In .Sheets If SingleSheet.Name = tmp Then .Sheets(tmp).Delete Exit For End If Next SingleSheet .Sheets(.Sheets.Count).Name = tmp End With NewBook.Close Set NewBook = Nothing Next i '서별로 시트 줄 세우기 Call SetTheLine '참조 에러를 '중부:항만'으로 수정 Cells.Replace What:="#REF", Replacement:="'중부:항만'", LookAt:=xlPart With Application .ScreenUpdating = True .Calculation = xlCalculationAutomatic .DisplayAlerts = True .EnableEvents = True End With End Sub Function GetStationName(MyText As String) '관할 소방서 이름 가져오기(파일명에 ()안에 관할 소방서 이름 있으면 됨 Dim Reg As Object With CreateObject("Vbscript.regexp") .Pattern = "\(([가-힇]+)\)" .Global = False If .test(MyText) Then GetStationName = .Execute(MyText)(0).submatches(0) End If End With End Function Sub SetTheLine() '서별로 줄 세우기 Dim v As Variant Dim i As Integer v = Array("중부", "부산진", "동래", "북부", "사하", "해운대", "금정", "남부", "강서", "기장", "항만") On Error Resume Next For i = 0 To 10 Sheets(v(i)).Move After:=Sheets(Sheets.Count) Next i On Error GoTo 0 Sheets(1).Activate End Sub Sub Auto_Open() Auto_Close On Error Resume Next With Application.CommandBars("Tools").Controls With .Add(Type:=msoControlButton) .FaceId = 59 .Caption = "소방서별 자료 취합" .OnAction = "Macro" End With End With On Error GoTo 0 End Sub Sub Auto_Close() Application.CommandBars("Tools").Reset End Sub | cs |
'VB(A)' 카테고리의 다른 글
[정규식] 텍스트 파일을 조건에 맞게 쪼개서 가져오기 (0) | 2017.12.31 |
---|---|
웹페이지 파싱 (0) | 2017.09.23 |
월보 취합 서식 (0) | 2017.08.29 |
난수 생성기(로또) (0) | 2017.06.24 |
[VB.Net] 파일 생성일자로 폴더 생성 후 파일이동 (0) | 2017.06.04 |