728x90

VBA 날짜, 시간, 시간대 추출


날짜와 시간을 다루는 함수는 굳이 VBA를 사용하지 않아도 편리하게 원하는 값을 추출이 가능합니다.

시간만 추출하는 함수는 = HOUR(날짜시간함수셀) 을 하면 시간이 추출됨

시간과 분을 16:36 이렇게 표기하고 싶다면

= TEXT(HOUR(날짜시간함수셀),"00") & ":" & TEXT(MINUTE(날짜시간함수셀),"00")

로 함수조건을 주면 됩니다.


Sub 날짜추출()
    Dim rngC As Range
    Dim rngAll As Range
   
    Application.ScreenUpdating = False    '// 화면 업데이트 (일시) 중지
    'Set rngAll = Range([B2], Cells(Rows.Count, "B").End(3))
    ActiveCell.Select
    Set rngAll = Range(ActiveCell, Cells(Rows.Count, ActiveCell.Column).End(3))
   
    For Each rngC In rngAll
        rngC.Offset(0, 1) = Left(rngC, 10)
        rngC.Offset(0, 1).NumberFormat = "yyyy-mm-dd" '// 셀서식 날짜형식 지정
    Next rngC
   
    Set rngAll = Nothing  '// 변수 초기화
    MsgBox "완료"
End Sub


Sub 시간추출()
    Dim rngC As Range
    Dim rngAll As Range
    Dim oldTime As Single       '// 걸린 시간 구하는 변수 지정
   
    Application.ScreenUpdating = False    '// 화면 업데이트 (일시) 중지
    oldTime = Timer     '// 시간 변수 설정
    'Set rngAll = Range([B2], Cells(Rows.Count, "B").End(3))
    ActiveCell.Select
    Set rngAll = Range(ActiveCell, Cells(Rows.Count, ActiveCell.Column).End(3))
   
    For Each rngC In rngAll

        rngC.Offset(0,2).NumberFormat = "General"

        rngC.Offset(0,2) = Hour(rngC) & ":" & Minute(rngC)
        'rngC.Offset(0, 2).NumberFormat = "hh:mm:ss" '// 셀서식 시간형식 지정
    Next rngC
   
    Set rngAll = Nothing  '// 변수 초기화
    MsgBox "총 " & Format(Timer - oldTime, "#0.00") & " : 초 소요"
End Sub

Sub 시간대추출()
    Dim rngC As Range
    Dim rngAll As Range
    Dim oldTime As Single       '// 걸린 시간 구하는 변수 지정
   
    Application.ScreenUpdating = False    '// 화면 업데이트 (일시) 중지
    oldTime = Timer     '// 시간 변수 설정
    Set rngAll = Range([D2], Cells(Rows.Count, "D").End(3))
    'ActiveCell.Select
    'Set rngAll = Range(ActiveCell, Cells(Rows.Count, ActiveCell.Column).End(3))
   
    For Each rngC In rngAll
        rngC.Offset(0, 3) = Hour(rngC)
        'rngC.Offset(0, 3).NumberFormat = "hh" '// 셀서식 시간형식 지정
    Next rngC
   
    Set rngAll = Nothing  '// 변수 초기화
    MsgBox "총 " & Format(Timer - oldTime, "#0.00") & " : 초 소요"
End Sub



---------------------------------------------------------------------------------------

파일명에 날짜 포함

fName = "ShopData_" & Format(Date, "yyyy-mm-dd") & ".csv"

블로그 이미지

Link2Me

,
728x90

전화번호 다루기


전화번호는 02,031 과 같은 유선전화번호와 010, 011, 016 과 같은 휴대폰번호, 070 인터넷전화번호, 1588, 1544와 같은 지능망번호, 특수번호 112, 119, 131 등이 있습니다.


아래 코드는 전체를 다 보기 편하게 분류할 순 없고 휴대폰, 유선번호, 인터넷번호만 편하게 정리하도록 했습니다.

휴대폰 번호만 보기좋게 정렬하고자 한다면 .....

=IF(LEN(SUBSTITUTE(A1,"-",""))=11,TEXT(SUBSTITUTE(A1,"-",""),"000-0000-0000"),TEXT(SUBSTITUTE(A1,"-",""),"000-000-0000"))

중간에 - 가 들어가 있는 경우에도 모두 공백으로 지우고 나서 TEXT 정렬을 합니다.


Sub 전화번호정리()
    Dim rngAll  As Range
    Dim rngC    As Range
   
    Application.ScreenUpdating = False    '// 화면 업데이트 (일시) 중지
    ActiveCell.Select       '// 현재셀이 위치한 곳
    Set rngAll = Range(ActiveCell, Cells(Rows.Count, ActiveCell.Column).End(3))     
    'Set rngAll = Selection     '// 선택된 범위만 지정하려고 할 때
    For Each rngC In rngAll
        Select Case Len(rngC)
            Case 8
                rngC.Offset(0, 1).Value = Format(rngC.Value, "0000-0000")
            Case 9
                rngC.Offset(0, 1).Value = Format(rngC.Value, "00-000-0000")
            Case 10
                If Left(rngC, 2) = "02" Then
                    rngC.Offset(0, 1).Value = Format(rngC.Value, "00-0000-0000")
                Else
                    rngC.Offset(0, 1).Value = Format(rngC.Value, "000-000-0000")
                End If
            Case 11
                rngC.Offset(0, 1).Value = Format(rngC.Value, "000-0000-0000")
        End Select
    Next rngC
   
    Set rngAll = Nothing  '// 변수 초기화
    MsgBox "완료"

End Sub

블로그 이미지

Link2Me

,
728x90

[VBA기초] 숫자만 추출


Sub 숫자만추출()
    Dim strText As String   '// 각 문자를 넣을 변수
    Dim strU As String      '// 문자를 합쳐갈 변수
    Dim i As Integer        '// 전체 문자길이 만큼 반복할 변수
    Dim rngC As Range       '// 각 Line 변수
    Dim rngAll As Range     '// 전체 범위 지정
    Dim oldTime As Single   '// 걸린 시간 구하는 변수 지정
   
    Application.ScreenUpdating = False    '// 화면 업데이트 (일시) 중지
    oldTime = Timer     '// 시간 변수 설정
    Set rngAll = Range([A2], Cells(Rows.Count, "A").End(3))
    '// A2 셀부터 A열의 마지막 셀까지
       
    For Each rngC In rngAll
        For i = 1 To Len(rngC)                      '// 전체 문자길이 만큼 반복
                strText = Mid(rngC, i, 1)           '// 각 숫자를 추출해 변수에 넣음
                If strText Like "[0-9]" Then        '// 문자가 숫자일 경우
                    strU = strU & Mid(rngC, i, 1)   '// 각 숫자를 합쳐감
                End If
        Next i
        rngC.Offset(0, 1) = strU        '// 추출한 값을 기록
        strU = ""   '// 값을 기록했으니까 초기화가 필요함
    Next rngC
   
    Set rngAll = Nothing  '// 변수 초기화
    MsgBox "총 " & Format(Timer - oldTime, "#0.00") & " : 초 소요"

End Sub


가져다 사용할 경우 보라색 부분만 수정하여 사용하면 됩니다.

범위구간을 지정하는 곳과, 기록할 필드를 지정하는 것입니다.

Offset(0,1) 은 현재 셀의 오른쪽 셀에 기록하겠다는 의미

만약 오른쪽 두번째 열에 기록하겠다고 하면 Offset(0,2) 가 됨


Numeric_extract.vbs


블로그 이미지

Link2Me

,
728x90

[VBA기초] 영문자만 추출


Sub 영문만추출()
    Dim strText As String   '// 각 문자를 넣을 변수
    Dim strU As String      '// 문자를 합쳐갈 변수
    Dim i As Integer        '// 전체 문자길이 만큼 반복할 변수
    Dim rngC As Range       '// 각 Line 변수
    Dim rngAll As Range     '// 전체 범위 지정
    Dim oldTime As Single   '// 걸린 시간 구하는 변수 지정
   
    Application.ScreenUpdating = False    '// 화면 업데이트 (일시) 중지
    oldTime = Timer     '// 시간 변수 설정
    Set rngAll = Range([A2], Cells(Rows.Count, "A").End(3))
    '// A2 셀부터 A열의 마지막 셀까지, 빨간색 A는 D로 변경하면 A2 에서 D열의 마지막까지가 변수 범위가 됨
       
    For Each rngC In rngAll
        For i = 1 To Len(rngC)              '// 전체 문자길이 만큼 반복
                strText = Mid(rngC, i, 1)   '// 각 문자를 추출해 변수에 넣음
                If Asc(UCase(strText)) >= 65 And Asc(UCase(strText)) <= 90 Then   '// 문자가 영문일 경우
                    strU = strU & Mid(rngC, i, 1)    '// 각 문자를 합쳐감
                End If
        Next i
        rngC.Offset(0, 1) = strU        '// 추출한 값을 기록
        strU = ""   '// 값을 기록했으니까 초기화가 필요함
    Next rngC
   
    Set rngAll = Nothing  '// 변수 초기화
    MsgBox "총 " & Format(Timer - oldTime, "#0.00") & " : 초 소요"

End Sub


그대로 가져다 활용할 경우에는 보라색만 변경해서 사용하면 됩니다.

즉 범위를 어디까지 지정할 것인가, 어디에 기록을 할 것인가 하는 부분입니다.


Eng_extract.vbs


블로그 이미지

Link2Me

,
728x90

음력 - 양력 변환 VBA


출처 : http://pheelfree.tistory.com/57


sol2lunar.vbs


Option Explicit

Dim EM(1 To 130, 1 To 13) As Integer, MT(12) As Integer

Dim VM(6) As Integer

Dim CY As Integer, CM As Integer, CD As Integer, CA As Boolean


