블로그 이미지
이비그치면

태그목록

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

-- 먼저 다음과 같이 데이타를 배열하여 8개의 카테고리(누적세로막대)를 만든다. 

데이타는 1, 0 이 서로 번갈아 나오도록 배치한다. 

<작성방법>

1. 데이타 1,0,1,0,1,0,1,0 입력

2. 차트 삽입(2차원세로막대형에서 누적세로막대형 선택)

3. 데이타영역지정하고 Ctrl-C하여 데이타 복사(data copy)

4. 옆에 있는 차트 영역안으로 커서 이동하고 오른쪽 마우스버튼 클릭하고 붙여넣기 한다

-- 세로축을 1에서부터 시작하도록 조정한다. 그러면 값이 1인 막대는 밑으로 가려져 보이지 않게 된다.(체스보드가 흰색과 검은색이 교차되어 나오므로 다음 data series(전부 1인)가 누적될 때에 1씩 차이나도록 하기위한 trick)

1. 차트영역의 좌측 세로축에 커서 위치하고  마우스버튼 클릭하여 세로축 선택후 오른쪽마우스

    버튼 클릭하여 나타난 메뉴에서 제일 하단의 축서식 클릭

2. 축서식 창에서 축옵션의 최소값 1, 최대값 9로 변경한후 닫기한다



-- data series를 9개 누적시킨다. 8개 시리즈는 전부 값이 1, 마지막 1개 시리즈는 0,1  반복

1. 데이타 계열(8개 시리즈는 전부 값이 1, 마지막 1개 시리즈는 0,1  반복)을 작성한다

2. 차트 영역으로 이동,  오른쪽 마우스버튼 클릭하여 데이타 선택메뉴 클릭

3. 데이타원본선택 창이 열리면 추가버튼을 누른다

4. 계열편집창이 열리면 계열이름을 Series1로 선택하여 입력하고, 그 아래의 계열값

(1,1,.....,1)을  선택하여 입력하고 확인버튼을 누른다.


5. 위와 같은 방법으로 Series9까지 반복 추가한다


-- 누적 세로막대 차트 색상, 크기등을 조정하고 카테고리간격, 축등을 제거하여 체스보드를 완성한다     

1. 차트영역에서 데이타계열(data series) Series1 선택 오른쪽버튼 눌러 데이타계열서식 선택

계열옵션 간격너비 슬라이드를 좌측으로 당겨 간격없음으로 만듬

채우기의 단색채우기 선택하고 아래쪽에 나타난 색을 파란색으로 선택후 닫는다

Series2를 선택하고 위에서처럼 색을 조정하여 흰색으로 만든다

2. Series3에서 Series9까지 같은 방법으로 색상을 조정하여 보드무늬를 완성한다

3. 축제목, 범례를 삭제한다(선택후 Del키)

4. 그림영역선택(선택이 어려운경우 차트도구의 레이아웃탭선택 제일 좌측의 현재선택영역에서 

    원하는 영역 선택)후 선택영역서식 클릭후 테두리등 조정하고 상하좌우 사이즈조정한다 





나열된 막대의 크기에 의해서 카테고리(데이타의 구분 범주)별 데이타를 비교하여  각 범주의 차이를 한눈에 파악할 수 있게 시각화한 차트입니다

특히 각 카테고리(category)에 하위 카테고리가 있는 경우에 유용합니다

1) 묶은 세로막대형 차트(Clustered Column Chart)


작성방법은

- 먼저 그림과 같이 데이타를 선택하여 복사합니다

- 묶은  세로막대 차트를 삽입합니다

- 빈 차트위에서 오른쪽 마우스 버튼 클릭하여 메뉴에서 붙여넣기합니다


2) 누적 세로막대형 차트(Stacked Column Chart)

    1)의 다른 표현형태의 차트로 1)에서 하나의 클러스터(cluseter 또는 group)으로 표현되어

    있던 개별 막대들을 막대 하나로 통합한 형태의 차트입니다.

    전체에서 각각의  구성비(기여도)를 쉽게 파악하는데 유용한 차트입니다.


작성방법은

- 먼저 그림과 같이 데이타를 선택하여 복사합니다

- 누적 세로막대 차트를 삽입합니다

- 빈 차트위에서 오른쪽 마우스 버튼 클릭하여 메뉴에서 붙여넣기합니다


3) 묶음 누적 세로막대형 차트(Cluster Stack Column Chart)

    1)과 2)의 결합형태입니다

위의 데이타를 이용하여 산업별 판매수량및 금액을 비교하는 차트를 

작성하는 예입니다



위의 데이타 레이아웃을 약간 변경하여 연도별 판매수량및 금액을 비교하는 차트입니다


작성방법은 비교적 간단합니다

- 먼저 그림과 같이 데이타를 선택하여 복사합니다

