Daily Life of BlueRose
728x90

컴퓨터 & 코딩 공부/엑셀 & VBA 20

엑셀 셀 합치기 일괄 적용 및 해제 방법(VBA 활용)

여는 글엑셀에서 가장 아쉬운 기능 중 하나는 동일한 내용의 셀에 대해 묶어주고, 풀어주는 기능이 없다는 점입니다. 물론 엑셀을 데이터 처리용으로 사용한다면 한 줄마다 각각 데이터가 있어야 하는게 맞지만, 우리의 회사는 그렇게 호락호락하지 않습니다... 동일한 사람에 대해 여러 개의 데이터가 있다면 왜 이렇게 보기 어렵게 해놨냐고 당장 과장님께 불려가서 잔소리를 듣게 될 수도 있습니다. 때문에, 보고서를 보는 분들께서 보기 편하도록 같은 값끼리 묶는 경우가 생각보다 많아서 자주 사용하게 됩니다. 그런데, 이러한 셀합치기를 매번 일일이 손으로 하기는 굉장히 힘들죠. 하지만 이러한 기능을 코드로 작성하여, 개인용 매크로 통합 문서에 저장해두면 필요할 때마다 범위를 선택하고 매크로만 작동시키면 되서 상당히 편해..

VBA 매크로를 문서마다 재활용하는 방법(Personal 파일 활용)

여는글엑셀을 활용하여 매크로를 만들다보니, 문득 공통적으로 사용하는 매크로를 어딘가에 등록해놓고 그때그때 버튼만 눌러서 활용할 수 없을까 라는 생각이었습니다. VBA에는 이러한 상황에 대비하여, 매크로를 저장하고 모든 문서에서 공통적으로 활용할 수 있도록 기능을 제공하고 있습니다. 여러분들께서 매크로를 기록할 때, 매크로 저장 위치로 뜨는 ‘개인용 매크로 통합 문서’가 바로 그 기능입니다. 참고로 이 개인용 매크로 통합 문서는 PC의 특정 위치에 'PERSONAL.XLSB'로 저장됩니다.   개인적으로는 개인용 매크로 통합 문서를 활용하면서 엑셀의 활용성이 한 단계 업그레이드 되었습니다. 언제든 불러올 수 있는 매크로 파일 덕분에, Merge 일괄 적용, 해제처럼 자주 사용되지만 엑셀에서 기본제공하지는 ..

엑셀 인쇄기능 정리 - 한 페이지에 인쇄, 인쇄영역 세팅, 제목 줄 반복하기

여는 글엑셀로 대량의 데이터를 받다보면, 이 데이터를 가공하여 한글을 통해 보고서 양식으로 재작성하기보다는 차라리 엑셀 그 자체를 보고서로 활용하는게 낫을때가 있습니다. 그러다보면 다소 글자크기가 작아지더라도 한페이지에 모두 표시되도록 세팅하거나, 데이터 인쇄시 제목표를 매 페이지마다 반복하여 보여주는 등 몇가지 수정이 필요할 때가 있습니다.  엑셀에서 한글로 데이터를 옮겨 처리하더라도 사무처리에 문제는 없지만(제목줄 반복기능 등 사용), 엑셀에서 한글로 데이터를 옮길 때 불필요한 유령글자가 가득 따라붙거나, 종종 표가 수정하기 어려울 정도로 크게 변환되는 등 한글로 옮겨가서 사용할 때 상당히 불편한 경우가 종종 있습니다. 그런데 엑셀에서 세팅하는 방법을 모르다보니 불편하더라도 한글로 옮겨가서 작성을 마..

엑셀 숫자 0표시가 안될 때 해결방법

엑셀에서 0이 표시가 되지 않아 당황하시는 분들이 종종 있더라구요. 이런 상황은 셀서식으로 인해 발생하는 문제입니다. 특히 아래 그림과 같이 홈 탭에서 "," 버튼을 눌러서 "회계"를 선택한 경우, 우측정렬, 음수 부호 분리와 함께 0을 하이픈(-)으로 변경해주는데요.  많은 사람들이 이 기능을 활용하다보니, 정작 셀서식을 활용해 본 경험이 적은 사람들은 다시 0으로 표기하는 방법을 몰라서 헤메는 경우가 종종 있습니다.이 경우, 셀서식을 원래대로 돌리려면 아래와 같이 셀서식을 숫자로 되돌려주시면 됩니다. 하단 스크린샷의 우측에서 보이는 목록이 바로 셀서식인데요. 숫자 외에도 다양한 서식들이 있고, 각 서식명칭마다 하단에 적용예시가 나와있으니 이를 참고하셔서 적용하시기 바랍니다.    참고로 셀서식은 상단..

엑셀 한 줄씩 건너서 선택하기, 홀수줄/짝수줄만 선택하기 - 야매방법