Sub CalenderData()

    'mt(12) 배열은 양력각달의 크기를 누적합산한 값을 저장한 것임(평년기준, 즉 1년 365일)

    MT(1) = 31: MT(2) = 59: MT(3) = 90: MT(4) = 120: MT(5) = 151: MT(6) = 181: MT(7) = 212: MT(8) = 243: MT(9) = 273: MT(10) = 304: MT(11) = 334: MT(12) = 365

    'VM(6) 배열은 1과 2는 음력각달의 크기를 3~6은 윤달과같은달의 크기와 윤달의크기를 합한값을 저장한 것임

    VM(1) = 29: VM(2) = 30: VM(3) = 29 + 29: VM(4) = 29 + 30: VM(5) = 30 + 29: VM(6) = 30 + 30

    'EM(?,?) 배열은 1901년부터 2030년까지의 음력 각달의 크기를 VM(6) 배열값으로 저장하고 마지막 배열은 음력 총일수를 저장함

    EM(1, 1) = 1: EM(1, 2) = 2: EM(1, 3) = 1: EM(1, 4) = 1: EM(1, 5) = 2: EM(1, 6) = 1: EM(1, 7) = 2: EM(1, 8) = 1: EM(1, 9) = 2: EM(1, 10) = 2: EM(1, 11) = 2: EM(1, 12) = 1: EM(1, 13) = 354               '1901년

    EM(2, 1) = 2: EM(2, 2) = 1: EM(2, 3) = 2: EM(2, 4) = 1: EM(2, 5) = 1: EM(2, 6) = 2: EM(2, 7) = 1: EM(2, 8) = 2: EM(2, 9) = 1: EM(2, 10) = 2: EM(2, 11) = 2: EM(2, 12) = 2: EM(2, 13) = 355               '1902년

    EM(3, 1) = 1: EM(3, 2) = 2: EM(3, 3) = 1: EM(3, 4) = 2: EM(3, 5) = 3: EM(3, 6) = 2: EM(3, 7) = 1: EM(3, 8) = 1: EM(3, 9) = 2: EM(3, 10) = 2: EM(3, 11) = 1: EM(3, 12) = 2: EM(3, 13) = 383               '1903년

    EM(4, 1) = 2: EM(4, 2) = 2: EM(4, 3) = 1: EM(4, 4) = 2: EM(4, 5) = 1: EM(4, 6) = 1: EM(4, 7) = 2: EM(4, 8) = 1: EM(4, 9) = 1: EM(4, 10) = 2: EM(4, 11) = 2: EM(4, 12) = 1: EM(4, 13) = 354               '1904년

    EM(5, 1) = 2: EM(5, 2) = 2: EM(5, 3) = 1: EM(5, 4) = 2: EM(5, 5) = 2: EM(5, 6) = 1: EM(5, 7) = 1: EM(5, 8) = 2: EM(5, 9) = 1: EM(5, 10) = 2: EM(5, 11) = 1: EM(5, 12) = 2: EM(5, 13) = 355               '1905년

    EM(6, 1) = 1: EM(6, 2) = 2: EM(6, 3) = 2: EM(6, 4) = 4: EM(6, 5) = 1: EM(6, 6) = 2: EM(6, 7) = 1: EM(6, 8) = 2: EM(6, 9) = 1: EM(6, 10) = 2: EM(6, 11) = 1: EM(6, 12) = 2: EM(6, 13) = 384               '1906년

    EM(7, 1) = 1: EM(7, 2) = 2: EM(7, 3) = 1: EM(7, 4) = 2: EM(7, 5) = 1: EM(7, 6) = 2: EM(7, 7) = 2: EM(7, 8) = 1: EM(7, 9) = 2: EM(7, 10) = 1: EM(7, 11) = 2: EM(7, 12) = 1: EM(7, 13) = 354               '1907년

    EM(8, 1) = 2: EM(8, 2) = 1: EM(8, 3) = 1: EM(8, 4) = 2: EM(8, 5) = 2: EM(8, 6) = 1: EM(8, 7) = 2: EM(8, 8) = 1: EM(8, 9) = 2: EM(8, 10) = 2: EM(8, 11) = 1: EM(8, 12) = 2: EM(8, 13) = 355               '1908년

    EM(9, 1) = 1: EM(9, 2) = 5: EM(9, 3) = 1: EM(9, 4) = 2: EM(9, 5) = 1: EM(9, 6) = 2: EM(9, 7) = 1: EM(9, 8) = 2: EM(9, 9) = 2: EM(9, 10) = 2: EM(9, 11) = 1: EM(9, 12) = 2: EM(9, 13) = 384               '1909년

    EM(10, 1) = 1: EM(10, 2) = 2: EM(10, 3) = 1: EM(10, 4) = 1: EM(10, 5) = 2: EM(10, 6) = 1: EM(10, 7) = 2: EM(10, 8) = 1: EM(10, 9) = 2: EM(10, 10) = 2: EM(10, 11) = 2: EM(10, 12) = 1: EM(10, 13) = 354  '1910년

    EM(11, 1) = 2: EM(11, 2) = 1: EM(11, 3) = 2: EM(11, 4) = 1: EM(11, 5) = 1: EM(11, 6) = 5: EM(11, 7) = 1: EM(11, 8) = 2: EM(11, 9) = 2: EM(11, 10) = 1: EM(11, 11) = 2: EM(11, 12) = 2: EM(11, 13) = 384  '1911년

    EM(12, 1) = 2: EM(12, 2) = 1: EM(12, 3) = 2: EM(12, 4) = 1: EM(12, 5) = 1: EM(12, 6) = 2: EM(12, 7) = 1: EM(12, 8) = 1: EM(12, 9) = 2: EM(12, 10) = 2: EM(12, 11) = 1: EM(12, 12) = 2: EM(12, 13) = 354  '1912년

    EM(13, 1) = 2: EM(13, 2) = 2: EM(13, 3) = 1: EM(13, 4) = 2: EM(13, 5) = 1: EM(13, 6) = 1: EM(13, 7) = 2: EM(13, 8) = 1: EM(13, 9) = 1: EM(13, 10) = 2: EM(13, 11) = 1: EM(13, 12) = 2: EM(13, 13) = 354  '1913년

    EM(14, 1) = 2: EM(14, 2) = 2: EM(14, 3) = 1: EM(14, 4) = 2: EM(14, 5) = 5: EM(14, 6) = 1: EM(14, 7) = 2: EM(14, 8) = 1: EM(14, 9) = 2: EM(14, 10) = 1: EM(14, 11) = 1: EM(14, 12) = 2: EM(14, 13) = 384  '1914년

    EM(15, 1) = 2: EM(15, 2) = 1: EM(15, 3) = 2: EM(15, 4) = 2: EM(15, 5) = 1: EM(15, 6) = 2: EM(15, 7) = 1: EM(15, 8) = 2: EM(15, 9) = 1: EM(15, 10) = 2: EM(15, 11) = 1: EM(15, 12) = 2: EM(15, 13) = 355  '1915년

    EM(16, 1) = 1: EM(16, 2) = 2: EM(16, 3) = 1: EM(16, 4) = 2: EM(16, 5) = 1: EM(16, 6) = 2: EM(16, 7) = 2: EM(16, 8) = 1: EM(16, 9) = 2: EM(16, 10) = 1: EM(16, 11) = 2: EM(16, 12) = 1: EM(16, 13) = 354  '1916년

    EM(17, 1) = 2: EM(17, 2) = 3: EM(17, 3) = 2: EM(17, 4) = 1: EM(17, 5) = 2: EM(17, 6) = 2: EM(17, 7) = 1: EM(17, 8) = 2: EM(17, 9) = 2: EM(17, 10) = 1: EM(17, 11) = 2: EM(17, 12) = 1: EM(17, 13) = 384  '1917년

    EM(18, 1) = 2: EM(18, 2) = 1: EM(18, 3) = 1: EM(18, 4) = 2: EM(18, 5) = 1: EM(18, 6) = 2: EM(18, 7) = 1: EM(18, 8) = 2: EM(18, 9) = 2: EM(18, 10) = 2: EM(18, 11) = 1: EM(18, 12) = 2: EM(18, 13) = 355  '1918년

    EM(19, 1) = 1: EM(19, 2) = 2: EM(19, 3) = 1: EM(19, 4) = 1: EM(19, 5) = 2: EM(19, 6) = 1: EM(19, 7) = 5: EM(19, 8) = 2: EM(19, 9) = 2: EM(19, 10) = 1: EM(19, 11) = 2: EM(19, 12) = 2: EM(19, 13) = 384  '1919년

    EM(20, 1) = 1: EM(20, 2) = 2: EM(20, 3) = 1: EM(20, 4) = 1: EM(20, 5) = 2: EM(20, 6) = 1: EM(20, 7) = 1: EM(20, 8) = 2: EM(20, 9) = 2: EM(20, 10) = 1: EM(20, 11) = 2: EM(20, 12) = 2: EM(20, 13) = 354  '1920년

    EM(21, 1) = 2: EM(21, 2) = 1: EM(21, 3) = 2: EM(21, 4) = 1: EM(21, 5) = 1: EM(21, 6) = 2: EM(21, 7) = 1: EM(21, 8) = 1: EM(21, 9) = 2: EM(21, 10) = 1: EM(21, 11) = 2: EM(21, 12) = 2: EM(21, 13) = 354  '1921년

    EM(22, 1) = 2: EM(22, 2) = 1: EM(22, 3) = 2: EM(22, 4) = 2: EM(22, 5) = 3: EM(22, 6) = 2: EM(22, 7) = 1: EM(22, 8) = 1: EM(22, 9) = 2: EM(22, 10) = 1: EM(22, 11) = 2: EM(22, 12) = 2: EM(22, 13) = 384  '1922년

    EM(23, 1) = 1: EM(23, 2) = 2: EM(23, 3) = 2: EM(23, 4) = 1: EM(23, 5) = 2: EM(23, 6) = 1: EM(23, 7) = 2: EM(23, 8) = 1: EM(23, 9) = 2: EM(23, 10) = 1: EM(23, 11) = 1: EM(23, 12) = 2: EM(23, 13) = 354  '1923년

    EM(24, 1) = 2: EM(24, 2) = 1: EM(24, 3) = 2: EM(24, 4) = 1: EM(24, 5) = 2: EM(24, 6) = 2: EM(24, 7) = 1: EM(24, 8) = 2: EM(24, 9) = 1: EM(24, 10) = 2: EM(24, 11) = 1: EM(24, 12) = 1: EM(24, 13) = 354  '1924년

    EM(25, 1) = 2: EM(25, 2) = 1: EM(25, 3) = 2: EM(25, 4) = 5: EM(25, 5) = 2: EM(25, 6) = 1: EM(25, 7) = 2: EM(25, 8) = 2: EM(25, 9) = 1: EM(25, 10) = 2: EM(25, 11) = 1: EM(25, 12) = 2: EM(25, 13) = 385  '1925년

    EM(26, 1) = 1: EM(26, 2) = 1: EM(26, 3) = 2: EM(26, 4) = 1: EM(26, 5) = 2: EM(26, 6) = 1: EM(26, 7) = 2: EM(26, 8) = 2: EM(26, 9) = 1: EM(26, 10) = 2: EM(26, 11) = 2: EM(26, 12) = 1: EM(26, 13) = 354  '1926년

    EM(27, 1) = 2: EM(27, 2) = 1: EM(27, 3) = 1: EM(27, 4) = 2: EM(27, 5) = 1: EM(27, 6) = 2: EM(27, 7) = 1: EM(27, 8) = 2: EM(27, 9) = 2: EM(27, 10) = 1: EM(27, 11) = 2: EM(27, 12) = 2: EM(27, 13) = 355  '1927년

    EM(28, 1) = 1: EM(28, 2) = 5: EM(28, 3) = 1: EM(28, 4) = 2: EM(28, 5) = 1: EM(28, 6) = 1: EM(28, 7) = 2: EM(28, 8) = 2: EM(28, 9) = 1: EM(28, 10) = 2: EM(28, 11) = 2: EM(28, 12) = 2: EM(28, 13) = 384  '1928년

    EM(29, 1) = 1: EM(29, 2) = 2: EM(29, 3) = 1: EM(29, 4) = 1: EM(29, 5) = 2: EM(29, 6) = 1: EM(29, 7) = 1: EM(29, 8) = 2: EM(29, 9) = 1: EM(29, 10) = 2: EM(29, 11) = 2: EM(29, 12) = 2: EM(29, 13) = 354  '1929년

    EM(30, 1) = 1: EM(30, 2) = 2: EM(30, 3) = 2: EM(30, 4) = 1: EM(30, 5) = 1: EM(30, 6) = 5: EM(30, 7) = 1: EM(30, 8) = 2: EM(30, 9) = 1: EM(30, 10) = 2: EM(30, 11) = 2: EM(30, 12) = 1: EM(30, 13) = 383  '1930년

    EM(31, 1) = 2: EM(31, 2) = 2: EM(31, 3) = 2: EM(31, 4) = 1: EM(31, 5) = 1: EM(31, 6) = 2: EM(31, 7) = 1: EM(31, 8) = 1: EM(31, 9) = 2: EM(31, 10) = 1: EM(31, 11) = 2: EM(31, 12) = 1: EM(31, 13) = 354  '1931년

    EM(32, 1) = 2: EM(32, 2) = 2: EM(32, 3) = 2: EM(32, 4) = 1: EM(32, 5) = 2: EM(32, 6) = 1: EM(32, 7) = 2: EM(32, 8) = 1: EM(32, 9) = 1: EM(32, 10) = 2: EM(32, 11) = 1: EM(32, 12) = 2: EM(32, 13) = 355  '1932년

    EM(33, 1) = 1: EM(33, 2) = 2: EM(33, 3) = 2: EM(33, 4) = 1: EM(33, 5) = 6: EM(33, 6) = 1: EM(33, 7) = 2: EM(33, 8) = 1: EM(33, 9) = 2: EM(33, 10) = 1: EM(33, 11) = 1: EM(33, 12) = 2: EM(33, 13) = 384  '1933년

    EM(34, 1) = 1: EM(34, 2) = 2: EM(34, 3) = 1: EM(34, 4) = 2: EM(34, 5) = 2: EM(34, 6) = 1: EM(34, 7) = 2: EM(34, 8) = 2: EM(34, 9) = 1: EM(34, 10) = 2: EM(34, 11) = 1: EM(34, 12) = 2: EM(34, 13) = 355  '1934년

    EM(35, 1) = 1: EM(35, 2) = 1: EM(35, 3) = 2: EM(35, 4) = 1: EM(35, 5) = 2: EM(35, 6) = 1: EM(35, 7) = 2: EM(35, 8) = 2: EM(35, 9) = 1: EM(35, 10) = 2: EM(35, 11) = 2: EM(35, 12) = 1: EM(35, 13) = 354  '1935년

    EM(36, 1) = 2: EM(36, 2) = 1: EM(36, 3) = 4: EM(36, 4) = 1: EM(36, 5) = 2: EM(36, 6) = 1: EM(36, 7) = 2: EM(36, 8) = 1: EM(36, 9) = 2: EM(36, 10) = 2: EM(36, 11) = 2: EM(36, 12) = 1: EM(36, 13) = 384  '1936년

    EM(37, 1) = 2: EM(37, 2) = 1: EM(37, 3) = 1: EM(37, 4) = 2: EM(37, 5) = 1: EM(37, 6) = 1: EM(37, 7) = 2: EM(37, 8) = 1: EM(37, 9) = 2: EM(37, 10) = 2: EM(37, 11) = 2: EM(37, 12) = 1: EM(37, 13) = 354  '1937년

    EM(38, 1) = 2: EM(38, 2) = 2: EM(38, 3) = 1: EM(38, 4) = 1: EM(38, 5) = 2: EM(38, 6) = 1: EM(38, 7) = 4: EM(38, 8) = 1: EM(38, 9) = 2: EM(38, 10) = 2: EM(38, 11) = 1: EM(38, 12) = 2: EM(38, 13) = 384  '1938년

    EM(39, 1) = 2: EM(39, 2) = 2: EM(39, 3) = 1: EM(39, 4) = 1: EM(39, 5) = 2: EM(39, 6) = 1: EM(39, 7) = 1: EM(39, 8) = 2: EM(39, 9) = 1: EM(39, 10) = 2: EM(39, 11) = 1: EM(39, 12) = 2: EM(39, 13) = 354  '1939년

    EM(40, 1) = 2: EM(40, 2) = 2: EM(40, 3) = 1: EM(40, 4) = 2: EM(40, 5) = 1: EM(40, 6) = 2: EM(40, 7) = 1: EM(40, 8) = 1: EM(40, 9) = 2: EM(40, 10) = 1: EM(40, 11) = 2: EM(40, 12) = 1: EM(40, 13) = 354  '1940년

    EM(41, 1) = 2: EM(41, 2) = 2: EM(41, 3) = 1: EM(41, 4) = 2: EM(41, 5) = 2: EM(41, 6) = 4: EM(41, 7) = 1: EM(41, 8) = 1: EM(41, 9) = 2: EM(41, 10) = 1: EM(41, 11) = 2: EM(41, 12) = 1: EM(41, 13) = 384  '1941년

    EM(42, 1) = 2: EM(42, 2) = 1: EM(42, 3) = 2: EM(42, 4) = 2: EM(42, 5) = 1: EM(42, 6) = 2: EM(42, 7) = 2: EM(42, 8) = 1: EM(42, 9) = 2: EM(42, 10) = 1: EM(42, 11) = 1: EM(42, 12) = 2: EM(42, 13) = 355  '1942년

    EM(43, 1) = 1: EM(43, 2) = 2: EM(43, 3) = 1: EM(43, 4) = 2: EM(43, 5) = 1: EM(43, 6) = 2: EM(43, 7) = 2: EM(43, 8) = 1: EM(43, 9) = 2: EM(43, 10) = 2: EM(43, 11) = 1: EM(43, 12) = 2: EM(43, 13) = 355  '1943년

    EM(44, 1) = 1: EM(44, 2) = 1: EM(44, 3) = 2: EM(44, 4) = 4: EM(44, 5) = 1: EM(44, 6) = 2: EM(44, 7) = 1: EM(44, 8) = 2: EM(44, 9) = 2: EM(44, 10) = 1: EM(44, 11) = 2: EM(44, 12) = 2: EM(44, 13) = 384  '1944년

    EM(45, 1) = 1: EM(45, 2) = 1: EM(45, 3) = 2: EM(45, 4) = 1: EM(45, 5) = 1: EM(45, 6) = 2: EM(45, 7) = 1: EM(45, 8) = 2: EM(45, 9) = 2: EM(45, 10) = 2: EM(45, 11) = 1: EM(45, 12) = 2: EM(45, 13) = 354  '1945년

    EM(46, 1) = 2: EM(46, 2) = 1: EM(46, 3) = 1: EM(46, 4) = 2: EM(46, 5) = 1: EM(46, 6) = 1: EM(46, 7) = 2: EM(46, 8) = 1: EM(46, 9) = 2: EM(46, 10) = 2: EM(46, 11) = 1: EM(46, 12) = 2: EM(46, 13) = 354  '1946년

    EM(47, 1) = 2: EM(47, 2) = 5: EM(47, 3) = 1: EM(47, 4) = 2: EM(47, 5) = 1: EM(47, 6) = 1: EM(47, 7) = 2: EM(47, 8) = 1: EM(47, 9) = 2: EM(47, 10) = 1: EM(47, 11) = 2: EM(47, 12) = 2: EM(47, 13) = 384  '1947년

    EM(48, 1) = 2: EM(48, 2) = 1: EM(48, 3) = 2: EM(48, 4) = 1: EM(48, 5) = 2: EM(48, 6) = 1: EM(48, 7) = 1: EM(48, 8) = 2: EM(48, 9) = 1: EM(48, 10) = 2: EM(48, 11) = 1: EM(48, 12) = 2: EM(48, 13) = 354  '1948년

    EM(49, 1) = 2: EM(49, 2) = 2: EM(49, 3) = 1: EM(49, 4) = 2: EM(49, 5) = 1: EM(49, 6) = 2: EM(49, 7) = 3: EM(49, 8) = 2: EM(49, 9) = 1: EM(49, 10) = 2: EM(49, 11) = 1: EM(49, 12) = 2: EM(49, 13) = 384  '1949년

    EM(50, 1) = 2: EM(50, 2) = 1: EM(50, 3) = 2: EM(50, 4) = 2: EM(50, 5) = 1: EM(50, 6) = 2: EM(50, 7) = 1: EM(50, 8) = 1: EM(50, 9) = 2: EM(50, 10) = 1: EM(50, 11) = 2: EM(50, 12) = 1: EM(50, 13) = 354  '1950년

    EM(51, 1) = 2: EM(51, 2) = 1: EM(51, 3) = 2: EM(51, 4) = 2: EM(51, 5) = 1: EM(51, 6) = 2: EM(51, 7) = 1: EM(51, 8) = 2: EM(51, 9) = 1: EM(51, 10) = 2: EM(51, 11) = 1: EM(51, 12) = 2: EM(51, 13) = 355  '1951년

    EM(52, 1) = 1: EM(52, 2) = 2: EM(52, 3) = 1: EM(52, 4) = 2: EM(52, 5) = 4: EM(52, 6) = 2: EM(52, 7) = 1: EM(52, 8) = 2: EM(52, 9) = 1: EM(52, 10) = 2: EM(52, 11) = 1: EM(52, 12) = 2: EM(52, 13) = 384  '1952년

    EM(53, 1) = 1: EM(53, 2) = 2: EM(53, 3) = 1: EM(53, 4) = 1: EM(53, 5) = 2: EM(53, 6) = 2: EM(53, 7) = 1: EM(53, 8) = 2: EM(53, 9) = 2: EM(53, 10) = 1: EM(53, 11) = 2: EM(53, 12) = 2: EM(53, 13) = 355  '1953년

    EM(54, 1) = 1: EM(54, 2) = 1: EM(54, 3) = 2: EM(54, 4) = 1: EM(54, 5) = 1: EM(54, 6) = 2: EM(54, 7) = 1: EM(54, 8) = 2: EM(54, 9) = 2: EM(54, 10) = 1: EM(54, 11) = 2: EM(54, 12) = 2: EM(54, 13) = 354  '1954년

    EM(55, 1) = 2: EM(55, 2) = 1: EM(55, 3) = 4: EM(55, 4) = 1: EM(55, 5) = 1: EM(55, 6) = 2: EM(55, 7) = 1: EM(55, 8) = 2: EM(55, 9) = 1: EM(55, 10) = 2: EM(55, 11) = 2: EM(55, 12) = 2: EM(55, 13) = 384  '1955년

    EM(56, 1) = 1: EM(56, 2) = 2: EM(56, 3) = 1: EM(56, 4) = 2: EM(56, 5) = 1: EM(56, 6) = 1: EM(56, 7) = 2: EM(56, 8) = 1: EM(56, 9) = 2: EM(56, 10) = 1: EM(56, 11) = 2: EM(56, 12) = 2: EM(56, 13) = 354  '1956년

    EM(57, 1) = 2: EM(57, 2) = 1: EM(57, 3) = 2: EM(57, 4) = 1: EM(57, 5) = 2: EM(57, 6) = 1: EM(57, 7) = 1: EM(57, 8) = 5: EM(57, 9) = 2: EM(57, 10) = 1: EM(57, 11) = 2: EM(57, 12) = 2: EM(57, 13) = 384  '1957년

    EM(58, 1) = 1: EM(58, 2) = 2: EM(58, 3) = 2: EM(58, 4) = 1: EM(58, 5) = 2: EM(58, 6) = 1: EM(58, 7) = 1: EM(58, 8) = 2: EM(58, 9) = 1: EM(58, 10) = 2: EM(58, 11) = 1: EM(58, 12) = 2: EM(58, 13) = 354  '1958년

    EM(59, 1) = 1: EM(59, 2) = 2: EM(59, 3) = 2: EM(59, 4) = 1: EM(59, 5) = 2: EM(59, 6) = 1: EM(59, 7) = 2: EM(59, 8) = 1: EM(59, 9) = 2: EM(59, 10) = 1: EM(59, 11) = 2: EM(59, 12) = 1: EM(59, 13) = 354  '1959년

    EM(60, 1) = 2: EM(60, 2) = 1: EM(60, 3) = 2: EM(60, 4) = 1: EM(60, 5) = 2: EM(60, 6) = 5: EM(60, 7) = 2: EM(60, 8) = 1: EM(60, 9) = 2: EM(60, 10) = 1: EM(60, 11) = 2: EM(60, 12) = 1: EM(60, 13) = 384  '1960년

    EM(61, 1) = 2: EM(61, 2) = 1: EM(61, 3) = 2: EM(61, 4) = 1: EM(61, 5) = 2: EM(61, 6) = 1: EM(61, 7) = 2: EM(61, 8) = 2: EM(61, 9) = 1: EM(61, 10) = 2: EM(61, 11) = 1: EM(61, 12) = 2: EM(61, 13) = 355  '1961년

    EM(62, 1) = 1: EM(62, 2) = 2: EM(62, 3) = 1: EM(62, 4) = 1: EM(62, 5) = 2: EM(62, 6) = 1: EM(62, 7) = 2: EM(62, 8) = 2: EM(62, 9) = 1: EM(62, 10) = 2: EM(62, 11) = 2: EM(62, 12) = 1: EM(62, 13) = 354  '1962년

    EM(63, 1) = 2: EM(63, 2) = 1: EM(63, 3) = 2: EM(63, 4) = 3: EM(63, 5) = 2: EM(63, 6) = 1: EM(63, 7) = 2: EM(63, 8) = 1: EM(63, 9) = 2: EM(63, 10) = 2: EM(63, 11) = 2: EM(63, 12) = 1: EM(63, 13) = 384  '1963년

    EM(64, 1) = 2: EM(64, 2) = 1: EM(64, 3) = 2: EM(64, 4) = 1: EM(64, 5) = 1: EM(64, 6) = 2: EM(64, 7) = 1: EM(64, 8) = 2: EM(64, 9) = 1: EM(64, 10) = 2: EM(64, 11) = 2: EM(64, 12) = 2: EM(64, 13) = 355  '1964년

    EM(65, 1) = 1: EM(65, 2) = 2: EM(65, 3) = 1: EM(65, 4) = 2: EM(65, 5) = 1: EM(65, 6) = 1: EM(65, 7) = 2: EM(65, 8) = 1: EM(65, 9) = 1: EM(65, 10) = 2: EM(65, 11) = 2: EM(65, 12) = 1: EM(65, 13) = 353  '1965년

    EM(66, 1) = 2: EM(66, 2) = 2: EM(66, 3) = 5: EM(66, 4) = 2: EM(66, 5) = 1: EM(66, 6) = 1: EM(66, 7) = 2: EM(66, 8) = 1: EM(66, 9) = 1: EM(66, 10) = 2: EM(66, 11) = 2: EM(66, 12) = 1: EM(66, 13) = 384  '1966년

    EM(67, 1) = 2: EM(67, 2) = 2: EM(67, 3) = 1: EM(67, 4) = 2: EM(67, 5) = 2: EM(67, 6) = 1: EM(67, 7) = 1: EM(67, 8) = 2: EM(67, 9) = 1: EM(67, 10) = 2: EM(67, 11) = 1: EM(67, 12) = 2: EM(67, 13) = 355  '1967년

    EM(68, 1) = 1: EM(68, 2) = 2: EM(68, 3) = 2: EM(68, 4) = 1: EM(68, 5) = 2: EM(68, 6) = 1: EM(68, 7) = 5: EM(68, 8) = 2: EM(68, 9) = 1: EM(68, 10) = 2: EM(68, 11) = 1: EM(68, 12) = 2: EM(68, 13) = 384  '1968년

    EM(69, 1) = 1: EM(69, 2) = 2: EM(69, 3) = 1: EM(69, 4) = 2: EM(69, 5) = 1: EM(69, 6) = 2: EM(69, 7) = 2: EM(69, 8) = 1: EM(69, 9) = 2: EM(69, 10) = 1: EM(69, 11) = 2: EM(69, 12) = 1: EM(69, 13) = 354  '1969년

    EM(70, 1) = 2: EM(70, 2) = 1: EM(70, 3) = 1: EM(70, 4) = 2: EM(70, 5) = 2: EM(70, 6) = 1: EM(70, 7) = 2: EM(70, 8) = 1: EM(70, 9) = 2: EM(70, 10) = 2: EM(70, 11) = 1: EM(70, 12) = 2: EM(70, 13) = 355  '1970년

    EM(71, 1) = 1: EM(71, 2) = 2: EM(71, 3) = 1: EM(71, 4) = 1: EM(71, 5) = 5: EM(71, 6) = 2: EM(71, 7) = 1: EM(71, 8) = 2: EM(71, 9) = 2: EM(71, 10) = 2: EM(71, 11) = 1: EM(71, 12) = 2: EM(71, 13) = 384  '1971년

    EM(72, 1) = 1: EM(72, 2) = 2: EM(72, 3) = 1: EM(72, 4) = 1: EM(72, 5) = 2: EM(72, 6) = 1: EM(72, 7) = 2: EM(72, 8) = 1: EM(72, 9) = 2: EM(72, 10) = 2: EM(72, 11) = 2: EM(72, 12) = 1: EM(72, 13) = 354  '1972년

    EM(73, 1) = 2: EM(73, 2) = 1: EM(73, 3) = 2: EM(73, 4) = 1: EM(73, 5) = 1: EM(73, 6) = 2: EM(73, 7) = 1: EM(73, 8) = 1: EM(73, 9) = 2: EM(73, 10) = 2: EM(73, 11) = 2: EM(73, 12) = 1: EM(73, 13) = 354  '1973년

    EM(74, 1) = 2: EM(74, 2) = 2: EM(74, 3) = 1: EM(74, 4) = 5: EM(74, 5) = 1: EM(74, 6) = 2: EM(74, 7) = 1: EM(74, 8) = 1: EM(74, 9) = 2: EM(74, 10) = 2: EM(74, 11) = 1: EM(74, 12) = 2: EM(74, 13) = 384  '1974년

    EM(75, 1) = 2: EM(75, 2) = 2: EM(75, 3) = 1: EM(75, 4) = 2: EM(75, 5) = 1: EM(75, 6) = 1: EM(75, 7) = 2: EM(75, 8) = 1: EM(75, 9) = 1: EM(75, 10) = 2: EM(75, 11) = 1: EM(75, 12) = 2: EM(75, 13) = 354  '1975년

    EM(76, 1) = 2: EM(76, 2) = 2: EM(76, 3) = 1: EM(76, 4) = 2: EM(76, 5) = 1: EM(76, 6) = 2: EM(76, 7) = 1: EM(76, 8) = 5: EM(76, 9) = 2: EM(76, 10) = 1: EM(76, 11) = 1: EM(76, 12) = 2: EM(76, 13) = 384  '1976년

    EM(77, 1) = 2: EM(77, 2) = 1: EM(77, 3) = 2: EM(77, 4) = 2: EM(77, 5) = 1: EM(77, 6) = 2: EM(77, 7) = 1: EM(77, 8) = 2: EM(77, 9) = 1: EM(77, 10) = 2: EM(77, 11) = 1: EM(77, 12) = 1: EM(77, 13) = 354  '1977년

    EM(78, 1) = 2: EM(78, 2) = 2: EM(78, 3) = 1: EM(78, 4) = 2: EM(78, 5) = 1: EM(78, 6) = 2: EM(78, 7) = 2: EM(78, 8) = 1: EM(78, 9) = 2: EM(78, 10) = 1: EM(78, 11) = 2: EM(78, 12) = 1: EM(78, 13) = 355  '1978년

    EM(79, 1) = 2: EM(79, 2) = 1: EM(79, 3) = 1: EM(79, 4) = 2: EM(79, 5) = 1: EM(79, 6) = 6: EM(79, 7) = 1: EM(79, 8) = 2: EM(79, 9) = 2: EM(79, 10) = 1: EM(79, 11) = 2: EM(79, 12) = 1: EM(79, 13) = 384  '1979년

    EM(80, 1) = 2: EM(80, 2) = 1: EM(80, 3) = 1: EM(80, 4) = 2: EM(80, 5) = 1: EM(80, 6) = 2: EM(80, 7) = 1: EM(80, 8) = 2: EM(80, 9) = 2: EM(80, 10) = 1: EM(80, 11) = 2: EM(80, 12) = 2: EM(80, 13) = 355  '1980년

    EM(81, 1) = 1: EM(81, 2) = 2: EM(81, 3) = 1: EM(81, 4) = 1: EM(81, 5) = 2: EM(81, 6) = 1: EM(81, 7) = 1: EM(81, 8) = 2: EM(81, 9) = 2: EM(81, 10) = 1: EM(81, 11) = 2: EM(81, 12) = 2: EM(81, 13) = 354  '1981년

    EM(82, 1) = 2: EM(82, 2) = 1: EM(82, 3) = 2: EM(82, 4) = 3: EM(82, 5) = 2: EM(82, 6) = 1: EM(82, 7) = 1: EM(82, 8) = 2: EM(82, 9) = 2: EM(82, 10) = 1: EM(82, 11) = 2: EM(82, 12) = 2: EM(82, 13) = 384  '1982년

    EM(83, 1) = 2: EM(83, 2) = 1: EM(83, 3) = 2: EM(83, 4) = 1: EM(83, 5) = 1: EM(83, 6) = 2: EM(83, 7) = 1: EM(83, 8) = 1: EM(83, 9) = 2: EM(83, 10) = 1: EM(83, 11) = 2: EM(83, 12) = 2: EM(83, 13) = 354  '1983년

    EM(84, 1) = 2: EM(84, 2) = 1: EM(84, 3) = 2: EM(84, 4) = 2: EM(84, 5) = 1: EM(84, 6) = 1: EM(84, 7) = 2: EM(84, 8) = 1: EM(84, 9) = 1: EM(84, 10) = 5: EM(84, 11) = 2: EM(84, 12) = 2: EM(84, 13) = 384  '1984년

    EM(85, 1) = 1: EM(85, 2) = 2: EM(85, 3) = 2: EM(85, 4) = 1: EM(85, 5) = 2: EM(85, 6) = 1: EM(85, 7) = 2: EM(85, 8) = 1: EM(85, 9) = 1: EM(85, 10) = 2: EM(85, 11) = 1: EM(85, 12) = 2: EM(85, 13) = 354  '1985년

    EM(86, 1) = 1: EM(86, 2) = 2: EM(86, 3) = 2: EM(86, 4) = 1: EM(86, 5) = 2: EM(86, 6) = 2: EM(86, 7) = 1: EM(86, 8) = 2: EM(86, 9) = 1: EM(86, 10) = 2: EM(86, 11) = 1: EM(86, 12) = 1: EM(86, 13) = 354  '1986년

    EM(87, 1) = 2: EM(87, 2) = 1: EM(87, 3) = 2: EM(87, 4) = 2: EM(87, 5) = 1: EM(87, 6) = 5: EM(87, 7) = 2: EM(87, 8) = 2: EM(87, 9) = 1: EM(87, 10) = 2: EM(87, 11) = 1: EM(87, 12) = 2: EM(87, 13) = 385  '1987년

    EM(88, 1) = 1: EM(88, 2) = 1: EM(88, 3) = 2: EM(88, 4) = 1: EM(88, 5) = 2: EM(88, 6) = 1: EM(88, 7) = 2: EM(88, 8) = 2: EM(88, 9) = 1: EM(88, 10) = 2: EM(88, 11) = 2: EM(88, 12) = 1: EM(88, 13) = 354  '1988년

    EM(89, 1) = 2: EM(89, 2) = 1: EM(89, 3) = 1: EM(89, 4) = 2: EM(89, 5) = 1: EM(89, 6) = 2: EM(89, 7) = 1: EM(89, 8) = 2: EM(89, 9) = 2: EM(89, 10) = 1: EM(89, 11) = 2: EM(89, 12) = 2: EM(89, 13) = 355  '1989년

    EM(90, 1) = 1: EM(90, 2) = 2: EM(90, 3) = 1: EM(90, 4) = 1: EM(90, 5) = 5: EM(90, 6) = 1: EM(90, 7) = 2: EM(90, 8) = 1: EM(90, 9) = 2: EM(90, 10) = 2: EM(90, 11) = 2: EM(90, 12) = 2: EM(90, 13) = 384  '1990년

    EM(91, 1) = 1: EM(91, 2) = 2: EM(91, 3) = 1: EM(91, 4) = 1: EM(91, 5) = 2: EM(91, 6) = 1: EM(91, 7) = 1: EM(91, 8) = 2: EM(91, 9) = 1: EM(91, 10) = 2: EM(91, 11) = 2: EM(91, 12) = 2: EM(91, 13) = 354  '1991년

    EM(92, 1) = 1: EM(92, 2) = 2: EM(92, 3) = 2: EM(92, 4) = 1: EM(92, 5) = 1: EM(92, 6) = 2: EM(92, 7) = 1: EM(92, 8) = 1: EM(92, 9) = 2: EM(92, 10) = 1: EM(92, 11) = 2: EM(92, 12) = 2: EM(92, 13) = 354  '1992년

    EM(93, 1) = 1: EM(93, 2) = 2: EM(93, 3) = 5: EM(93, 4) = 2: EM(93, 5) = 1: EM(93, 6) = 2: EM(93, 7) = 1: EM(93, 8) = 1: EM(93, 9) = 2: EM(93, 10) = 1: EM(93, 11) = 2: EM(93, 12) = 1: EM(93, 13) = 383  '1993년

    EM(94, 1) = 2: EM(94, 2) = 2: EM(94, 3) = 2: EM(94, 4) = 1: EM(94, 5) = 2: EM(94, 6) = 1: EM(94, 7) = 2: EM(94, 8) = 1: EM(94, 9) = 1: EM(94, 10) = 2: EM(94, 11) = 1: EM(94, 12) = 2: EM(94, 13) = 355  '1994년

    EM(95, 1) = 1: EM(95, 2) = 2: EM(95, 3) = 2: EM(95, 4) = 1: EM(95, 5) = 2: EM(95, 6) = 2: EM(95, 7) = 1: EM(95, 8) = 5: EM(95, 9) = 2: EM(95, 10) = 1: EM(95, 11) = 1: EM(95, 12) = 2: EM(95, 13) = 384  '1995년

    EM(96, 1) = 1: EM(96, 2) = 2: EM(96, 3) = 1: EM(96, 4) = 2: EM(96, 5) = 2: EM(96, 6) = 1: EM(96, 7) = 2: EM(96, 8) = 1: EM(96, 9) = 2: EM(96, 10) = 2: EM(96, 11) = 1: EM(96, 12) = 2: EM(96, 13) = 355  '1996년

    EM(97, 1) = 1: EM(97, 2) = 1: EM(97, 3) = 2: EM(97, 4) = 1: EM(97, 5) = 2: EM(97, 6) = 1: EM(97, 7) = 2: EM(97, 8) = 2: EM(97, 9) = 1: EM(97, 10) = 2: EM(97, 11) = 2: EM(97, 12) = 1: EM(97, 13) = 354  '1997년

    EM(98, 1) = 2: EM(98, 2) = 1: EM(98, 3) = 1: EM(98, 4) = 2: EM(98, 5) = 3: EM(98, 6) = 2: EM(98, 7) = 2: EM(98, 8) = 1: EM(98, 9) = 2: EM(98, 10) = 2: EM(98, 11) = 2: EM(98, 12) = 1: EM(98, 13) = 384  '1998년

    EM(99, 1) = 2: EM(99, 2) = 1: EM(99, 3) = 1: EM(99, 4) = 2: EM(99, 5) = 1: EM(99, 6) = 1: EM(99, 7) = 2: EM(99, 8) = 1: EM(99, 9) = 2: EM(99, 10) = 2: EM(99, 11) = 2: EM(99, 12) = 1: EM(99, 13) = 354  '1999년


    EM(100, 1) = 2: EM(100, 2) = 2: EM(100, 3) = 1: EM(100, 4) = 1: EM(100, 5) = 2: EM(100, 6) = 1: EM(100, 7) = 1: EM(100, 8) = 2: EM(100, 9) = 1: EM(100, 10) = 2: EM(100, 11) = 2: EM(100, 12) = 1: EM(100, 13) = 354 '2000년

    EM(101, 1) = 2: EM(101, 2) = 2: EM(101, 3) = 2: EM(101, 4) = 3: EM(101, 5) = 2: EM(101, 6) = 1: EM(101, 7) = 1: EM(101, 8) = 2: EM(101, 9) = 1: EM(101, 10) = 2: EM(101, 11) = 1: EM(101, 12) = 2: EM(101, 13) = 384 '2001년

    EM(102, 1) = 2: EM(102, 2) = 2: EM(102, 3) = 1: EM(102, 4) = 2: EM(102, 5) = 1: EM(102, 6) = 2: EM(102, 7) = 1: EM(102, 8) = 1: EM(102, 9) = 2: EM(102, 10) = 1: EM(102, 11) = 2: EM(102, 12) = 1: EM(102, 13) = 354 '2002년

    EM(103, 1) = 2: EM(103, 2) = 2: EM(103, 3) = 1: EM(103, 4) = 2: EM(103, 5) = 2: EM(103, 6) = 1: EM(103, 7) = 2: EM(103, 8) = 1: EM(103, 9) = 1: EM(103, 10) = 2: EM(103, 11) = 1: EM(103, 12) = 2: EM(103, 13) = 355 '2003년

    EM(104, 1) = 1: EM(104, 2) = 5: EM(104, 3) = 2: EM(104, 4) = 2: EM(104, 5) = 1: EM(104, 6) = 2: EM(104, 7) = 1: EM(104, 8) = 2: EM(104, 9) = 2: EM(104, 10) = 1: EM(104, 11) = 1: EM(104, 12) = 2: EM(104, 13) = 384 '2004년

    EM(105, 1) = 1: EM(105, 2) = 2: EM(105, 3) = 1: EM(105, 4) = 2: EM(105, 5) = 1: EM(105, 6) = 2: EM(105, 7) = 2: EM(105, 8) = 1: EM(105, 9) = 2: EM(105, 10) = 2: EM(105, 11) = 1: EM(105, 12) = 2: EM(105, 13) = 355 '2005년

    EM(106, 1) = 1: EM(106, 2) = 1: EM(106, 3) = 2: EM(106, 4) = 1: EM(106, 5) = 2: EM(106, 6) = 1: EM(106, 7) = 5: EM(106, 8) = 2: EM(106, 9) = 2: EM(106, 10) = 1: EM(106, 11) = 2: EM(106, 12) = 2: EM(106, 13) = 384 '2006년

    EM(107, 1) = 1: EM(107, 2) = 1: EM(107, 3) = 2: EM(107, 4) = 1: EM(107, 5) = 1: EM(107, 6) = 2: EM(107, 7) = 1: EM(107, 8) = 2: EM(107, 9) = 2: EM(107, 10) = 2: EM(107, 11) = 1: EM(107, 12) = 2: EM(107, 13) = 354 '2007년

    EM(108, 1) = 2: EM(108, 2) = 1: EM(108, 3) = 1: EM(108, 4) = 2: EM(108, 5) = 1: EM(108, 6) = 1: EM(108, 7) = 2: EM(108, 8) = 1: EM(108, 9) = 2: EM(108, 10) = 2: EM(108, 11) = 1: EM(108, 12) = 2: EM(108, 13) = 354 '2008년

    EM(109, 1) = 2: EM(109, 2) = 2: EM(109, 3) = 1: EM(109, 4) = 1: EM(109, 5) = 5: EM(109, 6) = 1: EM(109, 7) = 2: EM(109, 8) = 1: EM(109, 9) = 2: EM(109, 10) = 1: EM(109, 11) = 2: EM(109, 12) = 2: EM(109, 13) = 384 '2009년

    EM(110, 1) = 2: EM(110, 2) = 1: EM(110, 3) = 2: EM(110, 4) = 1: EM(110, 5) = 2: EM(110, 6) = 1: EM(110, 7) = 1: EM(110, 8) = 2: EM(110, 9) = 1: EM(110, 10) = 2: EM(110, 11) = 1: EM(110, 12) = 2: EM(110, 13) = 354  '2010년

    EM(111, 1) = 2: EM(111, 2) = 1: EM(111, 3) = 2: EM(111, 4) = 2: EM(111, 5) = 1: EM(111, 6) = 2: EM(111, 7) = 1: EM(111, 8) = 1: EM(111, 9) = 2: EM(111, 10) = 1: EM(111, 11) = 2: EM(111, 12) = 1: EM(111, 13) = 354  '2011년

    EM(112, 1) = 2: EM(112, 2) = 1: EM(112, 3) = 6: EM(112, 4) = 2: EM(112, 5) = 1: EM(112, 6) = 2: EM(112, 7) = 1: EM(112, 8) = 1: EM(112, 9) = 2: EM(112, 10) = 1: EM(112, 11) = 2: EM(112, 12) = 1: EM(112, 13) = 384  '2012년

    EM(113, 1) = 2: EM(113, 2) = 1: EM(113, 3) = 2: EM(113, 4) = 2: EM(113, 5) = 1: EM(113, 6) = 2: EM(113, 7) = 1: EM(113, 8) = 2: EM(113, 9) = 1: EM(113, 10) = 2: EM(113, 11) = 1: EM(113, 12) = 2: EM(113, 13) = 355  '2013년

    EM(114, 1) = 1: EM(114, 2) = 2: EM(114, 3) = 1: EM(114, 4) = 2: EM(114, 5) = 1: EM(114, 6) = 2: EM(114, 7) = 1: EM(114, 8) = 2: EM(114, 9) = 5: EM(114, 10) = 2: EM(114, 11) = 1: EM(114, 12) = 2: EM(114, 13) = 384  '2014년

    EM(115, 1) = 1: EM(115, 2) = 2: EM(115, 3) = 1: EM(115, 4) = 1: EM(115, 5) = 2: EM(115, 6) = 1: EM(115, 7) = 2: EM(115, 8) = 2: EM(115, 9) = 2: EM(115, 10) = 1: EM(115, 11) = 2: EM(115, 12) = 2: EM(115, 13) = 355  '2015년

    EM(116, 1) = 1: EM(116, 2) = 1: EM(116, 3) = 2: EM(116, 4) = 1: EM(116, 5) = 1: EM(116, 6) = 2: EM(116, 7) = 1: EM(116, 8) = 2: EM(116, 9) = 2: EM(116, 10) = 1: EM(116, 11) = 2: EM(116, 12) = 2: EM(116, 13) = 354  '2016년

    EM(117, 1) = 2: EM(117, 2) = 1: EM(117, 3) = 1: EM(117, 4) = 2: EM(117, 5) = 3: EM(117, 6) = 2: EM(117, 7) = 1: EM(117, 8) = 2: EM(117, 9) = 1: EM(117, 10) = 2: EM(117, 11) = 2: EM(117, 12) = 2: EM(117, 13) = 384  '2017년

    EM(118, 1) = 1: EM(118, 2) = 2: EM(118, 3) = 1: EM(118, 4) = 2: EM(118, 5) = 1: EM(118, 6) = 1: EM(118, 7) = 2: EM(118, 8) = 1: EM(118, 9) = 2: EM(118, 10) = 1: EM(118, 11) = 2: EM(118, 12) = 2: EM(118, 13) = 354  '2018년

    EM(119, 1) = 2: EM(119, 2) = 1: EM(119, 3) = 2: EM(119, 4) = 1: EM(119, 5) = 2: EM(119, 6) = 1: EM(119, 7) = 1: EM(119, 8) = 2: EM(119, 9) = 1: EM(119, 10) = 2: EM(119, 11) = 1: EM(119, 12) = 2: EM(119, 13) = 354  '2019년

    EM(120, 1) = 2: EM(120, 2) = 1: EM(120, 3) = 2: EM(120, 4) = 5: EM(120, 5) = 2: EM(120, 6) = 1: EM(120, 7) = 1: EM(120, 8) = 2: EM(120, 9) = 1: EM(120, 10) = 2: EM(120, 11) = 1: EM(120, 12) = 2: EM(120, 13) = 384  '2020년

    EM(121, 1) = 1: EM(121, 2) = 2: EM(121, 3) = 2: EM(121, 4) = 1: EM(121, 5) = 2: EM(121, 6) = 1: EM(121, 7) = 2: EM(121, 8) = 1: EM(121, 9) = 2: EM(121, 10) = 1: EM(121, 11) = 2: EM(121, 12) = 1: EM(121, 13) = 354  '2021년

    EM(122, 1) = 2: EM(122, 2) = 1: EM(122, 3) = 2: EM(122, 4) = 1: EM(122, 5) = 2: EM(122, 6) = 2: EM(122, 7) = 1: EM(122, 8) = 2: EM(122, 9) = 1: EM(122, 10) = 2: EM(122, 11) = 1: EM(122, 12) = 2: EM(122, 13) = 355  '2022년

    EM(123, 1) = 1: EM(123, 2) = 5: EM(123, 3) = 2: EM(123, 4) = 1: EM(123, 5) = 2: EM(123, 6) = 1: EM(123, 7) = 2: EM(123, 8) = 2: EM(123, 9) = 1: EM(123, 10) = 2: EM(123, 11) = 1: EM(123, 12) = 2: EM(123, 13) = 384  '2023년

    EM(124, 1) = 1: EM(124, 2) = 2: EM(124, 3) = 1: EM(124, 4) = 1: EM(124, 5) = 2: EM(124, 6) = 1: EM(124, 7) = 2: EM(124, 8) = 2: EM(124, 9) = 1: EM(124, 10) = 2: EM(124, 11) = 2: EM(124, 12) = 1: EM(124, 13) = 354  '2024년

    EM(125, 1) = 2: EM(125, 2) = 1: EM(125, 3) = 2: EM(125, 4) = 1: EM(125, 5) = 1: EM(125, 6) = 5: EM(125, 7) = 2: EM(125, 8) = 1: EM(125, 9) = 2: EM(125, 10) = 2: EM(125, 11) = 2: EM(125, 12) = 1: EM(125, 13) = 384  '2025년

    EM(126, 1) = 2: EM(126, 2) = 1: EM(126, 3) = 2: EM(126, 4) = 1: EM(126, 5) = 1: EM(126, 6) = 2: EM(126, 7) = 1: EM(126, 8) = 2: EM(126, 9) = 1: EM(126, 10) = 2: EM(126, 11) = 2: EM(126, 12) = 2: EM(126, 13) = 355  '2026년

    EM(127, 1) = 1: EM(127, 2) = 2: EM(127, 3) = 1: EM(127, 4) = 2: EM(127, 5) = 1: EM(127, 6) = 1: EM(127, 7) = 2: EM(127, 8) = 1: EM(127, 9) = 1: EM(127, 10) = 2: EM(127, 11) = 2: EM(127, 12) = 2: EM(127, 13) = 354  '2027년

    EM(128, 1) = 1: EM(128, 2) = 2: EM(128, 3) = 2: EM(128, 4) = 1: EM(128, 5) = 5: EM(128, 6) = 1: EM(128, 7) = 2: EM(128, 8) = 1: EM(128, 9) = 1: EM(128, 10) = 2: EM(128, 11) = 2: EM(128, 12) = 1: EM(128, 13) = 383  '2028년

    EM(129, 1) = 2: EM(129, 2) = 2: EM(129, 3) = 1: EM(129, 4) = 2: EM(129, 5) = 2: EM(129, 6) = 1: EM(129, 7) = 1: EM(129, 8) = 2: EM(129, 9) = 1: EM(129, 10) = 1: EM(129, 11) = 2: EM(129, 12) = 2: EM(129, 13) = 355  '2029년

    EM(130, 1) = 1: EM(130, 2) = 2: EM(130, 3) = 1: EM(130, 4) = 2: EM(130, 5) = 2: EM(130, 6) = 1: EM(130, 7) = 2: EM(130, 8) = 1: EM(130, 9) = 2: EM(130, 10) = 1: EM(130, 11) = 2: EM(130, 12) = 1: EM(130, 13) = 354  '2030년

