사용중인 매크로들 170809

반복적인 작업은 매크로를 세팅해놓으면 도움이 된다. 전체자동화보다는 각각 사용할수 있게 모듈로 나누어놓는게 나은듯

절대참조, 상대참조를 이해하고 간단하게 기록한 다음 불필요한 구문을 삭제,수정하면 된다.

(code를 포스팅 할경우 ``` 는   의 형식을 갖게 되고, <pre> </pre>는 제일 하단 서식의 형식을 갖게된다. 

입찰대비표 data

1. 양식변환

<br />Sub 입찰대비표()
'
' 입찰대비표 매크로
'

'
    Columns("H:I").Select
    Range("I1").Activate
    Selection.EntireColumn.Hidden = True
    Rows("4:5").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 49407
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("A6").Select
    ActiveWindow.DisplayZeros = False
End Sub

2. 비율등 입력

<br />Sub 합계1위3칸아래에서실행()
'
' 합계1위3칸아래에서실행 매크로
'

'
    ActiveCell.FormulaR1C1 = "=R[-3]C/R[-3]C[-10]"
    ActiveCell.Offset(2, 0).Range("A1").Select
    ActiveCell.FormulaR1C1 = "=R[-5]C[-10]-R[-5]C"
    ActiveCell.Offset(-2, 8).Range("A1").Select
    ActiveCell.FormulaR1C1 = "=R[-3]C/R[-3]C[-18]"
    ActiveCell.Offset(2, 0).Range("A1").Select
    ActiveCell.FormulaR1C1 = "=R[-5]C[-18]-R[-5]C"
    ActiveCell.Offset(-2, 8).Range("A1").Select
    ActiveCell.FormulaR1C1 = "=R[-3]C/R[-3]C[-26]"
    ActiveCell.Offset(2, 0).Range("A1").Select
    ActiveCell.FormulaR1C1 = "=R[-5]C[-26]-R[-5]C"
    ActiveCell.Offset(-2, 8).Range("A1").Select
    ActiveCell.FormulaR1C1 = "=R[-3]C/R[-3]C[-34]"
    ActiveCell.Offset(2, 0).Range("A1").Select
    ActiveCell.FormulaR1C1 = "=R[-5]C[-34]-R[-5]C"
    ActiveCell.Offset(-2, 8).Range("A1").Select
    ActiveCell.FormulaR1C1 = "=R[-3]C/R[-3]C[-42]"
    ActiveCell.Offset(2, 0).Range("A1").Select
    ActiveCell.FormulaR1C1 = "=R[-5]C[-42]-R[-5]C"
    ActiveCell.Offset(-2, 0).Rows("1:1").EntireRow.Select
    Selection.Style = "Percent"
    Selection.NumberFormatLocal = "0.0%"
    ActiveCell.Select
    Range("F6").Select
    ActiveWindow.FreezePanes = True
End Sub

분석 및 서식 추가 필요

자주쓰는 것들

날짜의 경우는 data 함수를 사용해서 yy, mm, dd 를 지정해주는 방법이 더 나았다.

<br />Sub zero()
'
' zero 매크로
'

'
    ActiveWindow.DisplayZeros = False
End Sub

Sub 사업자번호양식10자리()
'
' 사업자번호양식10자리 매크로
'

'
    ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],3)&-MID(RC[-1],4,2)&-RIGHT(RC[-1],5)"

End Sub


Sub 날짜8자리변환()
'
' 날짜8자리변환 매크로
'

'
    ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],4)&-MID(RC[-1],5,2)&-RIGHT(RC[-1],2)"

End Sub

출력

출력시 하단에 파일명, 탭명, 페이지 입력

<br />'
' PRINT_A3 매크로
'

'
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    Application.PrintCommunication = True
    ActiveSheet.PageSetup.PrintArea = ""
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .LeftFooter = "&F"
        .CenterFooter = "&A"
        .RightFooter = "&P / &N"
        .Orientation = xlLandscape
        .PaperSize = xlPaperA3
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = False
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = True
    End With
    Application.PrintCommunication = True
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .PrintTitleRows = "$4:$5"
        .PrintTitleColumns = ""
    End With
    Application.PrintCommunication = True
    ActiveSheet.PageSetup.PrintArea = ""
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = "&F"
        .CenterFooter = "&A"
        .RightFooter = "&P / &N"
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .PrintQuality = 600
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlLandscape
        .Draft = False
        .PaperSize = xlPaperA3
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = False
    End With
    Application.PrintCommunication = True
    Range("A2").Select
End Sub

출력 두번째

Sub setting_printer()
'
' setting_printer 매크로
'

'
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .PrintTitleRows = "$4:$5"
        .PrintTitleColumns = ""
    End With
    Application.PrintCommunication = True
    ActiveSheet.PageSetup.PrintArea = ""
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = "&F"
        .CenterFooter = "&A"
        .RightFooter = "&P / &N"
        .LeftMargin = Application.InchesToPoints(0.708661417322835)
        .RightMargin = Application.InchesToPoints(0.708661417322835)
        .TopMargin = Application.InchesToPoints(0.748031496062992)
        .BottomMargin = Application.InchesToPoints(0.748031496062992)
        .HeaderMargin = Application.InchesToPoints(0.31496062992126)
        .FooterMargin = Application.InchesToPoints(0.31496062992126)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .PrintQuality = 600
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlLandscape
        .Draft = False
        .PaperSize = xlPaperA3
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = False
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = True
        .EvenPage.LeftHeader.Text = ""
        .EvenPage.CenterHeader.Text = ""
        .EvenPage.RightHeader.Text = ""
        .EvenPage.LeftFooter.Text = ""
        .EvenPage.CenterFooter.Text = ""
        .EvenPage.RightFooter.Text = ""
        .FirstPage.LeftHeader.Text = ""
        .FirstPage.CenterHeader.Text = ""
        .FirstPage.RightHeader.Text = ""
        .FirstPage.LeftFooter.Text = ""
        .FirstPage.CenterFooter.Text = ""
        .FirstPage.RightFooter.Text = ""
    End With
    Application.PrintCommunication = True
End Sub

같은 값 위아래 셀 합치기

매크로 (출처: seekseek 블로그)


Sub mergecell()
'
' AutoMerge Macro
'
' 바로 가기 키: Ctrl+k
'
On Error Resume Next
'ActiveCell.Select
rowcnt = ActiveCell.Row
colcnt = ActiveCell.Column
a = Cells(rowcnt, colcnt).Value
rowcnt2 = rowcnt + 1

'빈칸이면 끝
While Cells(rowcnt2, colcnt).Value  ""
    While a = Cells(rowcnt2, colcnt).Value '같은 값이면 계속증가
       Cells(rowcnt2, colcnt).Value = "" '같으니까 값을 지워주자 ㅎㅎㅎ
       '그래야 값이 둘인데 하나는 없어진다는 메시지 창이 뜨지 않는다.
       rowcnt2 = rowcnt2 + 1
    Wend
       '이제 같은 값구역을 병합
       Range(Cells(rowcnt, colcnt), Cells(rowcnt2 - 1, colcnt)).Select

       With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        Selection.Merge (False)
        
        '초기화

        rowcnt = rowcnt2
        a = Cells(rowcnt, colcnt).Value
        rowcnt2 = rowcnt + 1
Wend
'
End Sub

MAC 100

맥을 본격적으로 쓰게된지 어언 100일이 흘러가고 있다. 몇몇 이야기들.

 iBook Author

강연을 한다고 해서 참석했는데 기본적인 내용외에는 특색이 없었다. Widget이 Author에서의 Key가 되며 그 Widget을 제대로 활용하려면 Html5 와 3D를 알면 도움이 되겠다. 기본 사진과 영상, 사진에 대한 주석, 문제출제등의 기본기능만으로도 충분하다.  더 알고 싶으면 하이프라는 프로그램과 Sketch up을 할 줄 알면 도움이 된다.

ibookAuthorWidgets

Mac Excel

맥용 엑셀은 엑셀이 아니다. 엑셀파일을 열고 다시 엑셀로 저장할 수 있는 정도지 윈도우 엑셀을 따라가지 못한다.(제대로 안써봐서 그럴 수도 있겠지만 기본 구성자체가 다르다) 더구나 글자도 이렇게 종종(자주) 깨진다.

MacExcel

Writing @Mac

DevonThink, Scrivener를 이용하면 된다. 마우스 없이 단축키와 트랙패드만으로 할 수 있는 방법으 고민했었는데 그 방법을 오늘에야 정리한 것 같다.

Devonthink Clip을  Plain, Rich를 번갈아 쓰고, Link는 Scrivener Clip을 활용하면 된다. 단축키를 하나 지정하면 매우 쉽다.

clip tip

에버노트

다시사용하게 되었다. Mac 에서 사용성이 꽤 괜찮다.

Mac Writing Apps

맥쓰사, 맥마니아

페이스북 그룹이 두개 운영되고 있는데 전문적인 내용 및 답변보다는 질문이 많은 편이다. 기본적인 내용의 강연이 잘 운영되는 이유인가보다.

출처: 맥쓰는 사람들 페이스북 그룹 https://www.facebook.com/groups/macbookusergroup/permalink/840066376009915/?stream_ref=1
출처: 맥쓰는 사람들 페이스북 그룹 https://www.facebook.com/groups/macbookusergroup/permalink/840066376009915/?stream_ref=1

빈셀을 채워주는 매크로 및 Tip

자료를 접수하면 빈셀들이 있다. 데이타 베이스로 활용하려면 빈셀을 채워줄때가 있는데 반복적인 일인 경우가 많다. 매크로로 작성해봤지만 작동하지 않았고, 고수의 도움을 받아 매크로 및 Tip에 대해 조언을 받아서 해결했다. 그 내용에 대한 기록

1안) 매크로에서 if 문 사용

역시 고수의 도움이 있어야.

 Sub 윗값복사()

    Dim c As Range

    For Each c In Selection

        If c = "" Then

            c.Value = c.Offset(-1, 0).Value

        End If

    Next c


 End Sub

2안) F5키를 사용하는 Tip

  • 입력이 필요한 구간을 선택
  • F5 – 옵션 – 빈셀선택
  • 윗값입력(=셀)
  • Ctrl + Enter : 선택된 셀에 같은 내용이 입력된다.
  • 다시 구간 선택후 값붙여넣기

설명은 5단계지만 매우 간단하다.

Continue reading 빈셀을 채워주는 매크로 및 Tip

Excel essential tips

맥에는 킬러앱이 여러가지 있지만, 윈도우의 킬러앱은 엑셀 하나다.

엑셀은 여러자료를 한개의 파일로 합칠 수 있는 장점, PDF나 사진파일도 별도 시트에 붙일 수 있는 점, 수식을 계산하는데 그치지 않고 Database를 관리할 수 있는 점, 매크로로 자동화 할 수 있는 점이 장점이다. 윈도우에서 맥기반으로 넘어가는데는 은행뱅킹업무등이 불편해지는것외에 생산성관련해서 엑셀을 사용하는데 제한적이 된다는 점이 있다. 그래도 맥으로 넘어갈 수 밖에 없으므로 그간 후배들에게 이야기했던 액기스 팁을 메모로 남긴다.

Excel F5 는 다양한 선택옵션을 제공한다. (화면에 보이는 셀만 선택도 가능)
Excel F5 는 다양한 선택옵션을 제공한다. (화면에 보이는 셀만 선택도 가능)

Execl Essential Tips Checklists

  • 표, 함수로 사용하기 (Countif, sumif 등)
  • 조건부 서식을 활용해서 특이값에 대해서 쉽게 인식할수 있게함.
  • Database로 활용하기 : 상단에 DB 열을 구성하고 피벗테이블을 사용할 수 있음.
  • 다양한 선택 : F5 (선택후 Ctrl + Enter 를 하면 선택된 셀들에만 동일한 내용이 들어간다)
  • Ctrl + Shift + * 해당영역전체 선택
  • 정렬시 카테고리 구분 그리고 부분합
  • 문자합침 & 그리고 문자 ” ” (Hyperlink 함수와 같이 사용하기)
  • 마우스 우측버튼 + (알파벳) 단축키 : 매크로이상으로 효과적 – 만드는 시간이 불요하고 바로 사용할 수 있기때문.
  • 매크로 – 단순작업 반복 – 단계별 모듈로 만드는게 오류를 피하기 쉬움.
  • 데이터 > 중복된 항목제거
  • Alt 를 길게 누르면 단축키 알파벳 나옴
  • 리본메뉴 숨기기 – 빠른실행도구 아래로 내리기 – 화면이 넓어지고 간결해짐.

설명을 들었으나 아직 이해 못했던

  • (미완) 옆 열이 조건이 지정되면 해당 열이 음영표시되게.

활용

데이타 정리(문자를 연결해서 카테고리를 구성, 중복된 항목제거를 하면 카테고리만 남는다), 필터로 필요한 내용을 뽑아서 복사 붙여넣기 한다. 부분합을 쓰고 선택하려면 F5 를 선택해서 보이는 셀만 선택을 한다. 간단한 반복은 마우스 우클릭+알파벳을 이용하고, 계속된 반복은 매크로를 하나 만든다.

데이타베이스는 피벗테이블을 통해 다양한 분류로 정리해본다. 필요하면 구글문서로 변환해서 공유한다. (클라우드가 아무리 빨라져도 미묘한 느림(인지조차 못하더라도 몸은 피곤을 느낀다)이 있기 때문에 설치형 프로그램이나 오프라인 모드를 병행해서 쓰는게 좋다)

향후

정리하고 보니 체크리스트는 엑셀을 익히고 활용하는데도 도움이 되지만 대체할 프로그램기능의 체크리스트도 되겠다. 저 기능들을 Google Spreadsheet 와 Script로 대체할 수 있다면 굳이 Excel에 머물러 있을 필요가 없기 때문이다.

참고글: 엑셀 파일관리 기본 130917 | #eWord.

엑셀 바이러스

한개의 엑셀파일을 계속 복사해서 사용하고, 서로 주고받다 보면 용량이 필요이상으로 커진다. 매크로 및 이름서식이 숨어있는 파일을 계속 복사하니 또하나의 바이러스처럼 엑셀파일내에 숨어있어서 용량만 커지는 격이다. (엑셀 바이러스라 칭하는게 낫겠다) 치료할 수 있는 파일을 엑셀 > xlstart 에 놓으면 이름서식이 많은 경우 치료를 묻는 창이 활성화된다.(관련글: 엑셀 파일관리 기본 | #eWord.)  그렇게 고칠수는 있으나 제대로 돌아오는데는 한계가 있었다.

macro healing (1)
우측 파일은 치료한 후 파일인데도 1.31MB였다. 새문서를 만들어 동일한 내용을 복사 > 붙여넣기 하니 18.6kb 였다. 그만큼 느리다는 이야기.

관계자가 많은 프로젝트 업무인 경우일수록 이런 현상이 더하다. 특이한 것은 새로 포맷해서 설치한 내 컴퓨터는 파일여는데 시간도 많이 걸리고, 열다가 엑셀이 다운되는 경우도 많았다. 하지만 기존 발신자에게 문의하니 “내 컴퓨터는 이상없는데?” 라며 컴퓨터 좋은거 쓰라고 조언을 받았다.

지금 내가 쓰고 있는 사양이 더 빠른 사양이며, 새로 포맷한지 얼마되지 않은 컴퓨터임에도 불구하고 그런 현상이 생겼다.  상대방의 인내심이 높거나 아니면 그렇게 엑셀바이러스등이 숨어있는 컴퓨터끼리는 잘 열릴수도.

macro healing (2)
18.6kb 로 만들어서 보내줘도 몇번 복사,전달을 거치면 다시 1.31MB로 늘어날 것이다.

구글문서로 변환하면 이런 사항은 없어진다.  아니면 불편한 사람이 그때마다 새문서로 붙여넣기를 하거나.

가장 적당한 방법은 Database 정보가 들어있는 파일과 그 DB를 활용하는 방식을 구분해야 한다. DB는 위키방식이나 자동취합되는 방식으로 관리하고 그 활용은 Macro나 Script를 활용해서 자동화 한다. 별도 분석 Tool을 활용하거나.

같은 이야기가 반복되는 것을 이번 글로 마무리하고자 한다.

 

엑셀 파일관리 기본

엑셀 파일을 관리하는데 필요한 기본적인 사항들.

  1. 파일 용량 – 불필요한 서식제거 ★
    Healing Excel
    불필요 이름이 많으면 20kb 문서가 3.6MB로 부풀려지기도 한다.

    처리방법: Healing Excel 추가기능을 다운로드 받아 폴더 (Program Files > Microsoft Office > Office12 (또는 Office14) > XLstart) 에 놓으면 된다. 엑셀파일을 열때 불필요한 서식이 많은 경우 치료여부를 자동으로 물어본다.

  2. 파일명칭관리
    (구분) 파일명 날짜6자리 를 기본으로 한다. “(현장명) 월간보고서 130916 r12.xls”  버젼은 1.0 인경우 1.0 대신 10  을 사용한다. 점이 나중에 다운로드 받을때 파일명칭을 다르게 변환하기도 하기 때문.
  3. 클라우드 sync 서비스 비교
    – Box.net 이 Office 문서를 깨짐 없이 가장 잘 보여준다. Box.net 을 기본 excel 관리폴더로 놓는다.
    – Google Drive 은 현황 및 협업문서 중심으로 관리한다.
    – Dropbox 까지 쓴다면 Dropbox는 현안중심으로 관리한다.(완료하고 비우는 개념)
  4. DB와 excel
    – 엑셀은 DB를 편하게 가공할 수 있는 수단이다.
    – sheet 및 Tab 을 활용해서 여러문서를 붙일수 있는 장점이 있다. (클라우드 방식에서는 조금 변화해야 하지만 사람들이 이 방식을 워낙 편해하니 할수없다)
  5. Macro를 사용할수 있는가.
    – 반복적인 간단한 업무는 한번 반복을 통해 매크로를 기록하고 활용하는 것이 편하다.
    – DB의 개념이 부족하면 엑셀은 50%정도 활용하는 것이고, 매크로를 사용하지 않는다면 엑셀은 75% 수준의 활용밖에 되지 않는다.(뭐… 안써도 된다. 몸이 조금 더 고생하면 된다)

+관련글

  1. m/d aaa | #eWord. : 날짜(요일) 서식을 가장 쉽게 만드는 방법 및 기자를 위한 엑셀 기본 팁(via 박대용)링크
  2. Conditional Format | #eWord. : 조건부 검색 – 바차트, 체크리스트등에 활용.

m/d aaa

엑셀에서 요일을 설정하려면 “사용자 서식”에서 날짜 뒤에 aaa 를 붙여주면 된다. 엑셀에서 만들어주고 구글문서로 변환하면 영문 요일로 나온다. – 엑셀 년월일에 요일 추가 표현하는 법, 날짜 형식 사용자 지정; Excel yy-mm-dd

p.s 초보자를 위한 좋은 장표가 있어서 링크 박대용 기자 블로그 :: 기자를 위한 엑셀 필수 기능.

Conditional Format

Excel 조건부 서식을 활용하여 종료일 항목의 줄을 음영처리하기 –  펀치리스트나 특정 점수 구간을 찾을 때 활용

종료일이 “N” 열이고 제목행이 “3”이라면

  1. 홈 > 조건부서식
  2. 조건: $N3>0   결과: 음영 들어간 서식 지정

참고

  1. 셀 숫자 크기별로 Bar 길이를 다르게 표현한다 – 조건부 서식그라데이션
  2. 용어검색(한국어 –> 영어)