- 누적 세로막대 차트를 삽입합니다

- 빈 차트위에서 오른쪽 마우스 버튼 클릭하여 메뉴에서 붙여넣기합니다


4) 묶음 누적 세로막대 차트의 다른 작성방법

 위의 표의 라벨등과 간격등을 customizing하기 위해서는 3)의 작성방법 즉 차트의 자동생성방법이 아니라 수동으로 묶음누적 세로막대 차트를 작성해야하는데 이를 위해서 몇가지 작업을 해야합니다

-- 데이타 레이아웃(data layout) 조정 && 차트그리기

3)의 표를 아래표와 같이 변경하고 차트 생성

여기서 사용된 trick은 누적세로막대의 특성을 이용하여 각각의 데이타열사이에 빈열을 만들고

카테고리를(여기서는 연도) 둘로 나누어 하위 카테고리를 만들고 데이타를 비켜서 배치하는 것

입니다.  그렇게 하면 축이 하나 생기고 데이타값 0은 누적치이기 때문에 막대는 하단에서부터 

시작됩니다




-- 라벨 붙이기













엑셀로 체스기보보기(Excel Chess Game Viewer)

2012. 4. 18. 17:18 | Posted by 이비그치면

3월엔 좀 바쁜일이 있어서 포스팅을 하지 못했습니다

이제 소개하려는건 제가 만든 건 아닙니다

약간 더 높은 단계로 엑셀을 공부(활용)하시려는 분들을 위해 사이트를 하나 소개해드립니다

아래의 사이트에 클릭하여 들어가보면 이게 엑셀로 만들었나 혹은 이게 엑셀로 가능한거야

라는 놀라움(의문)이 들 정도의 다양한 엑셀 활용사례들이 있습니다

http://www.excelhero.com/

그중 하나 엑셀로 체스기보보기(Excel 2007 Chess Game Viewer)라는 게시물입니다


http://www.excelhero.com/blog/2010/02/excel-2007-chess-game-viewer.html

VBA로 작성된 것도 아니고 차트와 세네가지의 엑셀 함수만을 이용해 구현한 것인데 

꽤나 이해하기 힘들었습니다

앞으로 올릴 몇개의 포스팅은 이거와 관련된 내용이될거 같습니다

- 체스보드 : 누적세로막대형 chart(Stacked Column Chart)

- 체스조각(말) 세팅 및 착수 구현 : 표식만있는 분산형 차트(XY Scattered Chart)

                                                 Dynamic Chart

                                                 혼합형 차트

- 몇가지 엑셀 함수

   . REPT

   . MATCH

   . INDEX

   . OFFSET

-  조건부 서식 ( Conditional Formatting)






엑셀 VBA에서 정규식(Regular Expression) 사용

2012. 3. 8. 17:35 | Posted by 이비그치면
정규식을 잘 활용하면 다량의 텍스트를 처리하는 많은 프로그래밍 분야에서

조건에 맞는 데이타 검색, 추출, 대체, 삭제등 여러가지 일을  효율적으로 처리할 수 있다

UNIX의 셀프로그래밍이나 PERL, PYTHON 또는   UltraEdit등 정규식을 지원하는

각종 프로그래밍에서 정규식으로 처리하지 않으면 손이 많이 가는 번잡스러운 일들을

깔끔하게 처리할 수가 있다

정규식을 제대로 공부하시려는 분들은 그렇게 쉽지 않은 내용이기도 하고 책의

부피도 만만치않긴 하지만 O'REILLY사의 Mastering Regular Expressions

읽어보시길 권한다

그렇지 않더라도 많이 활용할 수 있는 다음의 예들을 한번 익혀두면 여러모로

유익할것이다

수식 (Expression) : 숫자 또는 숫자를 나타내는 기호와 연산자로 구성(표현 express)
                             예 : a+b+c, 3a+2

정규식(Regular Expression) : 문자열 Pattern을 문자(literal)와 meta문자(metachracters)
                                           로 구성(표현)  
                                          정규란 말은 아마 정해진 규칙(패턴)을 나타내는 단어인듯싶다                                예 : abc, a[bc]c, .*
 
복잡한 무늬도 있고 단순한 무늬도 있듯이 문장내에서 나타나는 특정 문자열이 단순한 
정규식으로 표현될수도 있고 매우 복잡해서 거의 암호수준으로 표현될수도 있다 

[ Metacharacters ]

--  Single Character Match
 
           .   임의의 single character
        [...]  각괄호내에 열거된 문자들중 하나의 character
        [^...]  각괄호안에 열거된 문자들은 제외한 하나의 character(여기서 ^은 not)
       \char  역슬래쉬(\)뒤의 문자 escape시킴(문자의 특별한의미 제거)