End Sub


Function LunToSun(LY As Integer, LM As Integer, LD As Integer, LA As Boolean) As Date

        

    On Error GoTo ErrorLun

    

    Dim Y As Integer

    Dim T As Long, Y1 As Long, Y2 As Long, i As Integer, SY As Single, SM, SD, SW As Integer

    

    Y = LY - 1900

    Call CalenderData

    T = LD + 49   ' 기준해인 1901년은 음력 1월 1일이 양력보다 49일 늦다

    For i = 1 To Y - 1   ' 전해까지의 음력일수를 구한다

        T = T + EM(i, 13)

    Next i

    For i = 1 To LM - 1    '전월까지의 음력일수를 계산한다

        T = T + VM(EM(Y, i))

    Next i

    If LA = True And EM(Y, LM) < 3 Then   '윤달이 맞는지 확인한다

       MsgBox "이 달은 윤달이 아닙니다."

       CY = 0: CM = 0: CD = 0

       Exit Function

    End If


    If LA = True Then     '윤달인 경우 윤달 일수를 계산한다

       If EM(Y, LM) = 3 Or EM(Y, LM) = 4 Then

          T = T + 29

       Else

          T = T + 30

       End If

    End If

    ' 양력이 4년에 한번씩 윤년이 있으므로 계산할 음력해까지

    ' 몇번의 윤년이 있는가 알기위해 음력의 누적일수를 양력 4년 동안의 일수로 나눈 몫을 구한다.

    

    LunToSun = CDate(T + 366)

    Exit Function

