::: 까만콩 빈이네 :::
까만콩 빈이네의 살아가는 이야기를 기록합니다
RSS
  • Home
칼이나 가위는 자르는 도구지만 그 쓰임새는 다릅니다.

4월 7 2015

칼이나 가위는 자르는 도구지만 그 쓰임새는 다릅니다.

여기 팁란에  엑셀의 초급이나 중급자분에게 업무를 진행하면서 노가다? 단순 작업을 간단하게

할 수 있도록 몇 가지 팁들을 올렸는데 댓글에서 여러 의견들이 있었습니다. 엑셀 내장함수들을

사용해서 간단하게 할 수 있는데 굳이 VBA를 사용해서 할 필요가 있느냐? 등의 의견들이지요.

칼과 가위는 자르는데 사용하는 도구이지만 사용하는 곳이 다른 법입니다. 그것을 적절하게

잘 사용하는 것이 제일 좋은 법이지만,  칼이 편할 수도 있고 가위가 편할 수도 있는 것이지요.

칼도 한쪽으로만 자를 수 있는 도가 편할 수도, 양날로 자를 수도 있는 검이 편할 수도 있지요.

수학에서 이차 방정식을 풀 때 근의 공식을 사용할 수도 있지만 미분으로 쉽게 풀 수도 있고

원과 선의 접선과 같은 문제를 풀 때  x, y 함수를 잘 사용할 수도 있지만  Sin, Cos의 특성을

응용하여 삼각함수를 이용해서 풀 수도 있는 문제지요. 닭 잡는데 소 잡는 칼을 사용하는 바보?

엑셀에서 VBA로 일정한 간격의 행과 임의의 열들을 선택하여 데이터를 추출하는 팁

http://www.clien.net/cs2/bbs/board.php?bo_table=lecture&wr_id=266554

이제 내장?함수를 응용해서 풀어봅니다. 5초의 간격마다 데이터를 가져 오는 경우입니다.

팁에 올려 놓은 엑셀에서 자료보기 편하게 번갈아 가면서 행 배경색 자동으로 넣기입니다.

http://www.clien.net/cs2/bbs/board.php?bo_table=lecture&wr_id=265108&page=4

응용해 볼까요? 만약에 제목을 빼고 5행마다 셀의 배경색을 칠하는 방법입니다.

=IF(MOD(ROW(A6)-1,5)=0,1,0)

제목행을 계산해서 현재 행의 위치를  ROW( A6)-1 을 5로 나누어서 그 나머지가 0과 같으면

지정한 색으로 색칠하고 아니면 흰색으로 배경색을 만드는 것입니다. 즉 5의 배수마다 각행의

색상을 칠하는 것이지요. 조건부 서식을 복사해서 데이터가 있는 전체 셀에  붙여넣기합니다.

이제 데이터를 추출하는 방법입니다. 데이터 > 필터에서 셀 배경색으로 필터를 선택합니다.
(PC에서는 홈>정렬 및 필터 > 필터 > 색기준 필터이군요. 전 Mac사용자라서 …)
데이터 전체를 선택하고 위의 셀 배경색으로 필터를 하면 조건부 서식에서 지정된 배경색만
필터링해서 보여줍니다. 그리고 추출할 열만 남기고 나머지 열을 숨깁니다.

F5를 눌러 옵션에서 화면에 보이는 셀만 복사하기를 선택합니다.

http://www.be4u.kr/wp/?p=1259

자! 우리가  VBA를 이용해서 일정행과 임의의 열들을 추출하는 법과 엑셀의 내장함수들을

응용해서 추출한 결과가 똑같은 것을 알 수 있습니다. 칼을 사용하느냐 가위를 사용하느냐?

사용자의 편한 방법으로 내가 필요한 데이터를 빠른 시간에 추출하는 것이라고 생각합니다.

가끔씩 오는 택배 박스나 같이 온 편지를 열 때는 손이가 가위, 칼 어느 것으로나 열면! 되지만
식당에서 매일 하는 깍두기를 썰 때는 큰 칼을 퀼트할 때 천을 자를 때는 재단용 가위를 사용하는
것이 더 합당하다고 봅니다. 그 하는 일에 적당한 도구를 사용하는 것이지요.