--  반복(혹은 횟수지정)

          ?  1 or 0   (예 : foo? : fo, foo 매치)
          *  0 이상 
          +  1 이상
   {min, max}  최소 min(숫자)만큼 match, 최대 max(숫자)까지 match


--  Position Match

          ^  line의 시작위치 match
          $  line의 끝위치 match
         \<  단어의 시작위치
         \>  단어의 끝위치


-- 기타

          |  선택(or) match  (예 : foo|bar : foo 또는 bar match)
       (...)  패턴을 match && save the match(for backreferences)
    \1, \2, ...  위의 괄호로 save되어있는 text, 괄호로 저장한내용이 복수일때 번호순


-- 특정기능문자의 match

\t    : tab
\n   : newline
\r    : carriage-return
\s   : 임의의 whitespace(space, tab, newline, formfeed등)
\S   : whitespace 제외한 임의의 한문자
\w  :  [a-zA-Z0-9_]
\W  :  not \w
\d   : [0-9] 즉 숫자
\D   : 숫자가 아닌 임의의 한문자

[ VBA 에서의 사용 ]

-- Early Binding : VBA 창에서  도구->참조->Microsoft  VBScript Regular Expression 5.5 

-- Late Binding :  프로그램안에서 set

    Dim RegEx As Object
    Set RegEx = CreateObject("vbscript.regexp")

-- Methods

 Execute  패턴매치 실행
 Replace  패턴을 찾아서 새로운값으로 대치
 Test  패턴을 찾는지 확인 (결과값 True 또는 False) 


-- Method Properties

 Pattern  정규식 
 Global  True or False(default) True일경우 전체탐색 False 첫매치까지만
 IgnoreCase  True or False(default) True : 대소문자구분안함, False :  대소문자구분
 MultiLine  True or False(default)  True : 복수라인탐색, False : 현재라인만 탐색



 
포스팅 중에 웹단어장 만들기가 있다

단어가 많아지면 스크롤 압박도 압박이지만 쉽게 원하는 단어를 찾기도 힘들고
단어장내에 어떤 단어가 있는지도 알기가 어렵다는 단점이 있다

그래서 CHM 파일(MS 윈도우 도움말 파일)로 만들어
목차에서 쉽게 원하는 단어를 찾아볼수 있고 단어를 클릭하면 상세설명을 볼수있게 하였다

아이폰/아이패드에선 Chmate, 안드로이드에선 iReader, Chm Reader X등으로 
PC에선chm파일을  클릭하면 볼수있다

예전에 파이선으로 신문칼럼을 웹에서 스크랩하고  이를 목록화해서 볼수있게 chm으로
만드는 방법을 포스팅했는데 이를 웹 단어장에 응용해 보았다

아래가 그 결과물이다


 만드는 방법은 다음과 같다

1) 폴더를 하나 만든다 (C:\다음단어장)

2) 아래의 엑셀 VBA 프로그램과 index.htm 을 위의 폴더로 다운받는다 


3) 다운받은 엑셀 파일을 연다

 



4)단어입력후 위와 같이 선택하고 단어장ID 입력 엔터
    --> 단어장만들기 버튼을 클릭하여 실행
   
   실행이 정상적으로 종료되면  해당폴더(C:\다음단어장)에서
   파일들이 만들어진거 확인(단어 html 파일, hhp, hhc)

5)  Microsoft HTML Help Workshop 다운로드  && 설치
http://www.softpedia.com/get/Authoring-tools/Help-e-book-creators/HTML-Help-Workshop.shtml 

6) 아래의 그림에서
    File -> Open 
    파일탐색창이 열리면 다음단어장 폴더로 이동  --> 우측창에 Exodus 파일 클릭하면 



7) 세번째 아이콘(Compile HTML file)  클릭



8) 다음단어장폴더에 가면 아래의 파일을 확인할 수 있다



9) 클릭하여 실행







 

엑셀 날짜더하기 및 시간더하기

2012. 2. 11. 16:36 | Posted by 이비그치면
게시판에 올려진 문제를 풀어보았습니다

주어진 특정 일자 시간에 원하는 시간간격을 일주일동안 더하는 문제입니다 

기준시간을 "(화) 오전 9:00" 라고 설정하면
다음과같이 35분씩 더하여 출력하는 문제입니다

"(화) 오전 10:10" 
"(화) 오전 10:45" 
"(화) 오전 11:20" 
"(화) 오전 11:55" 
....

엑셀의 몇가지 데이트함수를 이용하였습니다

소스입니다


실행방법은 첫번째셀(1,1)에 원하는 날짜를 넣고 엔터키 입력후 
실행버튼을 누르시면 됩니다

Option Base 1
Sub test()
aDayName = Array("일", "월", "화", "수", "목", "금", "토")
s_date = Worksheets("Sheet1").Cells(1, 1).Value

