구본형 변화경영연구소

단군의

/

2단계,

두

  • 어 부
  • 조회 수 21608
  • 댓글 수 339
  • 추천 수 0
2014년 9월 21일 13시 47분 등록

VBA 보조필살기 만들기 Project

 

단군 200일차를 시작하는 마음가짐

 1. 중요한건 지금하는 단군의 후예 활동을 믿느냐 안 믿느냐다. 나는 믿는다. 나답게 살기 위해서 결과가 어떻든 밀어붙인다.

   - 영화 머니볼, 자기답게 살고자 애쓰는 자들을 위해 축배를 

 

 2. 현실과 이상의 경계를 잘 걷는다. 그러기 위해서 성실해야 된다. 

     구직과 관련 된 모든 행위에서 성실해야 한다. 

     내가 정말 잘하고 좋아할 수 있는 일을 찾기 위해 하루를 되돌아보고, 나에 대해 정리한다. 그리고 생각을 매일 실천한다.    

 

새벽시간과 새벽활동

 기상시간: 5시 30분

 활동시간 : 오전 6시 00분~ 오전 8시 00분(엑셀), 재활 : 오후 6시 ~ 오후 7시(집을 나설 일이 있을 때는 엑셀 활동 후)

 새벽 활동 : 엑셀 공부(2시간), 어깨 재활 운동(1시간)

 기상 시나리오: 5시 30분 기상, 요가 10분, 물 한잔 먹고,  스트레칭 하면서 컴퓨터 키기 

 
전체적인 목표

  엑셀 VBA 숙달, 어깨 재활

 

엑셀공부의 의미

  1. 내가 잘하고 싶고, 재밌어 하는 것으로 하루를 시작

  2. 단군 활동으로(나의 노력으로) 자신을 믿는 과정

  3. 취업을 다른 사람들에게 의존하지 않고 내 힘으로 해처나가겠다는 의지

  4. 다른 지원자들과의 차별점

 

재활운동의 의미

  1. 건강에 대한 욕망 실현

  2. 장기전을 위한 체력 비축

 

개인의식

  1. 기상 후 3분 요가

   가. 3분도 집중해서 요가하면 짧은 시간이 아님. 몰입도를 느낀다.

   나. 단 3분으로 내가 좋아하는 것을 매일 하는 것에 대한 유익함(건강)과 성장(유연성)를 확인한다.

   다. 삶에 쫓기지 않고, 내가 삶을 이끈다는 느낌을 받는다.

 

  2. 귀가 후 버스에서 하루 되돌아보고 정리하기(나와의 대화)

   가. 그 날 어떤 일이 있었고 내가 어떤 행동을 했고 왜 그런 행동을 했는지 생각하고 핸드폰 메모장에 적기.

 

중간 목표

  1. 엑셀(직접 VBA를 짜보는 것을 원칙으로 한다.)

 

  목표1: VBA 지식 넓히기, 익숙해지기

  세부활동: 엑셀장인의 엑셀 매크로&VBA 마스터링 북 1회독. 매크로 기록해보면서 따라한다. 모르는건 카페에 들어가서 질문한다.

                    책만 무작정 보지 않고 http://www.uno21.com/에 들어가서 문제도 풀어보며 점검 한다.

  목표기간: 9월 22일 ~ 11월 30일

  
  목표2: 컴활 1급 취득

  세부활동: 아이티고 강의이용해서 컴활 1급 시험 준비

  목표기간 

   필기: 2014년 10월 18일(접수기간: 2014.09.25 ~ 2014.10.01)  
   실기: 2014년 11월 29일(접수기간: 2014.11.06 ~ 2014.11.12)

 

2. 어깨 재활 운동

  목표1: 오른 쪽 어깨 회전 근 강화

   세부활동: 밴드 운동, 바쁠 때는 코어운동과 오른쪽 어깨 밴드운동으로 대체.

   목표기간: 9월 22일 ~ 11월 31일

 

   
목표 달성 과정에서 직면하게 될 난관과 극복 방안

 1. 왜 아침에 일찍 일어나야 하는지 의문에 대한 대답

 
  가. 저녁에는 각종 유혹(친구들과의 만남, TV, 인터넷 딴 짓)으로 하고자 하는 일을 놓칠 수 있음.

 
  나. 엑셀, 재활은 꼭 하고 싶고 중요한 일이며, 이 일들을 매일 하기 위해서는 아침에 일찍 일어나서 하는 것이 확실 함.

 
  다. 늦게 자면 늦게 일어나게 되고 하루의 시작이 순조롭지 못하지만 일찍 일어날 경우 하루의 시작을 좋게 함.

 
  라. 현재 시간을 자유롭게 조절하기 가장 좋은 시기이므로 좋은 습관을 만들기에 적합.

 
  마. 수련기간 중간에 취업을 하더라도 버스에서 노트북으로 엑셀 공부라도 할 수 있음.

 
  바. 어쩔 수 없이 늦게 자서 일찍 일어나 피곤한 경우가 생긴 경우 하루 단위로 보면 손해이지만

 
      길게 보았을 때는 이득임.(회사를 다니면서 계리 자격증을 딴 삼성화재 직원의 경우 전날 술자리가 있었어도

 
      토, 일요일에 무조건 8시에 도서관을 갔다고 함, 피곤한 날도 있지만 자신과의 약속을 지킴으로 전체적으로

 
      충실한 수험 공부를 가능케 함)

 
  사. 밤에 집중이 잘 되는 스타일이지만 그것 또한 하나의 습관으로 자리 잡아서 그런 것, 아침에 집중하는 습관을

        만들자, 단지 힘들고 좀 오래 걸릴 뿐이다.

  
   
2. 밤에 늦게 자는 습관

 
 가. 집에 귀가 후 간단히 운동 후 바로 씻고 밥 먹는다.

 
 나. TV 근처에 가지 않고, 컴퓨터를 밤에 켜지 않는다.

 
 다. 스마트폰으로 구본형 선생님 글을 오래 읽지 않고, 책을 아예 빌려 본다.

 
 라. 과거 밤에 하던 습관들을 요가, 책읽기로 대체 한다.

 
 마. 일주일 단위 계획을 세운다 해야 할 일을 만들어 일찍 자야하는 이유를 분명히 한다.

 

 하루를 개편하기 위해 하는 일임을 잊지 말자!

 

 
3. 왜 엑셀 공부와 재활운동을 해야하는가

 
 가. 두 활동 모두 하고 싶은 일이고 성과가 뚜렷하게 나오기 때문에 지킬 확률이 높음.

 
 나. 엑셀의 경우 어딜가도 쓰임, 특히 계리에서는 중요함. 취업에 있어서 급한 일은 아니지만 급한 일만 하다보면

 
       정작 중요한 일을 항상 못함, 회사에서 알바 시 시킨 일만 하다보면 정작 내 실력을 늘리기 위한 시간을 못 낸

 
       경우가 많았음, 엑셀만 잘 해도 업무 시간 단축과 일 잘한다는 소리 듣기 쉽다는걸 깨닳음 엑셀의 기능은 무궁무진함.

 
 다. 재활 운동 또한 많은 시간을 집중해서 적어도 3달이상 투자해야 효과가 나옴, 그리고 어깨가 아프면 운동을 제대로

 
       못하고 체력이 금방 약해짐, 나중에 회사생활을 위해서라도 꼭 필요함.

 

 
목표를 달성했을 때 내 삶에서 일어날 긍정적인 변화 묘사

 1. 엑셀 관련

 
  가. 회사에서 나만의 무기를 만들기 위한 하나의 강력한 tool 이 되어 줄 것임.

 
  나. 엑셀을 잘 하는, 꾸준히 해온 내 모습에서 자신감을 얻을 수 있음. 빠른 잡무 처리 및 반복적인 업무를 재밌게 할 수 있음!

 

  다. 단군의 후예 축소판으로 1000시간(1년 조금 넘게) 실행 후 노력에 대한 성과 확인 가능! 이로 단군의 후예 10000시간 법칙에

       내가 정말 필살기로 만들고 싶은 걸 시작!

      

 
2. 재활 관련

 
  가. 건강한 몸을 통해 긍정적인 마음, 자신감을 더 갖게 될 수 있음.

 
  나. 꾸준한 건강관리를 위한 초석이 되어 줄 것임.

 
  다. 좋아진 내 몸 보면 좋겠지.

 
3. 아침 기상 습관으로 하루 개편 성공 시 내가 원하는 삶을 사는 초석이 됨.


 

목표 달성 시 나에게 줄 보상

 미루지 않고 여행을 떠난다. 한 3박 4일 정도 산, 바다가 있는 곳

IP *.77.214.44

댓글 339 건
프로필 이미지
2015.01.04 07:56:58 *.77.214.44

광고 콘티를 만들기 위해 우수 광고 영상을 구글 검색을 통해 봤다.

제일기획 광고 기획자의 광고에 대한 생각을 표현한 영상을 찾아 봤다.

그리고 이전 광고 영상도 보았다.

광고에서 부각할 점이 무엇인지 정리해 보았다.

 

 

항상 어떤 과제를 맡을 때 드는 마음은 최선의 결과를 가져와야 한다는 마음이 먼저 든다.

그러다 보니 관련 된 자료를 다 찾아보려고 하고, 광고가 일단 무엇인지 알려고 했다.

이런 생각의 긍정적인 측면은 제대로 하면 역시 지식의 깊이를 더할 수 있지만

게으름과 합쳐질 경우 시간 딜레이와 시작에 대한 부담감이 커진다.

 

항상 어떤 일을 시작할 때 단순히 빨리 처리해 버려야하는 일인지

그래도 알아볼 가치가 있는 일인지를 정해야겠다.

내 업무와 관련 되거나 기간이 충분하다고 생각되는 경우는(이것도 주관적이고 그때 그때 다르겠지만)

원래 습성대로 성실히 action한다.

 

그 외에는 빨리 데드라인에 맞추는데 주력하고 성과에 대한 기대를 낮추자.

그 시간에 다른 중요한 일들을 생각하면 될 것이다.

프로필 이미지
2015.01.05 17:00:30 *.70.55.179
연수 첫째날
프로필 이미지
2015.01.07 02:16:44 *.218.248.59
연수 둘째날
회사 신입 에티켓
인사하기 명함주고받기 cs마인드
극단적 c
난타
프로필 이미지
2015.01.10 00:05:00 *.70.59.149
합숙연수 마지막날.
자존심 vs 자존감
욕망을 찾는것에 대해
애매한 것보다 틀린게 낫다
프로필 이미지
2015.01.13 06:38:06 *.211.64.132

날짜: 1월 13일(화)

취침 / 기상시간: 오후 12시/  5시 50분 

수면/ 활동시간: 5시간 50분/  오전 6시 00분 ~ 오전 6시 45분

늦게 잔 이유:

숙면에 대해


Sub makeNewTable()

Range("table").Copy Sheet1.Shapes(Application.Caller).TopLeftCell.Offset(1, -5)

End Sub


Application.Caller 프로시져를 부른 개체의 이름

TopLeftCell 해당 개체의 바로 왼쪽 위의 셀


참고)

배열식 다루는 것


{=SUMPRODUCT(B6:D12)*5}

{=SUM(B6:D12*5)}

그러나 각각의 값이 150미만이면 5를 곱하고 이상이면 3을 곱하여 합친다

{=SUM(IF(B6:D12<150,5,3)*B6:D12)}

프로필 이미지
2015.01.14 06:02:38 *.211.64.132
날짜: 1월 14일(수)

취침 / 기상시간: 오후 12시/  5시 50분 

수면/ 활동시간: 5시간 50분/  오전 6시 00분 ~ 오전 7시 15분

늦게 잔 이유:

숙면에 대해


변수 정의로 다시.