즉 임시적으로 처리할 때는 어떻게든 빨리 처리되는 방법으로 하면 되지만 그 일이 정형화되면
도구를 사용해고 일의 처리 방법을 절차로 만들어 프로세스화 하자는 것입니다.

결론?

칼과 가위 녹슬지 않도록 잘 씻어서 기름칠 잘해 둡시다. 그리고 서로 서로 나누며 삽시다!

By vinipapa • 무른모 • 0 • Tags: 도구, 응용, 최적화, 칼과 가위

20150406105646

4월 6 2015

엑셀(EXCEL) – 일정한 간격의 행과 임의의 열들을 추출하는 법

 

http://www.clien.net/cs2/bbs/board.php?bo_table=lecture&wr_id=266028&page=2&sca=&sfl=&stx=&spt=0&page=2&comment_page=last&cwin=#c_266501

데이터에서 일정한 간격의 행과 또 다른 일정 간격의 열을 추출하는 팁을 올렸는데 댓글에서 초코코님이
일정한 간격의 행에서 랜덤한 열들을 추출할 수 없는지가 문의가 있었습니다. 쉽게 생각해서 접근했는데
Listbox의 열의 한계가 10개 임으로 Offset함수를 사용할 경우 List중간 중간이 비어서 보기도 싫고
내용도 많이 들어가지 못해서 이 랜덤한 열을 어떻게 처리할 지 고민하다가 10년은 늙은 듯 해요… ㅠㅠ

자! 아래 내용 설명 들어갑니다. 코드는 짧지만 코드 처리 부분이 너무 힘들었어요.

우선 개발도구> Visual Basic 선택하시고 UserForm1을 하나 만듭니다.
Listbox1, Listbox2, Textbox1, Commandbutton1, Commandbutton2, Label1을 UserForm1에 만듭니다.
각각의 내용에 아래 함수 붙여 넣으시고 실행하시면 됩니다. 자료는 INT(RAND()*10000)으로 생성함.

Listbox1의 속성창에서 MultiSelect 는 fmMultiSelectMulti로 선택합니다. 다중 선택을 위해서입니다.
Listbox2의 ColumnCount는 10으로 최대한 주고, ColumnWidths는 60pt로 전체를 다 조정합니다.
Option Explicit

‘ 아래 함수에서 참조할 내용을 public으로 정의해서 사용합니다.
Public row_cnt As Integer, col_cnt As Integer, sel_cnt As Integer

‘ 사용자 정의폼을 초기화 합니다.
Private Sub UserForm_Initialize()

Dim i As Integer
Dim rng As Range

Sheets(“Data”).Select

‘ 데이터가 들어간 행의 갯수를 구함
row_cnt = Application.CountA(Range(“A1”, Range(“A1”).End(xlDown)))

‘ 데이터가 들어간 열의 갯수를 구함
col_cnt = Application.CountA(Range(“A1”, Range(“A1”).End(xlToRight)))

‘ Listbox1에 추출할 데이터 내용 추가
For i = 0 To col_cnt – 1

‘ A1셀에서 오른쪽으로 전체 열의 수만큼 이동하면서 추가
‘ 추출할 내용을 Listbox1에 추가하는 루틴임.
For Each rng In Range(“A1”).Offset(0, i)

UserForm1.ListBox1.AddItem rng

Next rng

Next i

‘ Time은 항상 선택되므로 선택을 기본으로 함
UserForm1.ListBox1.Selected(0) = True

End Sub

‘ Data 추출 루틴입니다.
Private Sub CommandButton1_Click()

Dim i As Integer, j As Integer, k As Integer, ccnt As Integer, runit As Integer

runit = UserForm1.TextBox1.Value

i = 0
j = 0
k = 0
ccnt = 0 ‘ 리스트 박스에 나타날 위치를 정해주는 변수, 중간에 값들이 비어서 offset함수만 사용하면
‘ 데이터가 리스트 박스 중간중간이 비어서 보기 싫고 Listbox가 10열밖에 Data를 넣을 수 없어
‘ 효율이 떨어짐
sel_cnt = 0 ‘ Listbox1에 선택되어진 리스트의 갯수

‘속도를 빠르게 하기 위해서 업데이트를 하지 않고 추출 진행
Application.ScreenUpdating = False

For i = 0 To UserForm1.ListBox1.ListCount – 1