ErrorLun:

    Exit Function

End Function


Function SunToLun(SY As Integer, SM As Long, SD As Long)

    On Error GoTo ErrorSun

    '양력날짜를 음력날짜로 바꾼다

    Dim T As Long

    Dim LY As Single

    Dim LM As Integer

    Dim LD As Integer

    Dim Y As Long

    Y = SY - 1900

    Call CalenderData  '음력 데이타를 불러온다

    '양력날짜를 합산한다

    T = 365 * (Y - 1) + MT(SM - 1) + SD + Int(Y / 4)

    If Y = 4 * Int(Y / 4) And 30 * SM + SD < 90 Then

       T = T - 1

    End If

    T = T - 49 '2001년은 음력이 양력보다 49일 늦으므로 1월 1일을 맞추기 위래 49를 뺀다

    LY = 1

    '음력해를 찾는다

    Do While (T > EM(LY, 13))

       T = T - EM(LY, 13)

       LY = LY + 1

    Loop

    '음력월을 찾는다

    LM = 1

    Do While (T > VM(EM(LY, LM)))

       T = T - VM(EM(LY, LM))

       LM = LM + 1

    Loop

    LD = T

    CY = LY + 1900: CM = LM: CD = LD

    '윤달인지 검사

    If (EM(LY, LM) = 3 Or EM(LY, LM) = 4) And T > 29 Then

       CD = T - 29: CA = True

    ElseIf (EM(LY, LM) = 5 Or EM(LY, LM) = 6) And T > 30 Then

       CD = T - 30: CA = True

    Else: CA = False

    End If

    If CA = True Then       '윤달인경우 윤달을 표시하기 위한 조건문

        SunToLun = CY & "-" & "윤" & CM & "-" & CD

        Else

        SunToLun = CY & "-" & CM & "-" & CD

        End If

    Exit Function