Sub makeNewTable3()
Dim rCopy As Range
Dim rPaste As Range
Dim shpX As Shape
Dim shtX As Worksheet
Dim sButtonName As String
Set shtX = Worksheets("엑셀초보")
Set rCopy = shtX.Range("table")
sButtonName = Application.Caller
Set shpX = shtX.Shapes(sButtonName)
Set rPaste = shpX.TopLeftCell.Offset(1, -5)

rCopy.Copy rPaste

Set rPaste = rPaste.CurrentRegion
rPaste.Select

rPaste.Cells(1).Offset(-1).Value = Application.WorksheetFunction.Sum(rPaste)
rPaste.Cells(1).Offset(-1).Font.Bold = True
rPaste.Cells(1).Offset(-1).BorderAround xlSolid

End Sub

프로필 이미지
2015.01.16 06:33:02 *.162.241.53
날짜: 1월 15일(목)

취침 / 기상시간: 오전 1시/  6시 00분 

수면/ 활동시간: 5시간 / 무

늦게 잔 이유: 연수 교육 마치고 동기들끼리 회식

숙면에 대해:


동기회식, 라마다호텔, 불안

프로필 이미지
2015.01.16 06:33:49 *.162.241.53
날짜: 1월 16일(금)

취침 / 기상시간: 오후 11시/  6시 00분 

수면/ 활동시간: 7시간 / 오전 6시 ~

늦게 잔 이유:

숙면에 대해:


Sub Sheet2_모서리가둥근직사각형1_Click()
Dim rCopy As Range, rPaste As Range
Dim shpX As Shape
Dim shtX As Worksheet
Dim sBottonName As String

Set shtX = Worksheets("Sheet2")
Set rCopy = shtX.Range("table")
sButtonName = Application.Caller
Set shpX = shtX.Shapes(sButtonName)  ' shapes안에 sButtonName에 큰따옴표를 감싸서 계속 에러가 났었음! 변수를 쓸때 큰따옴표를 어떻게 사용하는지 다시 생각할 것. 그리고 set사용이 개체에서 사용하는건지 다시 파악할 것!(range에서만 사용하는걸로 잘못 알고 있었음)
Set rPaste = shpX.TopLeftCell.Offset(, -5)

rCopy.Copy rPaste


End Sub



프로필 이미지
2015.01.16 23:38:59 *.77.214.44

나는 낭만주의자인가 ? - 생각탐험 12

 

젊어서 한때 나의 핏 속에는 낭만주의가 80% 이상 섞여 몸 안을 돌아다니고 있었음에 틀림이 없다.   낭만주의자는 이야기를 현실이라고 여긴다.   나는 스토리에 감동하는 사람임에 틀림없다. 지금도 말이다.   그러므로 나의 핏 속에는 여전이 낭만주의 취향이 오월의 모란처럼 진하게 남아 있다.

   낭만주의의 가장 커다란 특징은 한마디로 공리적 기준을 미적 기준으로 대체한 것이다. 지렁이는 유용하지만 아름답지 않고, 호랑이는 유용하지 않지만 아름답다. 낭만과는 거리가 먼 다윈은 지렁이를 보고 감탄했지만, 낭만주의 시인인 윌리엄 블레이크 호랑이를 보고 감탄했다. 아름다움이 곧 가치인 것이다.

   그러나 그 아름다움은 전통적 아름다움과 다르다. 낭만주의자들은 오직 장엄한 것, 공포를 자아내는 것, 멀고 먼 곳 속에서만 감탄한다. 그래서 그들은 고딕 건축을 선호하고, 폭포와 같은 급류, 아찔한 절벽, 바다를 뒤집는 폭우에 경도된다. 콜리지는 쿠리라이 칸의 제나두를 그리워하고, 멀고 먼 전인미답의 퇴락한 고성이나, 한때 번성했으나 폐허가 된 오래된 세계를 동경했다. 워즈워즈를 거쳐, 바이런, 셸리, 키츠에 이르러 영국 낭만주의는 빅토리아 시대를 풍미했다. 그들은 이해타산보다 개인의 열정을 옹호하기 때문에 상업주의와 돈 냄새를 경멸하고 멸시했다. 멋진 일이다. 그러나 낭만주의 운동은 무법적인 새로운 자아를 자극하고 선동함으로써 사회적 협력과 조화를 어렵게 했다. 인간은 고립된 고독한 호랑이가 아니다. 그러므로 자아실현이 윤리학의 최고 원리일 수는 없다.

  오늘 나는 생각한다. 지금의 나를 생각해 보니, 나는 낭만주의자라기보다는 이상주의자인 듯하다. 나는 현실을 이야기라고 믿기 보다는 현실을 이야기로 만들려고 한다. 여전히 꿈을 가지고 있다는 것이 내가 나를 좋아하는 이유다. 어쩔 수없이 나는 이상주의자다.    80% 정도는 그렇다. 그러나 바라건데, 부디 미래 위에 미래를 건설하지 않고, 현실 위에 미래를 축조할 수 있기를... 그리하여 현실적 이상주의자라고 스스로 부를 수 있기를 원한다.

프로필 이미지
2015.01.19 06:18:11 *.6.162.29
날짜: 1월 19일(월)

취침 / 기상시간: 오후 11시 30분/  6시 00분 

수면/ 활동시간: 6시간 30분 / 오전 6시 20분 ~ 오전 6시 50분

늦게 잔 이유:

숙면에 대해:


Sub makeTable3Times()
Dim rCopy As Range
Dim rPaste As Range
Dim shpX As Shape
Dim shtX As Worksheet
Dim sButtonName As String
Dim iX As Integer
Dim iNextPaste As Integer

Set shtX = Worksheets("엑셀초보")
Set rCopy = shtX.Range("table")
sButtonName = Application.Caller
Set shpX = shtX.Shapes(sButtonName)

For iX = 0 To 2
    iNextPaste = rCopy.Rows.Count * iX + iX
    Set rPaste = shpX.TopLeftCell.Offset(iNextPaste, -6)
   
    rCopy.Copy rPaste
   
    Set rPaste = rPaste.CurrentRegion
    rPaste.Cells(1).Offset(-1).Value = Application.WorksheetFunction.Sum(rPaste)
    rPaste.Cells(1).Offset(-1).Font.Bold = True
    rPaste.Cells(1).Offset(-1).BorderAround xlSolid
Next

End Sub




프로필 이미지
2015.01.19 06:50:32 *.6.162.29

아침에 비

아침에  비가 내린다.   비내리는 소리가 좋다.
아침 내내 아무 것도 하지 않고 그 비와 마주 대해  앉아 있었다.   
이 푸르른 여름 

안위타일종수장 安危他日終須仗 편암함과 위태로움이 어느날에는 서로 기대는 친구가 되고,
감고내시요공상 甘苦來時要共嘗 즐거움이나 고통이 닥치거든 두루 맛보아야 하는 것

어려운 때, 혁명에 이끌려 나그네처럼 떠돌던 손문이 광동성 궁벽한 어느 후원자의 집에 며칠 머물다 떠나며
그 고마움으로 글을 하나 남겼다한다.   이 글이다. 

아침 내내 비 내리는 소리를 듣는다
살다보면 절규할 때가 있다.   그러나 또한 그것이 후일 웃음이 될 때도 있다.
누구에게나 혹은 누군가에게  그런 때가 있게 마련이다. 

누군가  소리쳐 울면  그 언어가 어느 나라의 것이든
가슴에 안아 주기를
누군가  큰 소리로 웃으면
그 사람 옆에서 더 큰 소리로 기뻐해 주기를    
이왕 사는 것 그렇게 살 수 있기를

프로필 이미지
2015.01.23 02:35:24 *.7.18.78

자동차 연구소 연수

9시 수업 시작 9시 수업 끝

다음날 시험

동기 몇명 방이 새벽 2시 인데도 밝다

지역배정을 염두해두고 열심히 하는듯


프로필 이미지
2015.01.23 23:55:49 *.162.241.210
프로필 이미지
2015.01.24 00:07:43 *.162.241.210
프로필 이미지
2015.01.24 00:18:44 *.162.241.210
프로필 이미지
2015.01.25 23:10:40 *.142.3.37
프로필 이미지
2015.01.31 19:00:10 *.142.3.37

전문가의 뜻을 세우고 절실하게 추구하라

 

창조적 전문가가 되는 법 2 - 전문가의 뜻을 세우고 절실하게 추구하라, 교원  

얼마 전 나는 최고의 컨설팅 조직인 맥킨지에서 '창의적 전문가로 나를 키우는 법'이라는 주제로 강연을 하였다. 외국 컨설턴트들을 포함하여 국내의 젊은 인재들을 앞에 두고 프로페셔널의 조건에 대하여 강연한다는 것은 멋진 일이었다. 그날은 청명한 가을날이었다. 나는 이렇게 시작했다.

"나는 죽을 때까지 현역으로 일할 것입니다. 글을 쓰다 죽을 것입니다. 누군가 강연을 부탁하면 언제고 내가 가진 가장 아름다운 타이를 골라 매고, 가장 좋은 양복을 입고 그들을 만날 것입니다. 좀 소란스럽기는 하겠지만 강연을 하다 죽는 것도 꽤 괜찮은 일이라 생각합니다. 나는 내가 좋아하는 일을 하다 죽을 것입니다. 사는 동안 퇴직은 없습니다. 죽음이 퇴직입니다. 죽을 때 까지 현역일 수 있는 힘은 전문성에서 나옵니다.

나는 자유가 곧 성공의 유일한 기준이라 믿습니다. 하기 싫은 일을 하지 않을 권리, 다른 사람이 아닌 나의 음성에 따라 살 힘, 나는 이것이 자유라 생각합니다. 조직에 남아 있을 수도 있고 나가서 혼자 다른 사람에게 의존하지 않고 살 수 도 있습니다. 선택할 수 있는 자유, 나는 이 힘이 전문성에서부터 온다고 생각합니다.

시장 경제 속에 살지만 그것을 넘어 설 것입니다. 나는 주는 대로 받지 않고 내가 받을 가치에 대하여 시장에 요구합니다. 지불할 수 있는 능력이 있는 기업에게는 최고의 강연료를 요구합니다. 그러나 나눔이 필요한 조직에게는 무료로 강연하기도 합니다. 육체 속에 살지만 그 속에 영혼이 살 듯 나는 육체의 맛을 잊지 않지만 영혼이 제안하는 일을 따를 것입니다. 그럴 수 있는 힘은 뛰어난 전문성에서부터 옵니다. 시장이 부여한 브랜드의 힘이지요"

막연히 '전문가의 시대가 되었으니 전문가가 되면 좋지' 라는 마음으로는 정말 좋은 전문가가 되지 못한다. 그 길은 오래 걸리는 길이며, 한 차원을 넘어설 때의 진한 감동이 있지만 늘 장애가 나타나곤 하는 험한 길이기도 하다. 그래서 단단한 마음이 필요하다. 나도 늘 흔들렸다.

얼마전 내가 20년 동안 몸을 담았던 IBM에서 몇 년간 내 상사였던 분에게서 전화를 받았다. 함께 점심을 먹었다. 그 분은 한국 IBM에서 부사장을 지낸 분이고, 그 후 준정부조직의 사장으로 있다 곧 퇴임하기 직전이었다. 퇴임한 후의 직업으로 교육 비즈니스를 생각하고 있었다. 조직의 경력은 화려하지만 그 분야의 전문성은 부족한 상태였다. 그때 그분이 내게 이런 말을 한 적이 있다. "종종 옛날 같이 임원을 했던 사람들과 만나 저녁을 먹고 술도 같이 한다. 자연스럽게 과거의 이야기 과거의 사람들에 대해 서로 대화를 나눌 때가 많다. 그때 마다 당신 이야기가 나온다. IBM을 나와 가장 잘 살고 있는 사람이 바로 당신인 것 같다" 나는 이 칭찬이 진심이라고 생각한다. 어째서 조직에서 가장 성공했던 사람들조차 인생 전체를 건 긴 경력관리에서는 어려움을 겪는 것일까 ?