If UserForm1.ListBox1.Selected(i) = True Then

sel_cnt = sel_cnt + 1 ‘ 선택된 리스트의 갯수를 확인, Listbox2의 위치 선정을 위해 계산

End If

Next i

‘ 선택한 데이터가 10개가 넘으면 경고
If sel_cnt > 10 Then
MsgBox “선택한 데이터가 10개가 넘어요”

Exit Sub
End If

UserForm1.ListBox2.Clear ‘ 기존 추출된 Data 삭제

UserForm1.ListBox2.AddItem “” ‘ 추출할 데이터 제목 최상단에 추가

‘ 제일 힘든 루틴이었어요. Listbox 열의 크기가 10개 밖에 넣질 못해서 그냥 offset로 데이터를 추출할 수는 있지만
‘ 선택되지 않은 데이터의 열들이 비고 10이 넘어가는 데이터는 추출을 하지 못해서 로직 짜느라 10년은 늙은 듯 …
‘ 더욱이 추출하는 데이터가 랜덤이라 수열을 만들 수도 없고 해서 ㅠㅠ

For j = 0 To UserForm1.ListBox1.ListCount – 1

If UserForm1.ListBox1.Selected(j) = True Then

ccnt = (ccnt Mod sel_cnt) + 1 ‘ 핵심 루틴, 잘 해석해서 보세요

UserForm1.ListBox2.List(0, ccnt – 1) = Range(“A1”).Offset(0, j)

End If

Next j

‘ 데이터를 추출하는 루틴입니다. 위는 제목 행을 추출하는 루틴이구요.
‘ 첫 행을 임의로 추가 추출하고 싶으시면 runit – 1 부분을 0으로 대치하시면 됩니다.
For i = runit – 1 To row_cnt Step runit

UserForm1.ListBox2.AddItem “”

For j = 0 To UserForm1.ListBox1.ListCount – 1

If UserForm1.ListBox1.Selected(j) = True Then

ccnt = (ccnt Mod sel_cnt) + 1 ‘ 핵심 루틴, 잘 해석해서 보세요

UserForm1.ListBox2.List(k + 1, ccnt – 1) = Range(“A2”).Offset(i, j)

End If

Next j

k = k + 1

Next i

End Sub

‘ 추출된 데이터를 시트에 뿌려줍니다.
Private Sub CommandButton2_Click()

Dim i As Integer, j As Integer

i = 0
j = 0

‘ 속도를 빠르게 하기 위해서 업데이트 제한, 아래를 주석 처리하면 데이터가 넣어지는 것이 보임
Application.ScreenUpdating = False

‘ 추출할 데이트를 담을 시트 선택
Sheets(“ExtItem”).Select

‘ 기존 추출된 데이터 삭제
Range(“A1”, Range(“A1”).End(xlToRight)).End(xlDown).Clear

‘ 추출한 데이터 시트에 넣기, 자주 사용하는 루틴이므로 기억해 두면 좋음
For i = 0 To UserForm1.ListBox2.ListCount – 1

For j = 0 To UserForm1.ListBox2.ColumnCount – 1

Cells(i + 1, j + 1) = UserForm1.ListBox2.List(i, j)

Next j

Next i

‘ 짠~하고 업데이트된 데이터 보이기
Application.ScreenUpdating = True

Unload UserForm1

End Sub
첨부자료)  20150406-일정행-임의열 데이터 추출

전체 소스는 위 내용이므로 직접 실습하시면서 만들어 보시는 것도 실력향상에 도움이 될 것 같네요.

By vinipapa • 무른모 • 0 • Tags: Excel, VBA, 데이터 추출, 엑셀, 일정행, 임의열

unit_data_ext

4월 2 2015

엑셀(EXCEL) – 가로 세로로 구성된 데이터에서 일정 간격의 행, 열 데이터 추출하기

 

20150402-일정 행열마다 데이터 추출 <— 첨부 화일

엑셀을 다루고 계시지만 초보자분들께서는 아직도 계산기능으로만 사용하시고
고급기능을 잘 모르시니 많은 데이터를 다루실 때는 많은 시간을 들이시는가 봅니다.
대부분이 표에다가 산술식으로 자동계산기를 이용하시고 조금 더 발전하시면
데이터 검색 함수를 응용해서 잘 다루시는 것 같군요.