ErrorSun:

    Exit Function

End Function


블로그 이미지

Link2Me

,
728x90

VBA 요일 구하기



엑셀을 다루다보면 날짜에 해당하는 요일을 구해야 할 때가 있습니다.

해당 날짜의 요일이 뭔지 금방 찾아주는 VBA 코드입니다.


Sub 요일구하기()
    Dim rngC As Range
    Dim rngAll As Range
       
    Application.ScreenUpdating = False    '// 화면 업데이트 (일시) 중지
    Set rngAll = Range([B2], Cells(Rows.Count, "B").End(3))  '//B2 셀부터 값이 있는 B열마지막 셀까지 범위
   
    For Each rngC In rngAll

   '// rngC는 현재 셀, rngAll 은 B열 구간범위, rngC가 for문으로 하나 하나 증가하면서 실행

        'rngC.Offset(, 1) = Application.WorksheetFunction.Text(rngC, "ddd")    '// 영문으로 날짜 반환
        rngC.Offset(, 1) = Format(rngC, "aaa")  '// 월, 화, 수 의 날짜 구하기
    Next rngC
   
    Set rngAll = Nothing  '// 변수 초기화
End Sub



'업무 능력 향상 > 엑셀 VBA 기초' 카테고리의 다른 글

[VBA기초] 숫자만 추출  (1) 2014.05.23
[VBA기초] 영문자만 추출  (0) 2014.05.22
[VBA기초] 엑셀메모 한꺼번에 지우기  (0) 2014.04.30
[VBA기초] 열 자동 맞춤  (0) 2014.03.26
[VBA] 글꼴 변경  (0) 2014.03.09
블로그 이미지