IBM에서 20년간 있는 동안 나는 대부분을 변화경영 분야에서 경력을 쌓았다. IBM은 특별한 조직이었다. 영업 경력이 없으면 임원으로 성장하기 어려웠다. 야망이 있는 모든 사람들이 모두 영업으로 몰려갔다. 그러다 보니 가장 뛰어난 인물들이 가장 많이 밀집해 있는 있는 곳이 바로 영업부였다. 성과급을 적용하고 있었기 때문에 영업부 직원들은 월급쟁이가 아니라 스스로를 비즈니스맨이라고 여겼고, 가장 낮은 직급의 사람들도 '영업대표'라고 써넣은 명함을 가지고 다녔다. 고객을 만나 직접 거래를 성사시킬 수 있는 많은 권한이 위임되었기 때문이다. 그곳은 말하자면 끗발이 있는 부서였고 승진과 보상을 위해서 반드시 몸을 담궈야하는 곳이었다. 나도 그곳으로 부서를 옮기고 싶은 유혹에 시달린 적이 한두 번이 아니었다. 그러나 나는 내가 좋아하는 일, 내 가슴을 뛰게 하는 일을 하기 위해 경영혁신팀에 남았다. 이 선택의 결과는 댓가를 요구했다. 조직 내에서의 나는 크게 성공하지 못했다. 그러나 길게 보아 나는 한국 IBM에서 가장 크게 성공한 사람이 되었다. 어쩌면 IBM 전체에서 가장 이상적인 경력관리에 성공한 사람 중에 하나가 되었다고 말해도 좋을 것이다. 조직에서의 사다리를 선택하는 대신 나는 일을 선택했기 때문이다.

나는 회사에서 많은 이론을 배웠고, 실무를 통해 현장에서 많은 시행착오를 겪었다. 회사는 내 선생이었다. 지금 나의 성공은 - 위에서 열거한 세 가지 관점에서- 모두 IBM이라는 훌륭한 회사에서 배운 지식과 경험이 있었기에 가능했다. 중요한 것은 회사에서 무엇을 배우는가 하는 점이다. 승진과 보상만을 목적으로 할 때 우리는 성과에 치중하게 되고 따라서 일에 대해서는 깊게 배우기 어렵다. 전문가는 깊게 배우는 사람이다. 깊이와 더불어 넓이를 가지려면 그 분야에 빠져들어 다른 것들은 잊고 연구하고 실험하고 재해석하고 다시 실험해야한다. 이런 프로세스가 반목되면서 방대한 실험자료가 쌓이고 그 분야의 전문가가 탄생되게 되는 것이다. 단순히 주어진 업무를 커다란 실수 없이 끝내는 수준으로 일을 처리해서는 10년이 지나도 결코 깊어지지 않는다. 경험이 많은 좋은 행정가는 많이 배출 될 지 모르지만 정말 깊이 있는 전문가는 많지 않은 이유이기도 하다.

직장 속에서 경력관리를 할 때 나는 이 대목에서 분명한 자기 철학을 가지고 선택해야 한다고 생각한다. 조직 속에서 사다리를 타고 무난한 관리자로 성장해 가는 것과 한 분야의 전문가로 깊어지는 것은 분명히 다른 길이다. 어느 직장에서나 전문가의 경력을 최우선적인 길로 삼으려면 대체로 다음과 같은 원칙과 기준을 가지고 자신을 관리할 필요가 있다.

* 다른 사람들이 선호하는 길을 따라가지 않는다. 즉 힘있는 부서보다는 자신의 적성에 잘 많는 부서를 선택하여 그곳에서 일하는 길을 선택한다. 많은 사람들이 몰려 가는 곳, 그곳은 경쟁이 치열한 레드 오션이다.

* 일단 자신이 원하는 분야의 일을 맡게 되면 '묵묵히 일과 깊게' 만나야 한다. '묵묵히' 라는 말은 크고 작은 정치적 입김이나 가벼운 처세에 휩쓸리지 말고 제 길을 가라는 말이다. 종종 같이 입사한 동료가 먼저 승진하는 경우도 있을 것이고, 나보다 더 좋은 평판과 인기를 누릴 수도 있다. 이때 흔들리지 말라는 것이다. '깊게' 일과 만난다는 뜻은 일을 탐구하라는 것이다. 적당히 일을 끝낼 것이 아니라 일을 누구보다 더 잘 끝내라는 것이다. 그러기 위해서 그 일에 대하여 책을 읽고, 수많은 케이스들을 찾아 벤치마킹하고 거기에 자신의 생각을 더해 현장에서 실험해 보고 더 좋은 방법을 찾아보라는 것이다.

* 뜻을 세워라. '나는 이 일 하나로 세상에 나를 세우리라' 이런 결심을 해야한다. 그리고 이 결심을 마음의 바위에 크게 새겨두어야 한다. 그러면 무슨 일을 하던 그 일을 이 일과 연결할 수 있게 된다. 나는 감자를 깎든 정원을 손질하든 강연을 하든 글을 쓰든 여행을 하든 사람을 만나든 모든 것을 변화와 연결시켜 생각한다. 이것은 자연스러운 것이다. 그 일만 생각하면 모든 것을 다 그 일과 연결된다.

전문가가 되는 법은 무엇인가 ? 다양한 방법이 있지만 가장 처음 해야할 일은 전문가가 되려고 마음을 먹는 일이다. 바로 뜻을 세우는 일이다. 공자도 그렇게 했다. 열 다섯에 학문에 뜻을 세웠다. 모든 것을 시작은 뜻을 마음의 바위에 새기는 것이다. 어려운 일을 당해 흔들릴 때도 있지만 그 뜻을 지켜내는 것이다. 랜디 포시가 '마지막 강의'에서 말한 것 처럼, ' 장애나 벽은 내가 그것을 얼마나 원하는 지를 알게 해 주는 것' 에 불과한 것이다.

전문성이 곧 죽을 때 까지 현역일 수 있는 힘이고, 다른 사람에게 밥그릇을 의존하지 않고 독립할 수 있는 힘이고 시장을 넘어 가격을 요구할 수 있는 브랜드의 힘이라는 것을 확실히 알고 스스로에게 전문가의 경력을 요구하는 자기 결심이 중요하다. 결심을 할 때 이렇게 다짐하자.

" 이 일은 하늘이 내게 준 것이다. 이 일을 통해 긴 삶이 그 본연의 모습을 가지게 될 것이다. 가장 나다운 이 일을 즐기리라. 그것이 나를 활용하는 것이며, 나를 꽃피우는 것이다. 인생을 낭비한 자, 그들이 가장 게으르고 비겁한 사람들이다. "

프로필 이미지
2015.02.10 08:50:39 *.37.252.62

Dir 특정 폴더에 어떤 기준을 갖는 파일명이나 확장자의 파일을 열고 처리할 때 자주 사용.

 

Sub Dir_시험() '폴더내 모든 '공구실'파일 열기
1 pat = ThisWorkbook.Path & "\"
2 file = Dir(pat & "*공구실.xlsx") ' 415p Dir[(경로[, 속성])]은 경로에는 폴더 전체 경로와 찾을 파일명이 옴
  Do Until file = ""
3   Workbooks.Open pat & file
4   file = Dir ' 폴더 내 파일 이름을 오름차순으로 하나씩 뱉어냄.

5 Loop
End Sub

 

프로필 이미지
2015.02.11 08:01:59 *.37.252.62

Sub VBA함수_Strings클래스()
1 Debug.Print VBA.Strings.Len("우리 나라") '=5
2 Debug.Print Strings.Left("우리 나라", 2) '=우리
3 Debug.Print Right("우리 나라", 2) '=나라
4 Debug.Print Mid("우리 나라", 2, 3) '=리 나
5 Debug.Print Mid("우리 나라", 2) '=리 나라
6 Debug.Print Trim(" 우리 나라  ") '=우리 나라
7 Debug.Print Format(Date, "yymmdd") '=130917

8 Debug.Print InStr("우리 나라", "나라") '=4
9 Debug.Print InStr(5, "우리 나라 좋은 나라", "나라") '=10

10 Debug.Print InStrRev("우리 나라 좋은 나라", "나라") '=10
11 Debug.Print InStrRev("우리 나라 좋은 나라", "나ss라", 5) '=4

12 a = Split("우리 나라 좋은 나라", " ")
13 Debug.Print a(2) '=좋은
14 Debug.Print Join(a, "/") '=우리/나라/좋은/나라
End Sub

 

Application.Trim VS VBA.Trim

 

Application.Trim은 문자열 중간에 공백이 여러 개 있는 경우 그 공백을 하나로 만듬.

VBA.Trim은 문자열 중간 공백은 건드리지 않음.

 

InStr([시작위치], [내용], [찾을 내용], [비교방법])