아래에다 실무에 필요한 팁을 올렸는데 처음 데이터를 구성(엑셀에 입력)하실 때
잘못 입력해 놓으면 데이터의 활용이 상당히 어렵게 됩니다. 보통 전임자가 생각없이
표나 시트를 만들어 계속 사용하다 데이터가 많이 쌓이면 고칠 엄두가 나질 않아서
그대로 사용하시는 것 같더군요.

아래 팁의 댓글에서 일정하게 반복되는 행열에서 데이터를 추출하시는 분이 계시는데
추출 방법을 잘 몰라서 업무에 애로가 많으신가 봅니다. 별로 어려운게 아니라서 짬을 내어
VBA로 만들었어요. 참고가 되기를 바랍니다.

1. 이번에는 동적 이름을 이용하지 않고 엑셀의 기본 기능을 이용하여 검색할 영역을 지정
떨어지지 않은 특정영역의 데이터 숫자를 세는 방법으로 A2에서 아래, 오른쪽 끝까지의
데이터 숫자를 세어 줍니다.

row_cnt = Application.CountA(Range(“A2”, Range(“A2”).End(xlDown)))
col_cnt = Application.CountA(Range(“A2”, Range(“A2”).End(xlToRight)))

2. 서브루틴을 사용하지 않고 바로 한 프로시져에 넣어도 되는데 나중을 고려해서
서브루틴으로 사용했어요. 보시면 아시겠지만 간단합니다. 행열의 데이터 크기를 알려주고
행열의 단위를 알려주면 루프를 돌면서 데이터를 추출해서 Listbox에 넣어 줍니다.

속성창에서 Listbox의 Column Count는 2로 해 줍니다.

k = 0

‘ 반복 검색이 필요하므로 리스트박스를 클리어 합니다.
UserForm1.ListBox1.Clear

For i = runit To rcnt Step runit

For j = cunit To ccnt Step cunit

UserForm1.ListBox1.AddItem “(” & i & “x” & j & “)”

UserForm1.ListBox1.List(k, 1) = Cells(i, j).Value

‘ 행을 추가해야 하므로
k = k + 1

Next j

Next i

3. Listbox에 추출된 데이터를 엑셀 시트로 보내는 서브루틴입니다.

Sheets(“Extract”).Select

‘ 기존 데이터를 지워 줍니다.
Range(“A1”, Range(“B1”).End(xlDown)).Clear

Application.ScreenUpdating = False

With UserForm1.ListBox1

For i = 0 To .ListCount – 1

Cells(j + 1, 1) = .List(i, 0)
Cells(j + 1, 2) = .List(i, 1)

j = j + 1

Next i

End With

간단하게 추출할 행과 열을 넣고 검색, 추출하면 됩니다.

엑셀 자료는 제 블로그에 올립니다.

By vinipapa • 무른모 • 0 • Tags: VBA, 데이터 추출, 엑셀, 일정 행열

«< 38 39 40 41 42 >»

카테고리

  • 매킨토시 (261)
    • 굳은모 (73)
    • 무른모 (194)
  • 빈이네 (304)
    • 가족들 (108)
    • 까만콩 (60)
    • 엄마아빠 (131)
  • 잡동사니 (175)
    • 수다떨기 (37)
    • 정 보 (127)
    • 책읽기 (11)

그 밖의 기능

  • 로그인
  • 글 RSS
  • 댓글 RSS
  • WordPress.org

태그

AirPlay AirPrint Apple BootCamp bundle Database Design Dock Dropbox Edit Event Excel free iPad iPhone iTunes Limitted Free Mac Macbook Mac Bundle MacJournal Mac OSX Macupdate MobileMe OCR Pebble safari Sale share Snow Leopard software Tip tweet Twitter Update Windows 구입 나들이 맥 무료 빈이 업데이트 엑셀 엑셀(EXCEL) 팁
  • 29년 11개월 회사를 그만 두면서…
  • 2024 윤석열 탄핵 집회 참석
  • 맥 마이그레이션 중…
  • 동백
  • 같은 나무에 다른 색 잎 들

↑

© ::: 까만콩 빈이네 ::: 2026
Powered by WordPress • Themify WordPress Themes