Link2Me

,
728x90

엑셀메모 한꺼번에 지우기


셀창에서 Alt + F11 누르면 나오는 창에서 [삽입] - [모듈] 선택하세요.

그런 다음에 아래코드를 입력하세요..

Sub 메모삭제()
    Range("A2:D100").ClearComments
    '// 범위 셀 구간이 A2 에서 D100 이라는 의미이므로 상황에 맞게 수정
End Sub

이제 커서를 위 VBA 코드 사이에 두고 F5키를 누르세요..

그러면 메모 지워집니다..

엑셀의 ActiveSheet 에 있는 메모가 지워지는 겁니다.

'업무 능력 향상 > 엑셀 VBA 기초' 카테고리의 다른 글

[VBA기초] 영문자만 추출  (0) 2014.05.22
[VBA기초] 요일 구하기  (0) 2014.05.08
[VBA기초] 열 자동 맞춤  (0) 2014.03.26
[VBA] 글꼴 변경  (0) 2014.03.09
VBA 데이터 옮기기  (0) 2014.03.04
블로그 이미지

Link2Me

,
728x90

MS-Word 스타일 만들어 쓰기



MS 워드 작업을 편하게 하려면 원하는 스타일을 만들어 쓰는 것이 좋습니다.





이런 스타일을 어떻게 만드는지 아래 그림을 죽 보면 만들 수 있게 적어봤습니다.












왼쪽에서 얼마나 들여쓰기를 할 것인가?

둘째줄 이하는 얼마의 간격으로 할 것인가? 를 지정하는 곳입니다.

둘째줄 이하는 0.6 cm 정도면 적당합니다.


글꼴 크기와 서식을 지정합니다.



다시 한번 설명을 합니다. 무슨 의미인지 이해를 하면 됩니다.


이제 쉽게 만들어서 사용할 수 있을 겁니다.


블로그 이미지

Link2Me

,
728x90

열 자동 맞춤


Sub 자동맞춤()

Columns("A:AH").AutoFit  '// A열에서 AH열까지 열 자동 맞춤

Columns("A:B").HorizontalAlignment = xlCenter  '// A열,B열 가운데 정렬
Rows(1).HorizontalAlignment = xlCenter  '// 1행만 가운데 정렬

End Sub


위 코드만으로 열 맞춤을 자동으로 간단하게 해결됩니다.

방법은 엑셀이 띄워진 상태에서 Alt + F11 키를 눌러서 새로운 창이 뜨면 [삽입] - [모듈] 을 누릅니다.

나오는 창에다가 위의 코드를 입력합니다.

그런 다음에 F5키를 누릅니다.


그러면 엑셀의 현재 활성화된 Sheet에 있는 열 자동 맞춤이 됩니다.



'업무 능력 향상 > 엑셀 VBA 기초' 카테고리의 다른 글

[VBA기초] 요일 구하기  (0) 2014.05.08
[VBA기초] 엑셀메모 한꺼번에 지우기  (0) 2014.04.30
[VBA] 글꼴 변경  (0) 2014.03.09
VBA 데이터 옮기기  (0) 2014.03.04
VBA 빈행 삽입하기  (6) 2014.03.02
블로그 이미지

Link2Me

,
728x90

글꼴 변경


열기준으로 크기와 글꼴을 변경하고 싶을 때 지정하는 간단한 VBA 코드입니다.


Sub 글꼴정리()
    Dim rngTarget As Range
    Dim rngC As Range
   
    Application.ScreenUpdating = False      '//화면 업데이트 (일시)정지
    ActiveCell.Select        '// ActiveCell 이 있는 셀 아래를 글꼴 변경
    Set rngTarget = Range(Cells(ActiveCell.Row, "A"), Cells(Rows.Count, "A").End(3))
   
    For Each rngC In rngTarget
        With rngC
           .Font.Name = "Tahoma"
           .Font.Size = 11
        End With
        With rngC.Offset(0, 1)
           .Font.Name = "맑은 고딕"
           .Font.Size = 10.5
        End With
        With rngC.Offset(0, 2)
           .Font.Name = "맑은 고딕"
           .Font.Size = 10.5
        End With
    Next rngC
    Set rngTarget = Nothing '// 변수 초기화  
    MsgBox "작업 완료"
End Sub


블로그 이미지

Link2Me

,
728x90

중복값 찾기(Countif 함수 활용)


엑셀 중복값 찾기를 Countif 함수를 이용한 방법으로 설명해보겠습니다.

품목에 중복되는 것이 어느정도 되는지 카운트를 해보고 싶다면?

그냥 =COUNTIF($A$2:$A$23,A2) 이런식으로 값을 넣고 죽 넣으면 어떤 현상이 발생할까요?

C열과 D열에 각각 중복값 숫자를 구해보겠습니다.



Countif(조건범위,조건) 함수는 하나의 조건을 만족하는 셀의 개수를 구해주는 함수입니다.

C2셀에 =COUNTIF($A$2:$A$23,A2) 를 입력하고 엔터를 치면 아래 그림처럼 나옵니다.