Format(내용, [표시 형식]) (ex Format(1500,"#,##0.00")

 

Sub VBA함수_Strings클래스2()
1 Debug.Print Strings.Chr(65) '=A
2 Debug.Print ChrW(160) '=유령문자(?), 셀에는 공백같이 보임
3 Debug.Print Asc("Abc") '=65
4 Debug.Print UCase("school") '=SCHOOL, 반대는 LCase
5 Debug.Print StrReverse("ateB") '=Beta
6 Debug.Print String(3, "/") '=///
7 Debug.Print Replace("010-3330-9999", "-", "") '=01033309999
8 Debug.Print StrComp("study", "Study") '=1
9 Debug.Print Space(7) '공백문자가 7개 생김

10 Debug.Print StrConv("excel study soft", vbProperCase) '=Excel Study Soft
  Debug.Print LenB(StrConv("ab우리", vbFromUnicode)) '=6

11 a = Array("매크로vba", "함수", "vba", "VBA매크로")
12 Debug.Print UBound(Filter(a, "vba")) 'vbTextCompare=1, vbBinaryCompare=0
End Sub

 

프로필 이미지
2015.02.15 23:29:15 *.142.3.37

인생을 낭비한 죄-한국일보

나를 움직인 한 구절, 1999년 3월 23일
아직도 나는 기억하고 있다. 근 30 년 전의 일이 되어버렸지만 그 파란 바다를 잊을 수 없다. 햇빛은 맑고 밝았다. 절벽에 부셔지는 파도는 눈부셨다. 바람은 그 속을 자유롭게 거닐고 있었다. 이미 너무 늙어 청춘을 즐길 수 없게 된 죄수 하나가 뗏목에 누워 하늘을 향해 소리친다. 얼마나 통쾌한 엿먹어 라였는 지 모른다. 자신을 가두었던 사람들, 자기의 실패를 즐겼던 사람들을 향한 악의 없는 조롱, 나는 그 때 그 늙은 몸 속에서 싱싱한 소년을 느꼈다.

영화 '빠삐용'에 나오는 주인공의 외침은 내게 이렇게 입체적으로 다가왔고, 나는 그 통쾌함을 여전히 간직하고 있다. 그 후 이 영화를 다시 보지 않았다. 그래서 많은 것을 기억해 낼 수는 없다. 단지 '인생을 낭비한 죄'를 짓고 싶어하지 않았던 한 사람을 뚜렷이 기억할 뿐이다. 인생을 낭비하지 않는다는 것은 무엇일까? 모범생처럼 곁눈 팔지 않고 공부하여 좋은 대학에 들어가고 졸업하여 의사나 변호사가 되는 것일까 ? 아무런 정신적 방황도 없이 평생 앞만 보고 달려가 사다리의 꼭대기에 가있는 야망을 이룬 거물이 되는 것일까? 아니면 허망한 짧은 인생, 실컷 퍼먹고 퍼 마시다 가는 것이 오히려 남는 인생일까?

이제는 알게 되었다.
내가 되어 치열하게 살고 싶다. 다른 사람이 시키는 원치 않는 일을 하며 평생을 살지 않을 것이다. 기름 진 저녁 한 상을 벌기 위해 자유로운 시간을 팔지 않을 것이다. 처자를 먹여 살리기 위해 내 시간의 일인생을 낭비하지 않는다는 것은 자기 자신이 되어 산다는 것을 말한다. 자신의 몸 속을 흐르는 피가 되고 골수가 되어 태어난 그대로의 삶을 사는 것이다. 인생을 낭비한다는 것은 남이 되어 사는 것을 의미한다. 사회가 인정해 주는 기준, 즉 출세하면 그것이 저인 양 거들먹거리며 사는 것이다. 반대로 사회가 알아주지 않으면, 가슴이 떨리고 기가 질려 어쩔 줄 몰라 때로는 우울하게 때로는 난폭하게 살다 가는 것이다.
부를 팔 수밖에 없다면 즐거이 그렇게 할 것이다. 그러나 하루에 한 시간이라도 나의 삶을 즐길 것이다. 언젠가 그 하루 전체를 즐길 수 있기를 바란다. 어쩌면 삶은, 온통 자유로운 시간으로 이루어진 하루를 얻기 위한 싸움과 인내인지 모른다. 그리고 그 속에서 건져 낸 슬픔과 깨달음 그리고 행복인지 모른다. 나는 오직 내가 되어, 60억 인류 속에 서로 같지 않은 하나로 살다 가고 싶다. 그 때 신은 나에게 '자신이 허락한 유일한 인생을 낭비한 죄'를 나에게 묻지 않을 것이다.

프로필 이미지
2015.02.19 23:10:19 *.142.3.37

날짜: 2월 18일(목)

취침 / 기상시간: 오후 7시 30분/  6시 30분 

수면/ 활동시간: 11시간  / 오후 9시 30분 ~ 오후 11시 분

늦게 잔 이유:

숙면에 대해: 겨울잠 잤다.

 

Sub exercise_1()
Dim rCopy As Range
Dim rX As Range
Dim iColMax As Integer
Dim iRowMax As Integer
Dim iRow As Integer
Dim iCol As Integer
Dim rTarget As Range

Set rCopy = Worksheets("엑셀초보").Range("table")  ' 이름정의를 이용해서 범위 잡는 것 잊지 말자.
iColMax = rCopy.Columns.Count
iRowMax = rCopy.Rows.Count
For iRow = 1 To iRowMax
    For iCol = 1 To iColMax
        Set rTarget = rCopy.Cells(iRow, iCol)  ' 번거럽더라도 rTarget 변수 이용하는 습관 만들것.
        rCopy.Interior.ColorIndex = 6
        rCopy.Font.ColorIndex = 1
        rTarget.Select
        rTarget.Interior.ColorIndex = 3
        rTarget.Font.ColorIndex = 2          ' 매크로 기록 활용

        
        rTarget.Offset(100, 100) = rTarget
       
        MsgBox "접근한 셀의 주소는 " & rTarget.Address & vbNewLine & "값은 " & rTarget.Value   ' vbNewLine 한줄 띄어쓰기

    Next
Next
rCopy.Interior.ColorIndex = 6
rCopy.Font.ColorIndex = 1

End Sub

 

몰입도 3.5

만족도 3.5

프로필 이미지
2015.02.20 21:16:03 *.142.3.37

나는 어떤 사람일까 ? - 나를 비추어 보는 거울들 2

 

나는 어떤 사람일까 ? - 나를 비추어 보는 거울들 2,
삼성월드, 5월 18일 , 2006

자기를 비춰보는 거울 이야기로 가장 유명한 것을 들어 보라면 내 머리 속으로 얼른 3가지 이야기가 한꺼번에 밀려든다. 하나는 백설공주의 계모의 거울이다. 바로 ‘거울아 거울아 이 세상에서 누가 제일 예쁘니?’ 라는 질문에 대답하는 그 유명한 마법의 거울이다. 두 번째는 나르시스의 호수 거울이다. 잘생긴 한 사내의 얼굴을 비춰 주었던 말 그대로 거울 같은 호수 거울이다. 예전에는 동양이나 서양이나 가리지 않고 거울의 대용으로 사용했던 것이 바로 물이다. 세 번째로 떠오르는 것은 사람 거울이다. 자신을 볼 때 사람에게 자신을 비춰보는 것이다. 아름다운 한자성어 중에 하나가 바로 ‘무감어수 감어인’(無鑑於水 鑑於人) 이다. 물에 자신을 비춰 보지 말고 사람에게 자신을 비춰 보라는 뜻이다. 표피와 껍데기에 천착하지 말고 사람 속에서 자신이 어떻게 받아들여지고 평가받는지 유의하라는 뜻이다. 이 세상에서 마법의 거울을 구할 수는 없다. 그러므로 ‘누가 가장 좋은 사람이니 ? ’, ‘누가 가장 믿을 수 있는 사람이니 ?’ 라고 물어 볼 수 있는 현명한 거울은 그저 이야기 속의 보물일 뿐이다. 물과 거울은 표피와 껍질을 반사하는 것이니 깊은 사람의 속을 보여 주지 못한다. 결국 사람에 비추어 자신을 들여다보는 것이 가장 현명하고 현실적인 방법이 아닐까 한다.

나는 다른 사람들에게 어떻게 보일까 ? 그들에게 보이는 내가 전부일 수 없지만, 나를 다른 사람이라는 거울에 비추어 보는 것은 현명한 일이다. 남편이나 아내에게, 친구에게, 동료에게 내가 어떤 때 가장 아름다워 보이는 지 혹은 어떤 때 가장 정떨어져 보이는 지 물어 볼 수 있다. 그들에게 내가 어떤 사람처럼 보이는 지 적절한 기회에 물어 보고, 들어 보는 것은 재미있는 일이다. 때때로 그들이 자발적으로 들려주는 피드백을 놓치지 말고 긍정적으로 받아들여 자신을 들여다보는 거울로 활용할 수 있다면 스스로 아주 성숙한 사람이라고 칭찬해 주어도 좋다.

자신을 들여다보는 거울로 다른 사람을 활용하게 될 때는 그 사람에 대한 자신의 감정을 객관화시켜 들어 줌이 좋다. 자신에 대한 평가는 종종 자존심을 건드리고 마음 한 구석의 불편함을 대동하게 되기 때문이다. 다른 사람에게 자신을 비춰 보는 일이 쉽지 않다는 것은 바로 이런 감정적 수양을 요구하기 때문이다.
누군가 좋은 의도로 한 말들은 마음 속에 잘 기억해 두었다가 잘 정리하여 적절하게 해석해 두는 것이 좋다. 예를 들어 내 딸들이 나에 대하여 해준 조언들 중에 ‘미숙이’ 라는 것이 있다. 난 상황이 벌어지면 즉각적인 반사가 늦다. 늘 한 템포 느리다. 큰 딸아이가 본 것은 그때그때 상황에 따라 센스있게 대처하는 임기응변에 능하지 못하다는 지적이다. 나는 틀림없이 그렇다. 둘째 딸이 지적해 준 것은 ‘장황하다’는 것이다. 뭘 물어 보려고 질문을 하면 내 설명은 예를 들어 가며 길어지는 데, 그 아이는 내가 요점만 말해 주기를 바란다. 이런 것들은 내 기질과 특성을 반영하는 것들이다.

정말 기억해야할 중요한 점은 이런 타고난 특성을 고치려고 애를 쓰는 것은 대단히 비효과적인 발상이라는 것이다. 이 특성을 활용할 수 있는 좋은 방법을 찾아 내는 것이 훨씬 효과적이다. 예를 들어 나는 그때그때 상황에 따라 즉각적으로 대응하는 방법으로 인생을 계획하고 일을 추진하지 않는다. 오히려 내 기질을 살려 큰 그림을 그리고, 작은 상황들에 휩쓸리지 않고, 좀 에두르더라도 내 갈 길을 꾸준히 가는 것이 마음이 편하고 그렇게 하면 후회하지 않는다. 장황하다는 것도 뒤집어 보면 한 질문에 대하여 여러 시선에서 깊이 들여다보려는 기질의 한 발단이기 때문에 연구를 하거나 책을 쓸 때 많은 도움을 주는 장점이기도 하다. 사람은 잘 변하지 않는다. 기질과 특성을 바꾸고 고치려는 시도 보다는 그것을 건강하고 건설적으로 활용할 수 있는 자기 계획과 의지가 훨씬 더 중요하다는 뜻이다.


자신의 기질과 특성을 반영하는 네 번 째 거울은 ‘현재라는 상황’ 이다. 우리는 하루하루 작은 의사결정들의 순간 속에서 살아 간다해도 과언이 아니다. 예를 들어 음식을 주문하거나 수퍼마켓에 가서 물건을 살 때 시간이 오래 걸리면, 그 사람은 의사결정 자체가 쉽지 않은 사람이라는 뜻이다. 이런 기질의 사람은 과정 자체가 즐거운 일을 추진할 때 훨씬 더 생산적이고 좋은 결과를 낼 수 있다. 모르는 사람들과 어울리는 것을 즐기는 사람은 외향적이다. 그러나 어느 파티에 가서도 언제나 아는 사람을 찾아 두리번거리는 사람은 내향적인 사람이다. 이처럼 일상에서 주어지는 상황 속에서 자신이 어떻게 행동하고 싶어 하는 지 그 경향을 관찰해 보면 매우 정확하게 자신의 기질이나 특성을 구체적으로 알아낼 수 있다. 그러므로 모든 현재의 상황을 나를 비춰 보는 거울로 활용하라. 이것에 능해 지면, 언제나 자신이 좋아하는 상황을 만들어 낼 수 있고, 그 속에서 가장 자기다운 방식으로 삶을 즐길 수 있게 된다.

성공의 정의는 다양할 것이고 사람마다 기준이 다를 수도 있다. 나 같은 사람은 무언가를 성취하는 것을 성공으로 규정하는 것이 편치 않은 사람이다. 나는 목적지에 도착하는 것이 무엇 보다 중요한 목표지향적 인간이 아니라 여행 자체를 즐기는 여행자에 가깝다. 따라서 ‘그 날 그 장소 그 사람 그 일’이 훨씬 의미있게 다가온다. 물론 나도 내가 좋아하는 분야에서 좋은 성취를 하고 그것을 통해 사회적 명성과 부를 획득할 수 있기를 간절히 바라는 사람이다. 그러나 나는 좋아하는 일을 내 방식대로 하는 것을 훨씬 더 중요하게 생각하는 사람이다. 결과가 좋으면 좋은 것이고, 결과가 신통치 않아도 할 수 없다. 그저 나는 하나의 실험을 해 본 것이고, 그것은 꽤 괜찮은 놀이였으니 말이다.

시인 월트 휘트만이 이렇게 말했다. “나는 짐마차가 되지 않을 것이다. 나는 짐마차에 실린 짐도 되지 않을 것이다. 나는 짐마차를 끄는 말도 되지 않을 것이다. 나는 짐마차를 인도하는 작은 손이 될 것이다”

만일 그대가 짐마차를 인도하는 작은 손이 되고 싶다면, 스스로 원하는 곳으로 인생의 짐을 진 마차를 끌고 가고 싶다면, 반드시 자신이 어떤 사람인지 알아야 한다. 자아경영이란 결국 자신의 기질과 재능과 경험을 엮어 자신 만의 인생을 만들어 내야하는 것이기 때문이다.

프로필 이미지
2015.02.20 22:11:51 *.142.3.37

나는 어떤 사람일까 ? - 나를 비추어 보는 거울들 1

 

나는 어떤 사람일까 ? - 나를 비추어 보는 거울들 1
삼성월드, 4월 4일

젊음은 방황하는 것이다. 방황이란 모색이며, 모색의 실패이며, 다시 달리 모색해 보는 것이다. 얼마 전 나는 이제는 조금씩 알려 지기 시작한 ‘내 꿈의 첫 페이지’프로그램을 끝냈다. 그것은 새로 태어나기 위한 자궁 같은 곳이다. 말하자면 단군 신화 속의 그 동굴과 같다. 곰과 호랑이처럼 여기 참석한 사람들은 금연해야하고 금주해야하고 단식해야한다. 그리고 ‘어제와 다른 사람’이 되기 위해 진지한 며칠을 보내야한다. 나는 이 ‘며칠’을 ‘어제가 오늘을 침범하고 범람하지 않도록 막아주는 공백 혹은 블랙 홀’이라고 부른다. 바로 웅녀의 동굴이다.

지난 번 참가자들 중 두 명은 20대 후반의 직장 여성이었다. 그들은 ‘하고 싶고 잘할 수 있는 일’을 하며 살고 싶어 했다. 그러나 그것이 무엇인지 알지 못했다. 우리는 자신의 특별함을 찾아가는 방법들에 대해 논의했다. 나는 먼저 자신을 비추어 볼 수 있는 4 가지 거울들을 사용해 보라고 권했다. 이번에는 우선 2 가지 거울들을 먼저 소개하고 다음에 다른 2 가지를 추가로 소개할까 한다.

1) 과거를 뒤져라. 과거는 현재의 거울이다. 그곳에서 지금의 나를 볼 수 있다. 먼저 3 페이지 정도의 개인사 (personal history)를 적어 보는 것부터 시작하자. 쉬운 작업이 아닐 지도 모른다. ‘자기’란 늘 솔직하게 대면하기 어려운 복잡한 것이고 양파와 같은 것이다. 아주 많은 심층적 껍질을 가지고 있고, 한 까풀을 벗길 때 마다 지독한 냄새 때문에 눈물을 쏟게 한다. 그러나 자신과 대면할 용기가 없으면 ‘나’는 나에게 영원한 수수께끼가 되고 만다.

