VBA를 사용하여 주말과 휴일없이 한 달의 하루 시트를 작성
이 기사에서는 공휴일 목록에 지정된 모든 날짜를 제외하고 지정된 연도의 지정된 달에 대한 각 요일에 대한 시트를 만드는 매크로를 만듭니다.
매크로를 실행하기 전에 세 가지 입력이 필요합니다. J10 셀에 월 번호를 지정하고 J11 셀에 연도를 지정하고 B16 : B26 범위에 휴일 날짜 목록을 지정해야합니다.
입력 값을 지정한 후 제출 버튼을 클릭하여 매크로를 실행합니다.
이 매크로는 공휴일 목록에 지정된 날짜를 제외하고 지정된 달의 각 요일에 대해 새 시트를 삽입합니다.
논리 설명
이 매크로에서는 DateSerial 함수를 사용하여 지정된 월의 마지막 날짜를 찾습니다. FOR 루프를 사용하여 해당 월의 시작 날짜에서 마지막 날짜까지 반복합니다. 지정된 공휴일 목록에 사용중인 날짜가 있는지 찾기 위해 찾기 기능을 사용했습니다.
[_GoBack] # Weekday 함수는 If 문과 함께 사용하여 날짜가 평일인지 주말인지 확인합니다. If 문은 날짜가 평일이고 공휴일 목록에없는 경우에만 새 시트를 삽입합니다. 위의 스크린 샷에서 볼 수 있듯이 휴일 목록에 12 월 6 일이 있으므로 12 월 6 일 ^ 일 시트는 생성되지 않습니다.
아래 코드를 따르세요
Option Explicit Sub MonthApply() 'Declaring variables Dim DVariable As Date Dim RngFind As Range Dim MonthNo, YearNo As Integer Dim StartDate, EndDate As Date 'Disabling the screen updates Application.ScreenUpdating = False With Worksheets("Main") 'Getting month and year from cell J10 and J11 from "Main" sheet MonthNo = .Range("J10").Value YearNo = .Range("J11").Value 'Deriving start and end date StartDate = DateSerial(YearNo, MonthNo, 1) EndDate = DateSerial(YearNo, MonthNo + 1, 0) 'Looping through all the dates in the specified month For DVariable = StartDate To EndDate 'Finding if date is marked as holiday Set RngFind = .Range("B16:B26").Find(DVariable) 'Checking whether date is holiday, weekend or weekday If RngFind Is Nothing And Weekday(DVariable, 2) < 6 Then 'Inserting new sheet after the last worksheet in the workbook Worksheets.Add after:=Worksheets(Worksheets.Count) 'Renaming the active sheet ActiveSheet.Name = Format(DVariable, "dd.mm.yy") End If Next DVariable .Select End With Application.ScreenUpdating = True End Sub
이 블로그가 마음에 들면 Facebook 및 Facebook에서 친구들과 공유하십시오.
여러분의 의견을 듣고 싶습니다. 작업을 개선하고 더 나은 서비스를 제공 할 수있는 방법을 알려주십시오. [email protected]로 문의 해주세요