조건범위는 변동되지 않도록 절대값으로 지정했습니다.



이번에는 조건범위를 시작셀은 $A$2 로 절대값으로 지정했는데

마지막셀은 상대값 A2 로 지정을 했네요..

어떤 변화가 일어날지 감이 잡히시나요?

일단 죽 마우스로 Drag 하여 내려서 수식으로 채웁니다.



두개를 비교해봤더니 서로 결과가 다르네요. 왜 그런지 아시겠어요?



C열은 조건범위가 절대값 이었고

D열은 조건범위가 절대값:상대값으로 해서 조건범위가 달라지게 만들었다는 점입니다.

"대체 무슨 소리야?" 하시는 분들을 위해 차근차근 설명해보겠습니다.


=COUNTIF($A$2:A2,A2)  --> 조건범위가 A2이고 조건이 A2 이므로 1개

=COUNTIF($A$2:A3,A3)  --> 조건범위가 A2:A3 이고 조건이 A3 이므로 A2에서 1개, A3개에서 1개 그래서 2개

=COUNTIF($A$2:A4,A4)  --> 조건범위가 A2:A4 이고 조건이 A4 인데, 필통은 처음 나오는 것이니까 1개


이제 감이 잡히죠?

이러한 조건식을 지정하면 처음 나오는 것은 개수가 1개로 결과를 돌려줍니다.

따라서, D열에서는 숫자가 1인 것만 찾아내면 되는 거죠.

수식을 값으로 변경하고 숫자가 1인 것만 찾고 나머지는 지우겠다고 하는 경우라면 이 방법이 가장 좋습니다.


필터를 걸어서 정렬을 한 다음에 구한 개수를 확인해보면 육안 비교가 되니 더 의미가 와닿을 겁니다.



COUNTIF 함수를 이용한 중복값 검사를 해봤습니다.

이 함수식은 유용하게 사용되는 경우가 많으니 잘 활용하시기 바랍니다.


블로그 이미지

Link2Me

,
728x90

주소에서 중복부분만 제거하고 싶을 때


문의사항

"경기 광명시 소하동(소하동) 365번지" 이런식인 주소를

"경기 광명시 소하동 365번지" 로 바꾸고 싶어요.

"경기 광명시 소하1동(소하동)" 이렇게 앞뒤가 다른 말은 그대로 두고요.

주소처리하는 작업도 알아두면 좋을 거 같아서 작성을 해봤습니다.

수정해서 사용하실 분은 빨간색 글씨만 수정해서 사용하면 됩니다.


Sub juso_check()
    Dim rngC As Range
    Dim rngDB As Range
    Dim startT As Byte '// (시작위치 변수 지정
    Dim endT As Byte   '// ( 마지막 위치 지정
    Dim tempV, tempC As String
   
   Application.ScreenUpdating = False        '//화면 업데이트 (일시) 정지
    Set rngDB = Range([A2], Cells(Rows.Count, "A").End(3))
    '// 주소가 들어간 범위의 열의 마지막 데이터까지 자동 인식
    For Each rngC In rngDB
        startT = InStr(rngC, "(")
        endT = InStr(rngC, ")")
        tempV = Mid(rngC, startT + 1, endT - startT - 1) '// 괄호안의 글자
        tempC = Mid(rngC, startT - Len(tempV), Len(tempV))  '//괄호안의 글자길이만큼의 앞의 글자
        If tempV = tempC Then
            rngC.Offset(0,1) = Left(rngC, startT - 1) & Mid(rngC, endT + 1, Len(rngC) - endT)
            '// rngC.Offset(0,1) 은 오른쪽으로 1열 이동하라는 의미
            '// 만약 값을 5열 정도 뒤로 이동하고자 한다면 rngC.Offset(0,5) 로 변경하세요

        Else
            rngC.Offset(0, 1) = rngC
        End If
    Next rngC
    Set rngDB = Nothing    '// 개체변수 초기화
    Columns("B").AutoFit  '// 주소를 추출한 열 자동 맞춤
    MsgBox "작업완료"
End Sub




블로그 이미지

Link2Me

,
728x90

VBA 데이터 옮기기


옮기고 싶은 데이터를 옮기는 방법은 다양하게 있습니다.

따라서 본인이 옮기고 싶은 과정을 자동 매크로를 이용하여 VBA 코드가 뭔지 알아내보는 것도 좋습니다.

아래 빨간색 부분이 자동 매크로를 통해서 알아낸 부분입니다.

현재 커서가 있는 셀을 기준으로 해서 셀을 선택해서 잘라내고, 왼쪽으로 한칸, 아래로 한칸 이동한 다음에 복사한 것을 붙여넣기 합니다.

행 삽입하는 VBA 코드를 약간만 수정하면 되므로 파일 첨부는 하지 않습니다.



Sub Shift_Data()
    Dim Counter
    Dim i As Integer
    Dim rngTarget As Range

    Application.ScreenUpdating = False      '// 화면 업데이트 (일시)정지
    ActiveCell.Select   '//현재 커서가 있는 셀을 선택하라
    Set rngTarget = Range(ActiveCell, Cells(Rows.Count, ActiveCell.Column).End(3))
     '// 현재 커서가 있는 셀부터 시작해서 같은 열의 데이터가 입력된 마지막셀까지 범위 지정
    Counter = rngTarget.Rows.Count

    For i = 1 To Counter   '// 반복
        ActiveCell.Value = Trim(ActiveCell.Value)   '// ActiveCell 의 빈공백 제거
        If ActiveCell.Value <> "" Then   '// 현재 셀이 공백이 아니면
            With ActiveCell
                Selection.Cut            '// 선택된 셀/구간을 잘라라
                ActiveCell.Offset(1, -1).Range("A1").Select
                ActiveSheet.Paste
            End With
            Counter = Counter - 1
            ActiveCell.Offset(1, 1).Select  '// 셀을 옮기고 싶은 위치를 지정
        Else
            ActiveCell.Offset(1).Select  '// 1행 아래로 이동
        End If
    Next i
    MsgBox "처리완료"
End Sub


또다른 방법인데, 이 방법이 훨씬 더 간결하고 간단하게 옮기는 방법입니다.

복사할 구간 범위를 설정하고 다른 시트로 복사하는 방법입니다.


Sub Copy_Data()
    Dim rngC As Range
    Dim rngAll As Range

    Application.ScreenUpdating = False      '// 화면 업데이트 (일시)정지
    Set rngAll = Range([A2], Cells(Rows.Count, "E").End(3))
     '// 추출한 데이터가 있는 셀 범위 지정
        
    With Worksheets("data")  '// 해당 시트명 직접 입력
         rngAll.Copy .Cells(Rows.Count, 1).End(3)(2)
         '// 구간범위 전체를 복사하여 지정한(data) 시트의 마지막 값이 들어있는 아래행에 복사하라

           '// Cells(행, 열) 개념을 생각하면 cells(행,1) 의 의미는 첫번째 열 즉 A열을 의미
    End With
            
    MsgBox "처리완료"
End Sub


'업무 능력 향상 > 엑셀 VBA 기초' 카테고리의 다른 글

[VBA기초] 열 자동 맞춤  (0) 2014.03.26
[VBA] 글꼴 변경  (0) 2014.03.09
VBA 빈행 삽입하기  (6) 2014.03.02
VBA 빈셀은 지우고 한글은 우측셀로 이동시키기  (0) 2014.02.28
VBA 괄호제거  (0) 2014.02.26
블로그 이미지

Link2Me

,
728x90

VBA 빈행 삽입하기


커서가 있는 위치부터 한행씩 빈행을 삽입하는 VBA 코드 입니다.


위 그림을 보면 중간에 빈행이 있는 경우도 있고 연달아 데이터가 입력된 경우도 있을 겁니다.

일정하게 한행씩 빈행을 삽입하는 코드로 작성을 했습니다.

이미 한행씩 빈행이 삽입되어 있는 경우에는 변화가 생기지 않습니다.


VBA_Insert_blankrow.vbs


Sub InSert_BlankRow()
    Dim Counter
    Dim i As Integer
    Dim rngTarget As Range

    Application.ScreenUpdating = False      '// 화면 업데이트 (일시)정지
    ActiveCell.Select   '//현재 커서가 있는 셀을 기준으로
    Set rngTarget = Range(ActiveCell, Cells(Rows.Count, ActiveCell.Column).End(3))

     '// 현재 커서가 있는 셀부터 시작해서 데이터가 입력된 마지막셀까지 범위 지정
    Counter = rngTarget.Rows.Count   

    For i = 1 To Counter   '// Loops through the desired number of rows.
        ActiveCell.Value = Trim(ActiveCell.Value)   '// ActiveCell 의 빈행백 제거       
        If ActiveCell.Value <> "" And ActiveCell.Offset(1).Value <> "" Then

             '// ActiveCell 과 바로 아래 셀이 둘다 공백이 아니면 ActiveCell 아래 행을 하나 삽입하라
            ActiveCell.Offset(1).EntireRow.Insert
            Counter = Counter - 1
            ActiveCell.Offset(2).Select   '// 2행 아래로 이동
        ElseIf ActiveCell.Value = "" And ActiveCell.Offset(1).Value = "" Then

               '// ActiveCell 과 바로 아래 셀이 둘다 공백이면 ActiveCell 아래 행을 삭제하라
            ActiveCell.Offset(1).EntireRow.Delete
        Else
            ActiveCell.Offset(1).Select  '// 1행 아래로 이동
        End If   
    Next i
End Sub


질의가 있어서 내용을 추가합니다. 몇번을 실행하는지 여부를 i, d 를 추가해서 표시하도록 했습니다.


Sub 행일괄삽입()
    Dim C As Range
    Dim rngtarget As Range
    Dim i As Double, d As Double
   
    Set rngtarget = Range("B1", Cells(Rows.Count, "B").End(3))
    i = 0
    d = 0
   
    For Each C In rngtarget
        C.Select
        If C.Value <> "" And C.Offset(1).Value <> "" Then
            C.Offset(1).EntireRow.Insert
            i = i + 1
       
        ElseIf C.Value = "" And C.Offset(1).Value = "" Then
            C.Offset(1).EntireRow.Delete
            d = d + 1
        Else
       
        End If
    Next C
   
    MsgBox "d=" & d & " i=" & i
End Sub

'업무 능력 향상 > 엑셀 VBA 기초' 카테고리의 다른 글

[VBA] 글꼴 변경  (0) 2014.03.09
VBA 데이터 옮기기  (0) 2014.03.04
VBA 빈셀은 지우고 한글은 우측셀로 이동시키기  (0) 2014.02.28
VBA 괄호제거  (0) 2014.02.26
[VBA기초] 빈행 삭제  (4) 2014.02.06
블로그 이미지

Link2Me

,
728x90

빈셀은 지우고 한글은 우측셀로 이동시키는 VBA