특히 개인사를 써 볼 때, 두 가지 관점에서 기록해 보자. 먼저 과거의 기억을 더듬어 정말 기억나는 칭찬 몇 가지를 찾아내는 것이다. 지금 까지 자신을 기쁘게 해 주었던 잊지 못할 칭찬 다섯 개를 찾아내 보자. 어렸을 때 할아버지가 해준 칭찬이어도 좋고, 선생님이 놀라며 ‘너는 어쩌면 이렇게 잘하니’라고 칭찬 했던 그 일이어도 좋다. 이것을 찾아 내 ‘나를 기쁘게 한 다섯 가지의 칭찬들’이라고 불러 보자.

그리고 거꾸로 이번에는 ‘나를 부끄럽게 한 3 가지 사건들’을 찾아내 보자. 아직도 그 일을 생각하면 얼굴이 달아오르고, 통증이 살아나고, 스트레스를 받는 그 사건들을 찾아 꼼꼼하게 기록해 보자.

그러면 이제 적어도 내 과거를 이루는 8가지 사건들에 대한 기록을 가지게 된 셈이다. 이 8대 사건들은 좋던 싫던 내 정체를 보여주는 중요한 단서들이다. 이 속에서 나는 ‘어떤 상황에 직면하면 어떻게 행동하게 되는 지, 내가 어떤 일에 쏠리고, 어떤 일을 싫어하고 피하려고 하는 지를 구체적으로 보여주는 거울’을 발견하게 된다. 과거라는 거울 속의 나, 그것이 부정할 수 없는 나의 정체성의 파편들이다. 좋은 것과 나쁜 것 모두를 받아들이면 된다. 받아들이는 작업, 이것이 나를 이해하기 위해 넘어야할 첫 번 째 언덕이다 .

이때 조심해야할 것이 있다. 과거가 내 정체성의 중요한 일부이기는 하지만 모든 것은 아니다. 그것은 나라는 생명체가 과거의 특별하고 구체적인 상황 속에서 어떻게 반응했는지를 보여주는 ‘역사적 사례’일 뿐이다. 환경이 달라지면 다르게 반응하게 될 수 있으며, 스스로를 계발하면 더 현명하게 행동 할 수도 있다. 따라서 과거가 내 모든 가능성을 말한다고 믿어서는 안된다. 과거라는 거울을 통한 성찰을 통해 ‘어제 보다 아름다운 미래’를 만들려고 하는 것이 우리라는 사실을 잊어서는 안된다.

2) 부모님이라는 거울을 활용하라. 혹은 자식이라는 거울을 활용하라. 영화 ‘ 로드 투 퍼디션’ Road to Perdition 에 나를 빨아 당긴 아주 느리게 흐르는 아버지와 아들의 대화가 나온다. 나는 그 표정들을 아직 기억한다. 대화를 정확하게는 기억하지 못하지만 대략 다음과 같았던 것 같다..

아들: 물어 보고 싶은 게 있어요. 형을 더 좋아하죠 ?
아버지; 그렇게 생각하니 ?
아들: 네, 나와 다르게 대한다고 생각했어요.
아버지 : 너는 형보다 더 나를 닮았다.
그래서 그렇게 대한 것 같다.

내가 기억하는 것은 아버지의 마지막 말이다. ‘나를 더 닮았다는 것’. 그것이 모든 아버지들의 희망이고 절망이다. 나에게도 나를 닮은 딸이 있다. 얼핏얼핏 그 애 속에서 나의 단점을 볼 때마다, ‘바로 저것 때문에 내 인생이 얼마나 고달팠던가? ' 하는 생각이 들어 끔찍해지곤 한다. 부모가 되면 아이들의 장점 보다 단점들에 더 민감해 지게 마련이다. 그것 때문에 아이들에게 아픈 일들이 생기지 않기를 바라기 때문이다. 그래서 아이들 속에서 자신과 닮은 기질적 결핍을 보았을 때, 애타하는 것이다.

부모를 보면 그들 속에서 자신의 장점과 단점 그리고 기질적 특성을 확인할 수 있다. 바로 유전적 특성을 감지할 수 있는 것이다. 내 속에 흐르는 유전적 유산, 이것은 나를 이해하는 중요한 또 하나의 단서이다.

그러나 이 거울도 역시 나를 보여주는 완벽한 거울은 아니다. DNA 가 인간의 모든 것을 말해주는 것은 아니다. 인간의 행동을 이해하기 위해서는 적어도 3가지 요소를 함께 이해해야한다. 첫째는 환경이다. 강요된 환경에서 우리는 자신의 의사대로 행동하기 어렵다. 그러나 자유로운 환경에서는 자신의 의사에 따라 행동할 가능성은 높아진다. 둘째는 그 개인이 가지고 있는 가치관이다. 성장해 온 사회 문화적 자양에 따라 개인은 자신의 가치관과 신념을 형성하게 되고, 그것에 따라 행동하려 한다. 그리고 세 번째 요소가 바로 유전적 기질과 재능이다. 타고난 것이지만 환경에 따라 발현되는 정도는 다르게 마련이고, 그것을 보유한 사람의 가치관에 따라 다르게 사용되기 마련이다. 그래서 유사한 유전인자를 가지고 태어난 사람들도 다 다르게 행동하는 것이다.

자신이 어떤 피와 기질을 가지고 태어났는 지 그리고 그것들이 과거의 특정한 상황 속에서 구체적으로 어떻게 발현되었는지 과거를 뒤져 관찰하는 작업은 어렵고 지루한 작업일 수도 있다. 그러나 명심하자. 내가 활용할 수 있는 나의 강점 나의 재능을 알지 못하고는 특별해 질 수 없다는 사실을 말이다.

프로필 이미지
2015.02.20 23:42:55 *.142.3.37

날짜: 2월 19일(금)

 

Sub exercise_2()
Dim rCopy As Range
Dim iColMax As Integer
Dim iRowMax As Integer
Dim iRow As Integer
Dim iCol As Integer
Dim rTarget As Range
Dim iNext As Integer
Dim iGap As Integer
Dim rBlock As Range
Dim iBlockNum As Integer
Dim iY As Integer

Set rCopy = Worksheets("엑셀초보").Range("table")

iGap = 10
iBlockNum = 8
iColMax = rCopy.Columns.Count
iRowMax = rCopy.Rows.Count

For iRow = 1 To iRowMax
    iNext = iGap
    For iCol = 1 To iColMax
        Set rTarget = rCopy.Cells(iRow, iCol)   ' 변수로 만드는 것 습관!
        For iY = 1 To 6
            rTarget.Offset(iNext * iY) = "=" & rTarget.Address(True, True) & "*" & iY + 1  ' 따옴표 쓰는 방법 기억! 변수와 아닌 것!
              If iRow = iRowMax And iCol = iColMax Then
                Set rBlock = rTarget.Offset(iNext * iY).CurrentRegion ' 변수화 습관
                With rBlock
                    .Interior.ColorIndex = 6
                    .Borders.LineStyle = Excel.XlLineStyle.xlContinuous
                    With .Cells(1).Offset(-1)  ' with 문 이중으로 쓰는 것. 익힐 것.
                        .Formula = "=SUM(" & rBlock.Address(True, True) & ")" ' formula 생략 가능하지만 그래도 쓰는 연습
                        .Font.Bold = True
                        .BorderAround xlSolid
                    End With
                End With
            End If
        Next
    Next
Next
End Sub


 

 

내가 짠 것

 

Sub 수식_복사하여_붙여넣기()

Dim rTable As Range
Dim iRowmax As Integer
Dim iColmax As Integer
Dim iMove As Integer
Dim iBlock As Integer
Dim rTarget As Range

iMove = 9
iBlock = 5
Set rTable = [b6].CurrentRegion
iRowmax = rTable.Rows.Count
iColmax = rTable.Columns.Count


For i = 1 To iColmax
   For j = 1 To iRowmax
      For k = 1 To iBlock
      Set rTarget = rTable.Cells(j + iMove * k, i)
      rTarget.Value = "=" & rTable.Cells(j, i).Address & "*" & k
      If i = iColmax And j = iRowmax Then
      [b6].Copy
      rTarget.CurrentRegion.PasteSpecial Paste:=xlPasteFormats
      rTarget.Offset(-7, -2) = "=Sum(" & rTarget.CurrentRegion.Address & ")"
      End If
      Next
   Next
Next


End Sub

 

프로필 이미지
2015.02.28 14:27:26 *.37.252.62

2월 27일

Dir, Redim Preserve, 파일열기 workbooks(" *.xlsx"), Exit do, save as 주소, 파일

 

 

Sub 보종코드별_시트구성하기()

Dim pat As Variant
Dim strTarget() As String
Dim strNumber_target As String
Dim strNumber_move As String

pat = ThisWorkbook.path & "\"

file1 = Dir(pat & "*.xlsx")

i = 0
Do Until file1 = ""
If Left(CStr(file1), 1) = "l" Then
    ReDim Preserve strTarget(i)
    strTarget(i) = file1
    i = i + 1
End If
file1 = Dir
Loop

 

For j = 0 To UBound(strTarget)
    strNumber_target = Mid(CStr(strTarget(j)), 2, 4)
    Workbooks.Open pat & strTarget(j)
    file2 = Dir(pat & "*.xlsx")
   
    Do Until file2 = ""
      If Left(CStr(file2), 1) <> "l" Then strNumber_move = IIf(Left(CStr(file2), 2) = "sm", Mid(CStr(file2), 3, 4), Mid(CStr(file2), 2, 4))
            If strNumber_move = strNumber_target Then
             Workbooks.Open pat & file2
             Workbooks(file2).Sheets(1).Move Before:=Workbooks(strTarget(j)).Sheets(1)
      End If
     
      If Workbooks(strTarget(j)).Sheets.Count = 3 Then
      Workbooks(strTarget(j)).SaveAs ThisWorkbook.path & "\" & strNumber_target & ".xlsx"
      Workbooks(strNumber_target & ".xlsx").Close
      Exit Do
      End If
      file2 = Dir
    Loop