t = DateValue(s_date) + TimeValue("09:00")
t_7 = DateAdd("d", 7, t)

Worksheets(1).Columns(3).ClearContents
iRow = 1
Do While t_7 > t
    mytime = Format(t, "AMPM hh:mm ")
    mydate = DateValue(Format(t, "yyyy mm dd"))
    Worksheets("Sheet1").Cells(iRow, 3).Value = "(" & aDayName(Weekday(mydate)) & ") " & mytime
    t = t + TimeValue("00:35")
    iRow = iRow + 1
Loop

End Sub 

 

- MS WORD의 고정된 표에 값 옮기기

   아래와 같은 워드 문서(MS WORD Document)가 있다



그리고 아래의 엑셀 데이타가 있다



지금은 단순화를 위해 동일한 표양식에 동일한 데이타를 넣어 두었다

이 엑셀 데이타를 워드의 표로 옮기는 작업을 하는 워드 매크로(WORD VBA)이다

샘플데이타 엑셀 파일과 워드 파일이다




다음은 실행결과이다



- 테이블 새롭게 만들어(신규 생성해) 추가

- 타이틀만 있는 테이블에 열(Row) 추가
 
아래와 같은 WORD 문서에서 원하는 중식메뉴를 CheckBox에 체크하고 중식식권버튼을 클릭하면 하단의 텍스트박스에 선택한 주문리스트와 합산된 주문금액이 출력되도록 하는것입니다

 

아래는 짬뽕,삼선짬뽕,탕수육,유산슬을 선택하고 중식식권버튼을 눌렀을때의 결과입니다


몇줄 안되는 코딩이라서 별도로 설명하지 않고 아래에 소스를 리스트해두었습니다

Private Sub cmd중식식권_Click()
Set tbl = ActiveDocument.Tables(1)
iOrderSum = 0
sOrderList = ""
For iRow = 1 To tbl.Rows.Count
    Set myRange = tbl.Cell(iRow, 1).Range
    Set oTest = myRange.InlineShapes
    If oTest.Item(1).OLEFormat.Object.Value Then
        sOrderAmt = Replace(tbl.Cell(iRow, 3).Range.Text, Chr(13), "")
        sOrderAmt = Replace(sOrderAmt, ",", "")
        iOrderSum = iOrderSum + Val(sOrderAmt)
        
        sEachOrder = Replace(tbl.Cell(iRow, 2).Range.Text, Chr(13), "")
        sEachOrder = Replace(sEachOrder, Chr(7), "")
        sOrderList = sOrderList & sEachOrder & "/"
    End If
Next
ActiveDocument.txt선택메뉴.Text = sOrderList
ActiveDocument.txt금액.Text = iOrderSum
End Sub

혹시 직접 해보실 분을 위해서 소스를 첨부해두니 참고바랍니다

 



 
복수의 엑셀 파일을 읽어서(Open && Process) 하나의 파일로 요약하는 
엑셀 매크로(Excel VBA) 프로그램이다

예를 들어 매주 일요일 작성되는 아래와 같은 Excel File이 있다고 하자
 재정_20120101.xls,  재정_20120108.xls, 재정_20120115.xls, ........


위의 엑셀 파일들을 열어서 Cell 값을 읽어 아래와 같이 월계(Monthly Total)와
총계(Yearly Total) sheet를 만들어내는 Excel VBA Program 이다




위의 재정_xxxxxxxx는 다운받아 C:\에 저장하고 
재정테스트.xls를 다운받아 열어 메뉴 쉬트로 이동한다

아래 그림과 같은 메뉴 쉬트(Sheet)에서


작업시작 버튼을 눌러 실행한다

      

엑셀 VBA 암호, 패스워드(Password) 해제(제거)

2012. 1. 20. 16:42 | Posted by 이비그치면

이런 저런 해제  프로그램들을 사용하여 해봤는데 잘 안되고

어떤건 시간이 오래걸려 중도에 포기해 되는지 안되는지 잘 모르겠고

그런데 이건 사용법도 간단하고 시간도  안걸린다 (거의 즉시 해제

이것도 엑셀 매크로 프로그램이다

Excel Tool VBA Password Recovery  

구글에서 위의 이름으로 찾아 다운받아 사용하면 된다

사용방법은

먼저 암호가 걸린  엑셀 VBA프로그램을 오픈하고

VBA 창으로 가서 보면

 



클릭해보면  다음과 같이 암호를 묻는다




취소 누르고 쉬트로 돌아가서 파일 열기로 다운받은 해제 파일을 연다

VBA Password Recovery  버튼을 누르고 Remove VBA Pawword 를 누르면 끝이다

다시 VBA 창으로 가서 클릭해보면 해제된것을 확인할 수 있다 

 

이전 1 2 3 4 5 다음