가끔 홀수줄, 짝수줄을 선택해야해서 데이터를 한 줄씩 건너서 선택해야 할 경우가 있습니다. 생각보다 자주 있는 상황이고, 한편으론 약간의 잔머리만 굴리면 크게 어려울 게 없는 상황인데, 다들 일일이 한 줄씩 복사-붙여넣기하느라 시간을 허비하시더군요. 예전에 코딩을 배울 때, 코딩 선생님께서 '숟가락으로 국물을 마시려면 앞면을 쓰는게 정석이지만, 뒷면으로도 얼마든지 맛은 볼 수 있다.'고 말씀해주시며, 다소 정석적인 방법과 멀더라도 어쨌든 구현만 가능하면 된다는 말씀을 해주셨습니다. 회사원이 정석적인 방법을 고수한다고 누가 상 줄것도 아니고 하니, 편하게 추출하는 방법을 함께 확인해봅시다. 아래와 같은 표에서 홀수조만 추출해야 하는 상황을 가정해봅시다. 방법을 개괄적으로 설명드리자면 가장 우측에 한 줄에 ..

엑셀 VBA 기본기능 정리 - 폴더 존재여부 확인 및 생성

엑셀 VBA 기본기능 정리 - 폴더 존재여부 확인 및 생성 Sub toImage() Dim 상위경로 As String Dim 하위경로 As String Dim 파일명 As String 파일명 = u1_1성명.text & Left(u1_2주민등록번호.text, 6) 상위경로 = ThisWorkbook.path & "\" & Date & "\" 하위경로 = ThisWorkbook.path & "\" & Date & "\" & 파일명 & "\" If (Dir(상위경로, vbDirectory) "") True Then MkDir 상위경로 If (Dir(하위경로, vbDirectory) "") True Then MkDir 상위경로 End Sub Dir 함수 개요 : Dir(경로, 세부 조회 조건)으로 구성되는 간..

엑셀 VBA 기본기능 정리 - 아이피 검증

엑셀 VBA 기본기능 정리 - 아이피 검증 WMI(Management Instrumentation) : 윈도우에서 관리 데이터 및 작업을 위한 인프라 개요 : WMI를 통해 컴퓨터 정보를 불러오는 쿼리를 실행하여 그 중 IP값을 추출하는 코드이나, WMI 개체가 이해하기 어려운 별도 시스템이므로, 이해보단 활용에 주안점을 두는 것이 좋겠다. Sub 아이피검증() 'IP검증 Dim objWMI As Object Dim objQuery As Object Dim objQueryItem As Object Dim vIpAddress Dim i As Long i = 1 'Create WMI Object Set objWMI = GetObject("winmgmts:\\.\root\cimv2") 'Query WMI Se..

엑셀 VBA 기본기능 정리 - 파일 조작

엑셀 VBA 기본기능 정리 - 파일 조작 열기 및 닫기 Dim originFile Set originFile = Application.GetOpenFilename If originFile = Empty Then Exit Sub Set originFileWB = Workbooks.Open(fileName:=originFile, Password:="p.w.") originFileWB.Close savechanges:=False 폴더 내 모든 엑셀파일을 하나로 통합하기 sub GetDataInfolder() Dim strPath As String, fName as String Dim wb As Workbook Dim rngS As Range Dim cntRows as Long sheet1.UsedRange.O..

엑셀 VBA 기본기능 정리 - ActiveX 개체 활용하기

엑셀 VBA 기본기능 정리 - ActiveX 개체 활용하기 개요 ActiveX 개체 : 버튼, 드롭박스, 라디오버튼, 레이블 등 양식을 만들고 이를 프로시저에서 변수로 불러오거나 이벤트를 정의할 수 있는 개체 주의사항 ActiveX개체와 달리 단순 양식개체는 성능은 비슷할지 모르나 매크로창에서 OLEObject로 불러올 수 없는 결정적인 차이가 있다. 개체의 하위종류에 따라(옵션버튼, 체크박스, 텍스트박스 등) 가질 수 있는 속성값이 다르므로 특정 속성값을 검색하는 for문을 만들 경우 종류별로 접근법을 달리해야 한다. ActiveX개체가 많을수록 시트를 복사하고 불러오는데 매우 느려진다. ActiveX개체를 그룹으로 묶은 경우, 값을 불러오는 경로가 달라지므로 옮길때만 그룹으로 묶고 실 사용전에는 풀어..

엑셀 VBA 기본기능 정리 - 특정 값이 배열에 포함되는지 확인하기

엑셀 VBA 기본기능 정리 - 특정 값이 배열에 포함되는지 확인하기 개요 문제의 복잡성 : 자바스크립트/C#은 각각 "ARRAY.include(A)" / "ARRAY.Exists(A)", Python에서는 "A in B"를 사용하나, C++/VBA에선 별도로 메서드가 존재하지 않아 후술될 방법을 사용해야 함 차선책 : 필터를 사용하면 간단하나, 상황에 따라 사용할 수 없는 경우에는 배열을 사용 방법 Dim c as Variant Dim rng as Range Dim arr() as Variant Set arr = {"A","B","C"} For Each c in rng For Each element In arr If element = c.Value Then IsInArray = True Exit Func..

반응형