Next
End Sub

프로필 이미지
2015.03.01 21:27:53 *.37.252.62

수식 복사 후 값복사

피드백사항

 

0. 처음 로직을 짤 때 어떻게 흐름이 구성되는지 쓸 것. 간단히 예시로 써보는게 빠르다.

  -> 어떻게 구성할지 않하고 무작정 짜니까 시간 허비.

1.  디버깅 할 때 변수 하나씩 차근차근 체크할 것. 대충하면 계속 뭐가 틀린지 모르고 매크로만 돌리고 있다.

  -> 어떤 점이 틀린지를 늦게 찾게 된다. 차근차근

2. 로직을 짤 때 어떤 포인트를 주의해야하는지 먼저 확인할 것.

  -> 어떤 점이 문제점인지를 미리 생각해야 접근이 빠르다.

 

간단한 건데 아래 로직에서 아래 3가지가 계속 헷갈려서 시간 다 잡아먹음.

lastrownum = rCopynext(0).Row

copyrownum = rowcount - lastrownum + 1

rCopynext = rCopy.Offset(j + 1, 0).Resize(copyrownum, colcount)

매크로로 해결하려고 했던 문제는 파일 용량이 커서 수식 복사 후 값복사를 매크로로 돌리는 것.

 

여기서 복사 위치를 offset으로 정할 때 offset의 기준 설정(첫 행 vs 복사한 부분이냐, 여기서는 첫행) resize도!

과 이동하는 숫자를 체크하는게 주요 포인트!

 

그리고 1000단위로 복사 붙여넣기를 하는데 데이터 마지막 레코드에 맞춰서 복사하려면

복사할 범위로 지정한 첫행과 마지막레코드의 행 차이를 count해서 고려해야 함.

 

범위 지정 후 범위 첫행과 데이터 마지막 레코드를 체크할 때

복사할 범위의 마지막행과 데이터 마지막 레코드를 비교해서 계속 에러가 발생함

lastrownum = rCopynext(0).Row  첫행으로 고친 부분이 이 부분.

계속 에러를 낸 이유는 매크로가 돌아가는 순서를 먼저 고려하지 않고 무작정 짰기 때문에.

 

이어서 복사할 부분의 레코드 수는

copyrownum = rowcount - lastrownum + 1.

+1을 생각할 것.

 

복사하고 범위 선택 후 마지막 레코드까지의 행수 체크를 어디서 해야하는지 헷갈려 했음.

실제로 예시를 들면서 했으면 훨씬 빨리 했을 거다.

 

 

 

Sub 수식_값복사_저축부분()

Dim rowcount As Variant
Dim lastrownum As Variant
Dim rCopy As Range
Dim rCopynext As Range
Dim copyrownum As Variant

copyrownum = 1000
Set rCopy = Range([b9], [b9].End(xlToRight))

rowcount = [a9].End(xlDown).Row
colcount = rCopy.Columns.Count

j = 0
Do
   Set rCopynext = rCopy.Offset(j + 1, 0).Resize(copyrownum, colcount)
   lastrownum = rCopynext(0).Row
      If rowcount - lastrownum < copyrownum Then
      copyrownum = rowcount - lastrownum + 1
      Set rCopynext = rCopy.Offset(j + 1, 0).Resize(copyrownum, colcount)
      End If
   rCopy.Copy rCopynext
   rCopynext.Copy
   rCopynext.PasteSpecial Paste:=xlPasteValues
   j = j + copyrownum
Loop Until copyrownum = rowcount - lastrownum + 1

End Sub

프로필 이미지
2015.03.15 18:52:19 *.142.3.37

3/15(일)

 

index, match, offset, address, indirect

 

- 병합된 셀에서  match를 쓰게 되면 병합 된 셀의 첫 셀의 주소를 읽어오게 된다.

- address는 주소를 불러오고 3번재 인수로 절대 참조 상대 참조를 정할 수 있다.

- 그리고 address를 수식의 주소로 쓰려면 indirect를 써야한다.

- offset에서 행의 이동이나열의 이동이 없는 것은  해당 인수에 0 이 아니라 아무것도 입력하지 않아야 한다.

 

- 마지막으로 복잡한 수식은 여러셀에 나눠서 작성하면 편리하고

 최대한 간단하게 수식을 짤 수 있도록 하는 것이 좋다.

 

=INDEX(OFFSET(INDIRECT(ADDRESS(2*ROW()-3,4)),,,,9),MATCH(O$2,OFFSET(INDIRECT(ADDRESS(2*ROW()-2,4)),,,,9),0))

이 수식은 너무 복잡하다. 병합된 셀에서  match가 어떻게 작용 하는지 정확히 몰라 수식이 길어졌다.

하지만 address를 사용해 볼 수 있는 기회는 되었다.

 

판매 순위(1위,2위,3위) 해당자의 이름 불러오기

=INDEX($D$2:$L$2,MATCH(R$2,OFFSET(INDIRECT(ADDRESS(2*ROW()-2,4)),,,,9),0))

 

=INDEX($D$2:$L$2,MATCH(O$2,OFFSET($D$3,MATCH($N3,$B$3:$B$12,0),0,1,9),0))

프로필 이미지
2015.03.22 13:03:26 *.37.252.62

3/22(일)

파일을 열지 않고 셀 값을 가져오기

 

다른 파일의 셀 주소 형식 : '폴더 경로 + [파일] + 시트' ! 셀주소

 

keyword: Dir,  IsNumeric

 

 

Sub s복사_파일안열고_더하기()
'=SUM('D:\xl\book_macro\파일2\[3.xlsx]Sheet1'!$A$1:$A$4)
'구조: 경로[파일]시트'!A1:A4
Dim cd As Range
pat = ThisWorkbook.Path & "\파일2\"
1 srfile = Dir(pat & "*.xlsx")
Set cd = [a2]: cd = "" 'cd값 초기화
  Do
2   If IsNumeric(Left(srfile, InStr(srfile, ".") - 1)) Then
3      sr = "'" & pat & "[" & srfile & "]Sheet1'!A1:A4"
       sr2 = sr2 & "," & sr
    End If
4   srfile = Dir
5 Loop Until srfile = ""
6 cd = "=sum(" & Mid(sr2, 2) & ")"
7 cd = cd '수식 지우고 값만 남기기
End Sub

프로필 이미지
2015.03.22 13:21:28 *.37.252.62
프로필 이미지
2015.03.22 13:23:35 *.37.252.62
프로필 이미지
2015.04.06 08:22:16 *.37.252.62

셀에 보이는 값 그대로 입력

keyword : Text,  NumberFormatLocal

 

 

Sub 셀에_보이는_값_그대로_입력()

Dim r As Range, c As Range

Set r = ActiveSheet.[c3:c7]

For Each c In r
 sr = c.Text
 c.Value = sr

Next

r.NumberFormatLocal = "G/표준"

End Sub

프로필 이미지
2015.04.07 08:25:50 *.37.252.62

배열 수식 복습

 

{=SUM(D90:D95*E90:E95*105%) }

 

여러 개의 값*여러 개의 값* 단일값 을 하게 되면

단일값이 같은 값으로 각각의 배열의 개수만큼 확장되어 계산된다

 

배열 수식 sumproduct에서 OR 작동원리

 

=SUM(IF(OR(B72:B78="오징어",E72:E78="오징어"),C72:C78,0))

OR함수는 여러 개의 조건에 하나라도 TRUE가 있으면 TRUE이다

 

 

 

 

프로필 이미지
2015.04.08 09:42:48 *.37.252.62

변수 선언 의무화  Option Explicit

더블클릭 관련 프로시저 이름 Worksheet_BeforeDoubleClick

셀 더블 클릭 시 편집 모드로 바뀌는 것 해제 Cancel = True
이름관리자에서 정한 이름을 매크로에서 사용하기  [할인률]  ( 할인률 로 이름 정의 시)

 

Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Interior.ColorIndex = 6 Then
   Target.Value = IIf(Target.Value = 1, "", 1)
   Cancel = True
End If
End Sub

 

 

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)  
If Target.Interior.ColorIndex = 3 Then  
    [할인율] = Target.Value  
    Cancel = True  
End If  
End Sub  

 

프로필 이미지
2015.04.09 08:51:23 *.37.252.62

Excel Baby_096, OFFSET | 동적수식과 함수

 

keypoint : 이름 정의, 기준이 되는 것을 잡는 것

 

문제점 : offset과 counta를 이용해 이름 정의를 하는데 특정 열은 데이터가 없어 counta로 체크 불가 => 범위를 제대로 잡지 못함

해결책 : 데이터가 채워져있는 열을 기준으로 잡고 다른 열을 기준 열에서 offset을 통해 정의

 

 

프로필 이미지
2015.04.10 09:00:21 *.37.252.62

 

x20141103_0846_vba_XLprogramming_075

2014-11, 1Week

 

Keyword

 

1. 서식지정

 rTblToFormat.NumberFormatLocal = "G/표준"

 

2. Union

떨어진 범위를 한꺼번에 접근

 

3. String

String("개수","표현할 문자")

 

4. Rows

범위의 행 단위로 접근 가능

 

 

Sub putNumbeFormat()
Dim rTblToFormat As Range
Set rTblToFormat = Me.Range("table75")
rTblToFormat.NumberFormat = "G/표준"  ' 이렇게 입력하면 기대한 표준 형식으로 입력 안 됨
MsgBox "왼쪽 파랑색에 아무 숫자나 입력해 보세요"

End Sub

 


Sub putNumbeFormat1()
Dim rTblToFormat As Range
Set rTblToFormat = Me.Range("table75")
rTblToFormat.NumberFormatLocal = "G/표준"   ' Local이 들어가야 제대로 표준형식이 먹힘
MsgBox "왼쪽 파랑색에 아무 숫자나 입력해 보세요"

End Sub


Sub putNumbeFormat2()
Dim rTblToFormat As Range
Set rTblToFormat = Me.Range("table75")
rTblToFormat.NumberFormat = "General"   ' 영문판에서 모든 나라별로 다 통하는 표준서식
MsgBox "왼쪽 파랑색에 아무 숫자나 입력해 보세요"

End Sub

 


Sub putNumbeFormat3()
Dim rTblToFormat As Range
Dim rRow As Range
Dim iX As Integer
Set rTblToFormat = Me.Range("table_75_1")
For Each rRow In rTblToFormat.Rows  
   
    rRow.Value = 1
    If iX = 0 Then
        rRow.NumberFormat = "#"
    Else
        Union(rRow.Cells(1), rRow.Cells(3)).NumberFormat = String(iX, "0") & ".0"
        With Union(rRow.Cells(2), rRow.Cells(4))
            .NumberFormat = "#." & String(iX, "0")
            .Borders(xlEdgeLeft).LineStyle = xlSolid
        End With
    End If
    rRow.Font.Size = 8
    iX = iX + 1
Next
Union(rTblToFormat.Columns(2), rTblToFormat.Columns(4)).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft

MsgBox "왼쪽 파랑색에 아무 숫자나 입력해 보세요"

End Sub

프로필 이미지
2015.04.10 21:18:16 *.37.252.62
프로필 이미지
2015.04.14 09:26:29 *.37.252.62

Excel Baby_077, ArrayFormula, INDEX,MATCH,ROWS,ROW

 

small 함수에서 array에 공백이 있으면 무시하고 계산!

rows는 해당 범위의 행개수

row는 해당 셀의 행 번호

 

=IF($D$82:$D$85=$G$82,TRUE,FALSE)

=IF($D$89:$D$92=$G$89,$E$89:$E$92,FALSE)

=SMALL(IF($D$96:$D$99=$G$96,ROW($E$96:$E$99)),ROW(H95)-ROW($H$94))

=INDEX($E$103:$E$106,SMALL(IF($D$103:$D$106=$G$103,ROW($E$103:$E$106)),ROW(H102)-ROW($H$101))-ROW($H$102))

 