Sub 빈셀지우고한글우측이동()
    Dim Counter
    Dim splitT As Byte '// (시작위치 변수 지정
    Dim endT            '// ( 마지막 위치 지정
    Dim i As Integer
    Dim rngTarget As Range
 
    Application.ScreenUpdating = False      '//화면 업데이트 (일시)정지
    ActiveCell.Select
    Set rngTarget = Range(ActiveCell, Cells(Rows.Count, ActiveCell.Column).End(3))
    Counter = rngTarget.Rows.Count
    ' 반복할 줄 수 표시
    For i = 1 To Counter
        ActiveCell.Hyperlinks.Delete         '// 하이퍼링크 제거
        ActiveCell.Value = Trim(ActiveCell.Value)  '해당셀의 좌우 공백을 제거     
        If ActiveCell.Value = "" Then
            Selection.EntireRow.Delete     '//공백이면 해당 행을 삭제하라
            Counter = Counter - 1    '//전체 행수를 하나 줄여라
        ElseIf InStr(ActiveCell.Value, "(") = 1 Then  '//첫글자에 (가 들어가 있으면
            splitT = InStr(ActiveCell.Value, "(")
            endT = InStr(ActiveCell.Value, ")")
            ActiveCell.Value = Mid(ActiveCell.Value, splitT + 1, endT - splitT - 1)          
            ActiveCell.Offset(1, 0).Select  '// 다음 셀로 이동
        ElseIf InStr(ActiveCell.Value, "(") > 0 Then
            splitT = InStr(ActiveCell.Value, "(")
            endT = InStr(ActiveCell.Value, ")")
            ActiveCell.Offset(0, 2) = Mid(ActiveCell.Value, splitT + 1, endT - splitT - 1)
            ActiveCell.Value = Left(ActiveCell.Value, splitT - 1)          
            ActiveCell.Offset(1, 0).Select  '// 다음 셀로 이동
        ElseIf InStr(ActiveCell.Value, ";") > 0 Then
            splitT = InStr(ActiveCell.Value, ";")
            ActiveCell.Offset(0, 2) = Trim(Mid(ActiveCell.Value, splitT + 1, Len(ActiveCell.Value) - splitT + 1))
            ActiveCell.Value = Trim(Left(ActiveCell.Value, splitT - 1))           
            ActiveCell.Offset(1, 0).Select   '// 다음 셀로 이동
        ElseIf Left(ActiveCell.Value, 4) Like "*[가-힣]*" Then   '// 해당 셀이 한글을 포함하는지 검사
            Selection.Cut  '//해당셀 잘라내기
            ActiveCell.Offset(-1, 1).Range("A1").Select  '// 위로 한줄 이동하고 오른쪽으로 한칸 이동
            ActiveSheet.Paste  '// 값 붙여넣기
            ActiveCell.Offset(1, -1).Range("A1").Select  '// 아래로 한줄 이동하고 왼쪽으로 한칸 이동
            Selection.EntireRow.Delete  '// 한줄 전체 삭제
        Else           
            ActiveCell.Offset(1, 0).Select  '// 다음 셀로 이동
        End If
    Next i

    'Columns("A:H").AutoFit
    '열의 너비를 자동으로 맞추는 건데 필요하면 콤마 제거하고 사용하세요

End Sub


INSTR 함수를 이용하여 [ ] 사항도 처리할 수도 있고 원하는 사항을 IF문으로 추가하면 됩니다.

간혹 자료가 하이퍼링크가 걸려 있는 경우도 있을때도 있어 추가를 해두었는데 필요한 사항에 따라 추가하거나 삭제해서 사용하면 됩니다.

위 VBA 코드는 현재 셀(ActiveCell) 아래셀로 내려가면서 해당사항을 처리합니다.

따라서 IF문의 순서에 따라 우선순위가 정해집니다.



'업무 능력 향상 > 엑셀 VBA 기초' 카테고리의 다른 글

VBA 데이터 옮기기  (0) 2014.03.04
VBA 빈행 삽입하기  (6) 2014.03.02
VBA 괄호제거  (0) 2014.02.26
[VBA기초] 빈행 삭제  (4) 2014.02.06
복사할 때 글자색도 같이 넣는 방법  (0) 2014.01.29
블로그 이미지

Link2Me

,
728x90

VBA 괄호제거


Sub 괄호제거()
    '문자열 중 ()괄호 안의 문자열만 따로 추출하기
    Dim rngTarget As Range '해당 영역을 변수로 지정
    Dim C As Range '셀을 지정
    Dim startChk As Byte '(시작위치 변수 지정
    Dim endChk As Byte ')끝위치 변수 지정
    Dim tmpString As String '추출 문자열 임시 저장 변수
  
    Set rngTarget = Selection  '// 선택한 영역만 할 경우
    Application.ScreenUpdating = False      '화면 업데이트 (일시)정지

    'ActiveCell.Select    '// Selection 으로 선택할 경우에는 이 Line 도 주석처리해야 함
    'Set rngTarget = Range(ActiveCell, Cells(Rows.Count, ActiveCell.Column).End(3))
  
    For Each C In rngTarget
        C.Value = Trim(C.Value)
        startChk = InStr(C.Value, "(")
        endChk = InStr(C.Value, ")")
      
        '// ()가 포함된 문자열 추출
        'tmpString = Mid(C.Value, startChk, endChk - startChk + 1)
        'C.Offset(0, 1).Value = tmpString
      
        '// ()를 제외한 문자열 추출
        'tmpString = Mid(C.Value, startChk + 1, endChk - startChk - 1)
        'C.Offset(0, 2).Value = tmpString

        '// 자체 Cell 에 덮어쓰기
        If startChk = 1 Then
            C.Value = Mid(C.Value, startChk + 1, endChk - startChk - 1)
        End If
      
    Next C   
    Set rngTarget = Nothing
End Sub

블로그 이미지

Link2Me

,
728x90

동일자료 중복검사


특정열 기준으로 동일자료가 얼마나 존재하는지 중복검사하고 싶을 때 검사하고 싶은 경우가 있습니다.


중복된 건수가 궁금한 경우에는 =COUNTIF($A$2:A2,A2)

'// 시작셀은 고정으로 두고 범위를 상대셀로 두어 계속 가변적으로 변하도록 만들어서 중복된 숫자를 다르게 카운트 하도록 하는 겁니다.


중복된 건수는 Blank 처리하고 싶은 경우에는 =IF(COUNTIF($A$2:A2,A2)=1,1,"")


그런 다음에 필터를 이용하여 정렬(sort)를 하면 어떤 자료가 중복된 것인지 육안으로 확인이 가능합니다.



블로그 이미지

Link2Me

,
728x90

고급필터 AdvancedFilter


고급필터로 조건 찾는 것은 이거 하나면 복사하는 건 제대로 해결할 수 있도록 만들었습니다.

범위값만 변경하고 조건만 지정하면 원하는 결과가 바로 찾아집니다.


Sub AdvancedFilter_test()
    Dim sht1, sht2 As Worksheet        '// 워크시트 변수
    Dim rngData As Range
    Dim rngIF As Range
    Dim rngTarget As Range

    Application.ScreenUpdating = False      '// 화면 업데이트 (일시) 중지
    Set sht1 = Sheets("workdata")    '// 원본 자료가 있는 데이터 시트
    Set sht2 = Sheets("Rec")    '// 결과를 보여줄 시트
    Range("A5").CurrentRegion.Clear    '// 필터를 포함한 기존 데이터를 전부 삭제
    Set rngData = sht1.Range("A1:J" & Rows.Count) '// 고급필터의 원본 영역
    Set rngIF = Range(sht2.[A2], sht2.[B3])   '// 고급필터의 검색조건
    Set rngTarget = sht2.Range("A5")     '// 결과값 표시할 영역
    
    With sht2  '// 해당 시트명 입력
        rngData.AdvancedFilter xlFilterCopy, rngIF, rngTarget
        '// rngData를 rngIF 조건으로 필터하여 rngTarget셀 이하에 나타내어라
    End With
    Columns.AutoFit  '// 열너비 자동 맞춤
    MsgBox "작업완료"
End Sub



고급필터.vbs


위의 VBA코드를 적용하면 원하는 결과를 뽑아낼 수가 있습니다.

파일 다운로드 받아서 엑셀화면에서 Alt + F11 누르면 팝업되는 창의 메뉴에서 [삽입]- [모듈] 선택하여

이코드를 붙여넣기 하고 붉은색으로 표시된 부분을 수정하면 됩니다.


Range("A5").CurrentRegion.Clear 이 부분이 AutoFilter를 적용할 때와 다른 점은

Range("A5").CurrentRegion.Offset(1).Clear  제목행 아래 데이터만 전부 삭제하라고 하는데

고급필터에서는 제목행까지 모두 지워줘야 제대로 동작합니다.


데이터가 있는 시트와 결과를 표출할 시트까지 직접 지정하도록 한 것은 다른 시트에 있을때도 이상없이 동작되도록 하기 위함입니다.


검색할 조건영역은



제목과 필터를 걸 조건을 다중으로 선택할 수 있습니다.

검색조건은 반드시 위 그림처럼 두행으로 표시해서 조건이 많으면 열을 늘려줘야 합니다.


블로그 이미지

Link2Me

,
728x90

AverageIF 함수를 사용하여 과목별 평균값 구하는 VBA


지식인에 올라온 문의사항을 AverageIF함수를 활용하여 평균을 구하는 VBA Code 입니다.




Option Explicit
Sub 과목별평균()
    Dim rngC As Range           '// Data 시트 각 셀을 넣을 변수
    Dim rngData As Range        '// Data 시트 전체 영역 변수
    Dim avgData As Range      '// Data 시트 평균을 낼 영역 변수
    Dim rngT As Range           '// 결과 시트 변수
    Dim rngVariable As Range    '// 결과 산출 변수
    Dim i, j As Integer
    Dim oldTime As Single       '// 걸린 시간 구하는 변수 지정
   
    oldTime = Timer     '// 시간 변수 설정

    Application.ScreenUpdating = False        '// 화면 업데이트 (일시) 정지
    Set rngData = Range(Sheets("과목별").[A2], Sheets("과목별").Cells(Rows.Count, "A").End(3))
    Set avgData = Range(Sheets("과목별").[B2], Sheets("과목별").Cells(Rows.Count, "B").End(3))
    Set rngT = Sheets("평균").[A2]
    rngT.CurrentRegion.Offset(1).Clear  '//기존 데이터 값 초기화
   
    For Each rngC In rngData
        Set rngVariable = Range(rngT, rngT.End(4))
        '// COUNTIF(범위,조건) : 범위에서 조건에 맞는게 몇개인지 카운트하라
        '// Averageif(조건범위, 조건, 평균범위)

        If Application.CountIf(rngVariable, rngC) = 0 Then
            rngT.Offset(i) = rngC
            rngT.Offset(i, 1) = Application.AverageIf(rngData, rngC, avgData)
            i = i + 1
        End If
    Next rngC
   
    With Sheets("평균")   '// 결과를 표시할 Sheet 선택
        '--------------- 가운데 정렬, 선그리기 ----------------------------
        .Range("A1").CurrentRegion.HorizontalAlignment = xlCenter
        .Range(.[B2], .Cells(Rows.Count, "B").End(3)).NumberFormat = "#,###" '// 셀서식 : 3단위 콤마
        .UsedRange.Borders.LineStyle = 1     '// 현재시트 사용영역 선그리기
        .Range("A2").CurrentRegion.Sort key1:=Range("B2"), order1:=xlDescending
    End With
      
    MsgBox "총 " & Format(Timer - oldTime, "#0.00") & " : 초 소요"
End Sub




AverageIF_VBA.vbs



과목별평균.xlsm


블로그 이미지

Link2Me

,
728x90


특정 전화번호(010으로 시작하는 번호)만 추출하기


Sub cellphone_search()
    Dim rngC As Range
    Dim rngAll As Range
    Dim i As Integer
   
    Application.ScreenUpdating = False    '// 화면 업데이트 (일시) 중지
    Set rngAll = Range([A1], Cells(Rows.Count, "C").End(3))
    '// 범위 지정하는 거니까 셀을 보고 수정하세요.
    '// A1 셀부터 C열의 마지막 셀까지 지정한 것이므로 어디 수정해야 하는지 알겠죠?

    Sheets("Sheet2").Range("A1").CurrentRegion.Offset(1).Clear
    '// 복사할 대상의 시트명을 지정한 것이므로 다른 시트라면 이걸 수정하세요.
    For Each rngC In rngAll
        If Left(rngC.Value, 3) = "010" Then
            rngC.Copy Sheets("Sheet2").Cells(Rows.Count, "A").End(3)(2)
            '//  Sheets("Sheet2") 의 A열의 마지막셀 다음에 계속해서 추가하라는 의미
            i = i + 1
        End If
    Next rngC
    Set rngAll = Nothing  '// 변수 초기화
    MsgBox "총 " & i & "건 복사"
End Sub



만약 다른 시트에서도 가능하게 하고 싶다면
Set rngAll = Range([A1], Cells(Rows.Count, "C").End(3))
이것을
Set rngAll = Range(Sheets("Sheet1").[A1], Sheets("Sheet1").Cells(Rows.Count, "C").End(3))
이렇게 시트명까지 지정하는 걸 추가하면 됩니다.



블로그 이미지

Link2Me

,