=IF($D$82:$D$85=$G$82,TRUE,FALSE)

프로필 이미지
2015.04.15 08:20:02 *.37.252.62

Excel Baby_097, VLOOKUP, Reference Table and Operational Table

 

참조테이블(Reference Table)  vs 운용테이블(Operational Table)

 

Reference Table

참조테이블은 기준이 되는 열의 값이 유일한 값으로 구성되었을때 흔히

참조테이블(LookUp테이블, Reference테이블)이라고 한다

 

Vlookup을 사용할 때 테이블이 참조테이블이어야 하는 조건을 생각할 필요가 있다.

 

그러면 운용테이블에서 찾을 값이 여러개이고

순차적으로 찾고 싶은 때는 어떻게 해야할까?

 

그럴때는 배열을 이용한다.

A  137

B  125

A  150

 

이런식으로 테이블이 구성되어있을 때 A에 매칭 되는 137과 150을 순차적으로 값을 가지고 오고 싶다.

그럴 땐 아래와 같은 식을 활용한다.

 

{=INDEX($F$46:$F$61,SMALL(IF($E$46:$E$61=P45,ROW($A$1:$A$16),""),COUNTIF($P$45:P45,P45)))}

 

쪼개 보면

 

INDEX($F$46:$F$61

가져올 값들의 배열에서 가져오려는 값과 매칭 되는 순서를 부여하자.

 

IF($E$46:$E$61=P45, ROW($A$1:$A$16),"")

먼저 찾을 값과 일치하는 값들의 매칭되는 행을 배열로 만든다.

 

SMALL(IF($E$46:$E$61=P45, ROW($A$1:$A$16), ""), COUNTIF($P$45:P45,P45))

위 행들의 배열에서 순서를 부여하는데 순서 부여 방법은 COUNTIF($P$45:P45,P45)로 처리하여

첫번 째 찾는 A와 매칭되는 값의 순서를 1로, 두번째 찾는 A와 매칭되는 값의 순서를 2 로 만드는 것이다.

 

{=INDEX($F$46:$F$61,SMALL(IF($E$46:$E$61=P45,ROW($A$1:$A$16),""),COUNTIF($P$45:P45,P45)))}

마지막으로 배열처리하면 된다.

 

 

 

프로필 이미지
2015.04.22 08:45:38 *.37.252.62

뭔가 잘못됐다 ;;

Set rFieldnameSummary = shtSummary.[c5:z5]

Sheets("A").[a3:z4].Copy shtSummary.[a4]

여기서 나의 코딩은 잘못된 길로 들어선거 같다.......

처음에 편하게 하려고 복사 붙여넣기 해버리니까 

로직이 잘 안나온다.  처음에 생각을 잘하고 시작해야한다.

 

 

Sub 데이터시트_통합하기()

Dim sSummary As Sheets
Dim rFieldnameSummary As Range
Dim rFieldnameTarget As Range
'Sheets.Add
'Sheets(1).Name = "Summary_report"

Set shtSummary = ThisWorkbook.Sheets("Summary_report")
Set rFieldnameSummary = shtSummary.[c5:z5]

Sheets("A").[a3:z4].Copy shtSummary.[a4]


For i = 3 To ThisWorkbook.Sheets.Count
s = 1
   Sheets(i).[a1].End(xlDown).Offset(1).Resize(3, 2).Copy shtSummary.[a1000].End(xlUp).Offset(1)
   Set rFieldnameTarget = Range(Sheets(i).[a1].End(xlDown).Offset(, 2), Sheets(i).Range("ac6").End(xlToLeft).End(xlUp))
      For Each c In rFieldnameSummary
         For j = s To rFieldnameTarget.Count
            If c.Value = rFieldnameTarget(j).Value Then
               rFieldnameTarget(j).Offset(1).Resize(3).Copy c.Offset(1 + k).Resize(3)
               s = j + 1
               Exit For
            End If
            If rFieldnameTarget(j).Value = "" Then
               rFieldnameTarget(j).Offset(1).Resize(3).Copy c.End(xlToRight).Offset(1 + k, 1).Resize(3)
               s = j + 1
               Exit For
            End If
         Next
      Next
      k = k + 3
Next


End Sub

프로필 이미지
2015.04.23 09:13:26 *.37.252.62

문제는 D시트에서 9월 값을 가져올 때다..

가져올 필드명은 1, 4

summary field는 1,2,3,4,5

기존 로직이 잡아내지 못하고 있는 부분......

로직 자체를 싹 바꿔야 될 듯

 

월까지 이용해서 값을 가져오는게 확실하니까

그렇게 로직을 다시 짜자.

 

 

 

Sub 데이터시트_통합하기()

Dim sSummary As Sheets
Dim rFieldnameSummary As Range
Dim rFieldnameTarget As Range
'Dim SheetsArray()

'Sheets.Add
'Sheets(1).Name = "Summary_report"

Set shtSummary = ThisWorkbook.Sheets("Summary_report")
Set rFieldnameSummary = shtSummary.[c5:af5]
Set rSummaryFieldCopy = shtSummary.[a5]
'SheetsArray = Array("A", "B", "C", "D", "E")

Sheets("A").[a4:b4].Copy rSummaryFieldCopy

For i = 0 To 4
   Sheets("A").[c4:g4].Copy rSummaryFieldCopy.Offset(, 2 + 6 * i)
   rSummaryFieldCopy.Offset(-1, 2 + 6 * i).Value = i + 7 & "월"
   rSummaryFieldCopy.Offset(-1, 7 + 6 * i).Value = i + 7 & "월 요약"
Next

For i = 3 To ThisWorkbook.Sheets.Count
   s = 1
   Sheets(i).[a1].End(xlDown).Offset(1).Resize(3, 2).Copy shtSummary.[a1000].End(xlUp).Offset(1)
   Set rFieldnameTarget = Range(Sheets(i).[a1].End(xlDown).Offset(, 2), Sheets(i).Range("ac7").End(xlToLeft).End(xlUp).Offset(-1))
      For Each c In rFieldnameSummary
         For j = s To rFieldnameTarget.Count
            If c.Value = rFieldnameTarget(j).Value Then
               rFieldnameTarget(j).Offset(1).Resize(3).Copy c.Offset(1 + k).Resize(3)
               s = j + 1
               Exit For
            End If
            If rFieldnameTarget(j).Value = "" Then
               If c.Value = "5" Then
                  s = j
                  Exit For
               Else
                  rFieldnameTarget(j).Offset(1).Resize(3).Copy c.End(xlToRight).Offset(1 + k, 1).Resize(3)
                  s = j + 1
                  Exit For
               End If
            End If
         Next
      Next
   k = k + 3
Next


End Sub

프로필 이미지
2015.04.24 09:33:49 *.37.252.62

병합 된 요약 데이터 가져오는 것 해결 필요...

 

병합에서 cells 와 offset의 차이

 

[h3] 과 [h4]가 병합 되어 있을 때

?[h3].cells(2).address
$H$4
?[h3].offset(1).address
$H$5

 

 

 

Sub 데이터시트_통합하기()

Dim sSummary As Sheets
Dim rFieldnameSummary As Range
Dim rFieldnameTarget As Range
'Dim SheetsArray()
'Sheets.Add
'Sheets(1).Name = "Summary_report"

Set shtSummary = ThisWorkbook.Sheets("Summary_report")
Set rFieldnameSummary = shtSummary.[c5:af5]
Set rSummaryFieldCopy = shtSummary.[a5]

Sheets("A").[a4:b4].Copy rSummaryFieldCopy
For i = 0 To 4
   Sheets("A").[c4:g4].Copy rSummaryFieldCopy.Offset(, 2 + 6 * i)
   rSummaryFieldCopy.Offset(-1, 2 + 6 * i).Value = i + 7 & "월"
   rSummaryFieldCopy.Offset(-1, 2 + 6 * i).Resize(, 5).Merge
   rSummaryFieldCopy.Offset(-1, 7 + 6 * i).Value = i + 7 & "월 요약"
   rSummaryFieldCopy.Offset(-1, 7 + 6 * i).Resize(2).Merge
Next

rSummaryFieldCopy.CurrentRegion.Select
With Selection
   .HorizontalAlignment = xlCenter
   .VerticalAlignment = xlCenter
End With

For i = 3 To ThisWorkbook.Sheets.Count
   Sheets(i).[a1].End(xlDown).Offset(1).Resize(3, 2).Copy shtSummary.[a1000].End(xlUp).Offset(1)
   Set rFieldnameTarget = Range(Sheets(i).[a1].End(xlDown).Offset(, 2), Sheets(i).Range("ac7").End(xlToLeft).End(xlUp).Offset(-1))
      For Each cs In rFieldnameSummary
         For Each ct In rFieldnameTarget
            If IIf(cs.Cells(, 0) <> "", cs.End(xlToLeft).Cells(0) & cs, cs.Cells(0) & cs) = IIf(ct.Cells(, 0) <> "", ct.End(xlToLeft).Cells(0) & ct, ct.Cells(0) & ct) Then
               ct.Offset(1).Resize(3).Copy cs.Offset(1 + 3 * (i - 3)).Resize(3)
               Exit For
            End If
         Next
      Next
Next

End Sub

프로필 이미지
2015.04.24 18:32:28 *.37.252.62

데이터 없는 열 제거하는 코딩만 추가하면 끝

 

Sub 데이터시트_통합하기()

Dim sSummary As Sheets
Dim rFieldnameSummary As Range
Dim rFieldnameTarget As Range

Sheets.Add
Sheets(1).Name = "Summary_report"

Set shtSummary = ThisWorkbook.Sheets("Summary_report")
Set rFieldnameSummary = shtSummary.[c5:af5]
Set rSummaryFieldCopy = shtSummary.[a5]

Sheets("A").[a4:b4].Copy rSummaryFieldCopy
For i = 0 To 4
   Sheets("A").[c4:g4].Copy rSummaryFieldCopy.Offset(, 2 + 6 * i)
   rSummaryFieldCopy.Offset(-1, 2 + 6 * i).Value = i + 7 & "월"
   rSummaryFieldCopy.Offset(-1, 2 + 6 * i).Resize(, 5).Merge
   rSummaryFieldCopy.Offset(-1, 7 + 6 * i).Value = i + 7 & "월 요약"
   rSummaryFieldCopy.Offset(-1, 7 + 6 * i).Resize(2).Merge
Next

rSummaryFieldCopy.CurrentRegion.Select
With Selection
   .HorizontalAlignment = xlCenter
   .VerticalAlignment = xlCenter
End With

For i = 3 To ThisWorkbook.Sheets.Count
   Sheets(i).[a1].End(xlDown).Offset(1).Resize(3, 2).Copy shtSummary.[a1000].End(xlUp).Offset(1)
   Set rFieldnameTarget = Range(Sheets(i).[a1].End(xlDown).Offset(, 2), Sheets(i).Range("ac7").End(xlToLeft).End(xlUp).Offset(-1))
   For Each cs In rFieldnameSummary
      For Each ct In rFieldnameTarget
         If IIf(cs.Cells(, 0) = "" Or cs = 1 Or cs = "", cs.Cells(0) & cs, cs.End(xlToLeft).Cells(0) & cs) = IIf(ct.Cells(, 0) = "" Or ct = 1 Or ct = "", ct.Cells(0) & ct, ct.End(xlToLeft).Cells(0) & ct) Then
            ct.Offset(1).Resize(3).Copy cs.Offset(1 + 3 * (i - 3)).Resize(3)
            Exit For
         End If
      Next
   Next
Next

End Sub

프로필 이미지
2015.04.28 08:08:05 *.37.252.62

2014-11- 3week

vba programing

 

Option Explicit

Sub mergeSheets()
Dim shtReport As Worksheet
Dim shtX As Worksheet
Dim rHeadRow As Range  ' 변수이름으로 어떤 범위를 나타내는지 알기 쉽게!
Dim sShtToWork As Variant
Dim shtSource As Worksheet
Dim rToCopy As Range
Const PART_NAME As String = "Part Name"   ' constant 변수 이용!
Const REPORT_NAME As String = "TotalReport"
Dim varX As Variant

On Error Resume Next


sShtToWork = Array("A", "B", "C", "D", "E")  ' arrary 활용해서 배열 설정, 여기서 sShtToWork는 Variant 이므로 개체가 아니기 때문에 set 사용 안함
Application.DisplayAlerts = False
Worksheets(REPORT_NAME).Delete
Application.DisplayAlerts = True
Set shtReport = Worksheets.Add ' 시트를 추가하면서 바로 개체로 넣기
Set rHeadRow = Me.Range("tablestart_77").CurrentRegion.Rows(1).Resize(2)  ' me는 caller가 있는 시트인가??, CurrentRegion.Rows(1).Resize(2) 현재 영역 범위 잡고 첫번째 행rows(1), 그리고 Resize(2) 두행 확장
With shtReport
    .Name = "TotalReport"
    rHeadRow.Copy .Range("A1")
    For Each varX In sShtToWork
        Set shtSource = Worksheets(varX)   
        If shtSource.Range("A1") = PART_NAME Then
            Set rToCopy = shtSource.Range("A1").CurrentRegion
        Else
            Set rToCopy = shtSource.Range("A1").End(xlDown).CurrentRegion
        End If
        Set rToCopy = rToCopy.Offset(2).Resize(rToCopy.Rows.Count - 2) ' 아래로 두칸 이동!
        rToCopy.Copy .Range("B10000").End(xlUp).Offset(1, -1)
    Next
    With .UsedRange
        .Font.Name = "맑은 고딕"
        .Font.Size = 10
        .Borders.LineStyle = Excel.XlLineStyle.xlContinuous
        .Columns.AutoFit
    End With
End With

End Sub

프로필 이미지
2015.04.30 08:06:10 *.37.252.62

Sub mergeSheetsNew()
Dim shtReport As Worksheet
Dim shtX As Worksheet
Dim rHeadRow As Range
Dim sShtToWork As Variant
Dim iMon As Integer
Dim iPart As Integer
Dim rMonStart As Range
Dim oMonthes As New Collection
Dim rX As Range
Dim rPaste As Range
Dim rBody As Range
Dim sMonth As String
Dim iNum As Integer
Dim rCurrentCell As Range
Dim rSum As Range
Dim iNextItem As Variant

Const iStartMonth As Integer = 7
Const iEndMonth As Integer = 11
Const iNumPerEachMonth As Integer = 7
Const PART_NAME As String = "Part Name"
Const REPORT_NAME As String = "TotalReport"

프로필 이미지
2015.04.30 08:07:11 *.37.252.62

On Error Resume Next

sShtToWork = Array("A", "B", "C", "D", "E")
Application.DisplayAlerts = False
Worksheets(REPORT_NAME).Delete
Application.DisplayAlerts = True

 

Set shtReport = Worksheets.Add
With shtReport
    .Name = "TotalReport"
    .Range("A2") = PART_NAME
    .Range("B2") = "구분"
    Set rMonStart = .Range("B2")
    For iMon = iStartMonth To iEndMonth
        Set rMonStart = rMonStart.Offset(, iPart)
        rMonStart.Offset(-1, 1) = iMon & "월"
        rMonStart.Offset(-1, 1).Resize(, iNumPerEachMonth).Merge
        rMonStart.Offset(-1, 1).HorizontalAlignment = xlCenter
        oMonthes.Add rMonStart.Offset(-1, 1).Resize(, iNumPerEachMonth)
       
        For iPart = 1 To iNumPerEachMonth
            rMonStart.Offset(, iPart) = iPart
        Next
        rMonStart.Offset(-1, iPart) = iMon & "월 요약"
        rMonStart.Offset(-1, iPart).Resize(2).Merge
    Next
   
    For Each shtX In Worksheets
        Set rPaste = .Range("B10000").End(xlUp).Offset(1, -1)
       
        If Len(shtX.Name) = 1 Then
           
            If shtX.Range("A1") = PART_NAME Then
                Set rBody = shtX.Range("A1").CurrentRegion
            Else
                Set rBody = shtX.Range("A1").End(xlDown).CurrentRegion
            End If
            Set rHeadRow = rBody.Rows(2)
            Set rBody = rBody.Offset(2).Resize(rBody.Rows.Count - 2)
            rBody.Columns(1).Resize(, 2).Copy rPaste
 
           For Each rX In rHeadRow.Cells
            
               If rX.Value >= 1 And rX.Value <= 12 Then
                    iNextItem = iNextItem + 1
                    iNum = rX
                    sMonth = rX.Offset(-1).MergeArea.Cells(1)

                    Set rCurrentCell = getCurrentBlock(iNum, sMonth, oMonthes)
                    Set rCurrentCell = Intersect(rPaste.MergeArea.EntireRow, rCurrentCell.EntireColumn)
                    rCurrentCell.Value = rX.Offset(1).Resize(3).Value
                   
                End If
                If rX.MergeCells Then

                    Set rSum = Intersect(rCurrentCell.EntireColumn, .Rows(2))
                    Set rSum = rSum.End(xlToRight).Offset(, 1).EntireColumn
                    Intersect(rCurrentCell.EntireRow, rSum).Value = rX.Offset(1).Resize(3).Value
                End If
            Next
        End If
    Next

프로필 이미지
2015.04.30 08:07:28 *.37.252.62

If MsgBox("빈열을 삭제하시겠습니까?", vbYesNo, "빈열삭제") = vbYes Then
        Dim rAll As Range
        Set rAll = .Range("A1").CurrentRegion
        Dim iCol As Integer
        For iCol = rAll.Columns.Count To 1 Step -1
            If Application.CountA(rAll.Columns(iCol)) = 1 Then
                rAll.Columns(iCol).Delete
            End If
        Next
    End If
End With
End Sub

프로필 이미지
2015.04.30 08:07:42 *.37.252.62

Function getCurrentBlock(iNum As Integer, sMon As String, oMonthes As Collection)
Dim rBlock As Range
Dim varX As Variant
Dim rX As Range

For Each varX In oMonthes
    Set rBlock = varX
    If rBlock.Cells(1) = sMon Then
        For Each rX In rBlock.Cells(1).Offset(1).Resize(, rBlock.Cells.Count).Cells
            If rX = iNum Then
                Set rBlock = rX
                GoTo X
            End If
        Next
    End If
Next
X:
Set getCurrentBlock = rBlock
End Function

프로필 이미지
2015.05.07 08:17:16 *.37.252.62

Excel Baby_100, 이름 감추기, Hide Name

 

#NAME?이라는 에러는 엑셀이 이해못하는 함수명을 입력하였을때
발생하는 에러와 같은 것..

복잡한 수식을 보호하려고 했었는데 삭제하여 버렸으니 낭패다
이 수식을 아예 보이지 않게 하는 방법은 없을까?

?ThisWorkbook.Names("작업시간")이라고 입력하고 엔터키를 치면
어떤 수식에 이름이 지어졌는지 보여준다..

thisworkbook.Names("작업시간").visible=False
라고 입력하고 엔터키를 치면 ..
이때는 ?를 앞에 붙이지 않는다

?표시를 붙이는 것은 값을 알아내기 위한 것이고
엑셀에게 일을 시키는 명령을 내릴때는 ?표시를 하지 않는다

 

프로필 이미지
2015.06.05 09:11:55 *.37.252.62

Sub Print_macro()

Dim rTbl As Range
Dim cnt, copynum As Integer
Dim Sheetsname()

Set rTbl = Range("table").CurrentRegion.Columns
cnt = rTbl.Rows.Count - 1

ReDim Sheetsname(cnt)


For i = 0 To cnt - 1
   Sheets(CStr(rTbl.Cells(2 + i, 1))).Select
   copynum = rTbl.Cells(2 + i, 5).Value
   If copynum > 0 Then
   ActiveWindow.SelectedSheets.PrintOut Copies:=copynum, Collate:=True, _
   IgnorePrintAreas:=False
   End If
Next

 

 

 

Option Explicit
Sub makeSheetToPrint()
Dim rTable As Range
Dim rRow As Range
Dim shtX As Worksheet
Dim shtPrint As Worksheet
Dim iPrintNum As Integer
Dim sShtName As String
Dim iX As Integer
           
On Error Resume Next
Set rTable = Me.Range("table").CurrentRegion
Set rTable = rTable.Offset(1).Resize(rTable.Rows.Count - 1)
Application.DisplayAlerts = False
For Each rRow In rTable.Rows
    iPrintNum = rRow.Cells(5)
    If iPrintNum > 0 Then
        Set shtX = Worksheets(rRow.Cells(1).Value)
       
        For iX = 1 To iPrintNum
            sShtName = rRow.Cells(2) & "_" & iX
            Worksheets(sShtName).Delete
            Set shtPrint = Worksheets.Add
            ActiveWindow.DisplayGridlines = False
            shtPrint.Name = sShtName
           
            shtX.Range("A1").Resize(21, 8).Copy shtPrint.Range("A1")
        Next
    End If
Next
Application.DisplayAlerts = True
End Sub

덧글 입력박스
유동형 덧글모듈

VR Left
번호 제목 글쓴이 날짜 조회 수
159 [단군13기_천복부족_출사표]일신우일신 - 망하고 망해도... [56] yoon55 2014.09.22 9625
158 [단군13기_천복부족_출사표_조이] 내가 가진 모든 힘을... [40] 조이 2014.09.21 9638
157 [단군13기_천복부족_출사표] 책으로 역사의 흐름을 알... [81] 까말 2014.09.21 9989
156 [단군13기_천복부족_출사표] 천복의 생활화 [43] molly 2014.09.21 9556
155 [단군13기_천복부족_출사표] 더 늦기전에 채워야하는건... [36] Norway 2014.09.21 9572
154 [단군 13기_천복부족_출사표]보기 좋은 것 말고, 진짜... [43] riffey 2014.09.21 9363
153 [단군13기_천복부족_출사표] 啐啄同機(줄탁동기) [50] 눈사람 2014.09.21 9495
» [단군13기_천복부족_출사표] VBA 보조필살기 만들기 ... [339] 어 부 2014.09.21 21608
151 [단군13기_천복부족_출사표] 주체적으로 내가 원하는 ... [120] 멍멍 2014.09.21 10250
150 [단군13기_천복부족_출사표] 나를 위한 시간 [24] KOKARU 2014.09.21 9272
149 [단군 12기_천복부족_출사표] 존재했으나 보이지 않았... [47] 미련곰탱이 2014.05.19 9437
148 [단군 12기_천복부족_출사표] 새벽이 탄생시킨 유아대... [120] 봄꽃 2014.05.19 10274
147 ( 단군12기 천복부족 출사표) 하루, 나를 세운다. [76] Norway 2014.05.19 9976
146 [단군 12기_천복부족_출사표] 매일매일 정성을 다해 ... [36] 박지선 2014.05.18 9280
145 [단군 12기_천복부족_출사표] 나의 하루는 22시간이다... [101] Will(김인성) 2014.05.18 10201
144 [단군 12기_천복부족_출사표] 충만한 하루를 위하여 ... [83] 이주희(Judy) 2014.05.18 10067
143 [단군 12기 천복부족- 출사표-] 천복 발견! [100] 삐리 2014.05.18 10146
142 [단군12기_천복부족_출사표] 내 삶의 주인공으로 우뚝... [96] 김랑 2014.05.18 9423
141 [단군12기_천복부족_출사표] 변화시킬 수 있는 유일한... [113] 글쓴이 2014.05.17 10024
140 [단군12기_천복부족_출사표] 즐겁게 [110] mag. 2014.05.14 10176