안녕하세요. 구스입니다. 이번 글에서는 엑셀 매크로에서 그래프/차트 만드는 방법을 알아보고자 합니다. 엑셀은 보고서를 만들 때 많이 쓰이다 보니 차트 및 그래프 생성하는 경우가 많은데요. 엑셀 VBA 매크로를 통해서 차트를 생성하는 방법을 알고 이를 자동화 한다면 사용자는 좀더 효율적으로 업무를 진행할 수 있을거라고 생각합니다. 일단 차트를 생성하기 위해서는 차트에 들어갈 자료가 있어야 겠죠. 자동화 부분으로 자료도 생성이 되겠지만, 여기 글에서는 임의적으로 넣어놓은 데이터를 차트/그래프로 만들어 보도록 하겠습니다. 이 글에서 테스트할 자료는 아래와 같습니다.중간고사 혹은 기말고사 시험 성적인데요. 실질적으로 Range의 B2부터 C6까지 데이터가 들어가 있습니다. 그럼 그래프/차트를 만드는 방법을 알아..
동일한 개체에 여러 함수와 속성을 적용해야 하는 경우 어떻게 해야 할까요? 일반적으로 동일한 개체를 변수로 잡아서 그 변수를 통해서 함수와 속성을 호출하겠죠. 예를 하나 들어볼까요.Dim range as Range range = Range("A1") range.Value = 5000 range.NumberFormat = "#,###" range.블라블라1 range.블라블라2 대부분의 위와 같은 방식을 많이 사용할 것입니다. 위의 코드는 Range("A1")의 속성을 변경할 때 계속 range라는 개체를 불러와야 한다는 단점이 있습니다.range와 관련된 처리를 100개를 한다면 range를 100개 적어야 합니다. 하지만 VBA에서는 하나의 개체에 여러 속성 혹은 함수를 호출할 때 유용하게 사용하는 구..
안녕하세요. 구스입니다. 이번 글에서는 지난 글에서 이용한 현재 시간 및 오늘 날짜 가져오는 방법을 조금 더 응용하여 특정 일자와 시간을 기점으로 과거와 현재의 날짜를 계산하는 방법을 알아보도록 하겠습니다. 오늘 알아볼 함수는 바로 DateAdd 함수입니다. DateAdd 함수는 특정 시점을 기준으로 년, 월, 일, 시간, 분, 초를 기준으로 시간을 더하거나 뺄 수 있는 함수입니다. 잘 모르시겠다 구요. 그럼 먼저 사용 결과를 한번 보시죠. DateAdd를 이용하여 년, 월, 일을 현재 시점에서 2를 더한 결과를 보았습니다. 첫번째 결과는 2년 후인 2017년도 11월 19일이, 두번째 결과는 2달 후인 2016년 1월 19일이, 세번째 결과는 2일 후인 2015년 11월 21일이 나왔습니다. 대충 감이..
안녕하세요. 구스입니다. 오늘은 오랜만에 엑셀 VBA 매크로 프로그래밍 팁을 알려드릴까 해요. 너무 엑셀부분을 안 했더니 기존에 생각했던 것과는 다르게 다른 분야의 내용만 올라와서 본질로 돌아가보고자 합니다. 오늘 알아볼 내용은 엑셀 VBA 프로그래밍에서 오늘 날짜(언제든지 가능)과 현재 시간을 가져오는 방법에 대해서 논할 까 합니다. 보고서를 쓰거나 할 때 작성 시간에 대해서 넣어야 하는 경우가 많자 나요. 생각보다 유용한 함수들 입니다. VBA에서 오늘 날짜와, 현재 시간을 반환하는 함수는Date 함수이고, 현재 시간을 가져오는 함수는 Time 함수입니다. 오늘 날짜와 현재 시간을 받아오는 함수는 Now 함수가 있습니다. Date : 오늘 날짜를 반환하는 함수 Time : 현재 시간을 반환하는 함수 ..
안녕하세요. 구스입니다.오랜만에 엑셀 매크로 프로그래밍에 대한 내용을 업데이트 하네요. 오늘 공부할 내용은 통합문서(Workbook)를 엑셀 매크로 VBA에서 어떻게 다루는지를 살펴보도록 하겠습니다. 기본적으로 VBA에서 엑셀을 다루기 위해서 알아야 하는 개체(오브젝트)들이 있습니다. VBA를 제대로 다루기 위해서 사용자가 알아야 하는 오브젝트는 Application, Workbook, Worksheet, Range 오브젝트로 구분할 수 있습니다. 오늘은 여기에서 Workbook에 대해서 이야기 해볼까 합니다. 통합문서는 엑셀을 켰을 때 나오는 전체 화면자체가 Workbook이라고 할 수 있습니다. 아래의 화면을 보게 되면 통합 문서1 - Excel이라는거 보이시죠. 이 부분이 바로 Workbook 오브..
안녕하세요. 구스입니다.오늘 글에서는 엑셀 매크로 VBA 프로그래밍을 이용하여 행과 열을 추가하고 삭제하는 방법에 대해서 알아볼까 합니다. 매크로에서 엑셀의 행을 추가 및 삭제하는데는 Rows를 열을 추가/삭제하는데는 Column이 이용이 됩니다.사용법은 아래와 같은데요. 행 추가 및 삭제Rows(자신이 추가/삭제를 원하는 행번호).Insert() Rows(자신이 추가/삭제를 원하는 행번호).Delete() 열 추가 및 삭제Columns(자신이 추가/삭제를 원하는 열값).Insert() Columns(자신이 추가/삭제를 원하는 열값).Delete() 추가/삭제를 위한 부분이 행인 경우는 숫자를, 열인 경우는 문자열을 넣어주시면 됩니다. 아래의 그림 처럼 기존의 엑셀의 행은 숫자로, 열은 문자로 되어 있기..
지난 글에서 엑셀 매크로 프로그래밍을 통해서 로또 프로그램을 만들어 보았습니다. 하지만 로또 프로그램에 어마무시한 버그가 있었죠. 아! 그 글을 못보셨다구요. 그럼 아래의 링크를 참조하세요. 2015/10/25 - [IT Info/Excel And Macro] - 엑셀 매크로 프로그래밍 - RND 함수 이용한 로또 프로그램 이번 글에서는 위의 로또 프로그램의 버그인 중복 수를 없애는 방법에 대해서 알아볼까 합니다.중복을 없애기 위해서 Collection이라는 개념을 사용해 보았는데요. Collection(이하 콜렉션)이란 동일한 데이터 타입의 데이터를 관리하고 저장하기 위해서 사용되는 자료구조 중 하나라고 보면 됩니다.콜렉션은 다음에 시간을 가지고 추가적으로 설명을 드리도록 할께요. 콜렉션에 대해서 지금..
안녕하세요. 진지한 엑셀 매크로 프로그래밍 강좌를 진행하고 있는 구스입니다. 이번 글에서는 간단한 로또 프로그램을 VBA를 통해서 만들어 볼까 합니다. 로또 프로그램을 만드는데 가장 중요한 포인트는 랜덤수를 생성하는 것입니다. 한국 로또는 1부터 45까지의 값을 가지는 6개의 묶음을 통해서 로또의 숫자가 정해지게 되죠. 따라서 1-45까지의 랜덤수를 만드는 것이 로또 프로그램을 만드는데 가장 중요한 포인트라할 수 있겠습니다. 엑셀 매크로 프로그래밍에서 랜덤수를 만드는 함수는 RND 함수입니다. Rnd 함수는 아래와 같은 기능을 수행합니다. Single 값으로 이루어진 난수를 만드는 것이죠. 로또 프로그램은 아무런 난수만 만들면 안되겠죠. 1부터 45사이의 값만을 가진 난수를 만들어야 합니다. 특정 범위를..
배열이란 무엇일까요? 배열은 변수를 여러개 모아놓은 데이터 타입을 의미합니다. 변수는 하나의 데이터타입의 하나의 값만을 저장할 수 있는 공간이지요. 배열은 동일한 데이터 타입을 여러개 저장할 수 있는 공간이라고 보면 됩니다. 예를 들어 문자열 데이터를 3개 저장하고자 한다면 아래와 같이 변수를 사용할 수 있습니다. Dim strValue1 As String Dim strValue2 As String Dim strValue3 As String 3개정도는 저장하는데 문제가 없을것 같습니다. 하지만 저장해야 하는 데이터가 10000개라면 어떻게 될까요? 변수를 10000개 선언해야 할까요. 배열이라니, 배열이라니!! 그럼 배열을 만드는 방법을 알아볼까요. 배열을 만드는 방법 또한 Dim을 통해서 합니다. 방법..
엑셀을 사용할 때 여러개의 셀(Cell)을 하나로 병합(Merge) 하는 경우가 많습니다.이 글에서는 이러한 병합을 엑셀 매크로 프로그래밍 상에서 하는 방법에 대해서 배워볼까 합니다. 병합하는 방법은 생각보다 간단합니다. 바로 Range 개체의 Merge 함수를 이용하는 것인데요. Merge 함수 호출 이전에 Range의 매개변수에 자신이 병합을 원하는 Cell의 범위를 지정해 주면 됩니다. A1부터 A3까지 병합을 원하면 "A1:A3"를. A1부터 E5까지 병합을 원하면 "A1:E5"라는 값을 Range 개체에 전달하면되요.그럼 코드를 살펴볼까요. 코드 작성은 나를 따라하라~! 코드는 아래와 같습니다. '여러개의 셀을 Mergeg한다.Sub MergeCells() 'Cells들을 Merge하기 Rang..
안녕하세요. 엑셀을 알려주는 구스입니다.오늘 글에서는 엑셀 매크로 VBA를 통해서 For문과 InputBox를 이용하여 원하는 열에 값을 넣는 코드를 배워볼까 합니다. 엑셀 매크로를 활용하여 자동으로 값이 사용자가 원하는 위치에 들어가는 코드인 셈입니다. 오늘 배울 코드는 아래와 같습니다. '1-1000까지 사용자가 원하는 열에 값넣기'이 함수는 For를 이용하였음 Sub PrintValuesUsingFor() Dim column As String column = InputBox("입력할 열의 값을 써주세요 (1-10) !", "열의 값 받기") Dim columnIndex As Integer columnIndex = CInt(column) For i = 1 To 1000 Cells(i, columnIn..
엑셀 매크로를 활용하여 새로운 엑셀 파일을 생성하여, 특정 값을 넣은뒤 저장하는 자동화 과정에 대해서 알아보도록 하겠습니다. 그럼 관련된 내용 진행하도록 할께요~ 엑셀 파일을 생성하기 위해서는 Workbooks 개체를 이용하여 새로운 Workbook을 추가해야 합니다. 새로운 Workbook 추가는 Workbooks.add 함수를 호출하면 됩니다. Workbooks.add 함수를 호출하면 생성된 Workbook이 ActiveWorkbook (활성화된 워크북)이 됩니다. 따라서 이 Woorkbook에 접근하기 위해서는 ActiveWorkbook 개체를 활용하면 됩니다. Workbook을 저장하기 위해서는 ActiveWorkbook 개체의 SaveAs 함수를 이용할 수 있습니다. 마지막으로 Workbook을..
이 글에서는 엑셀 매크로를 통해서 행과 열을 숨기는 방법에 대해서 알아보고자 합니다. WorkSheet의 행과 열을 숨기는 방법은 어떻게 할까요? 엑셀의 개체중 Rows와 Columns라는 프로퍼티가 있습니다. Rows : 특정 워크시트의 행들의 집합을 리턴한다. Columns : 특정 워크시트의 열들의 집합을 리턴한다. 행과 열의 값을 얻기 위해서는 위의 Rows와 Colmuns의 프로퍼티를 이용하여 행과 열의 정보를 가져와야 합니다.그럼 행과 열을 숨기기 위해서는 어떤 프로퍼티를 써야할까요. 행과 열을 숨기기 위해서는 Rows와 Columns의 개체의 자식 개체인 Hidden 개체를 사용하면 됩니다. Hidden은 True 와 False 값을 가질 수 있는 Boolean 타입입니다. 따라서 자신이 숨..
엑셀 VBA에서 조건문은 프로그래밍을 하는데 매우 유용한 방안입니다. 조건문은 특정 알고리즘을 위해서 비교를 수행하거나 루프구문에서 많이 사용됩니다. 이글에서는 조건문에 대한 예제를 통해 알아보는 시간을 가지도록 할 것입니다. 이 글은 아래의 내용을 포함하고 있습니다. IF 구문IF Else 구문IF ElseIf Else 구문 1. IF 구문 IF 구문의 문법은 아래와 같습니다. If Then IF 구문은 간단히 어떠한 구문을 확인하는데 사용이 됩니다. 위의 조건이 참이면 실행문이 실행이 됩니다. Sub DoIFStatement1() '셀의 A1값이 60만 이상이면, A2에 A1값 / 10의 값을 입력한다. If Range("A1") > 600000 Then Range("A2") = Range("A1")..
이 글에서는 엑셀 체험판 다운로드 방법에 대해서 알아보도록 하겠습니다. 다운로드 하기 위해서는 다운로드 사이트로 이동을 하셔야 합니다. 아래의 링크를 누릅니다. 엑셀 체험판 다운로드 링크https://products.office.com/ko-kr 위의 링크를 누르게 되면 아래와 같은 사이트로 접속을 하게 됩니다. 가정용으로 사용할 것이기 때문에 가정용 버튼을 눌러줍니다. 자신이 사용하고자는 Office 혹은 엑셀의 버전이 무엇인지를 선택합니다. 5명의 사용자가 사용하고자 하면 Office 365 Home을 한명만 사용한다고 하면 Office 365 Personal에 무료 체험하기 버튼을 누릅니다. 무료 체험하기 버튼을 누르게 되면 아래와 같이 이동합니다. 무료 체험 버튼을 눌러 다운로드 과정을 계속 진행..
이 글에서는 변수와 상수에 대해서 알아보도록 하겠습니다. 변수와 상수 무엇을 의미할까요? 쉽게 설명하자면 변수는 변할 수 있는 수, 상수는 변할 수 없는 수 입니다. 영어로 하면 변수는 Variable이고, 상수는 Constant로 불립니다. 영어로 보니 둘의 차이가 확 와닿죠? 위의 그림에서 A에는 50이 아닌 다른 값을 사용자가 넣을 수 있지만, B에는 변경할 수 없습니다. 선언된 상수는 프로그램이 종료될 때까지 50이라는 값을 가집니다. 그럼 변수와 상수에 대해서 좀더 이야기 해보도록 합시다. 1. 변수 변수는 사용자가 원하는 값을 메모리 공간에 잠시 할당하는 것을 말합니다. 사용자가 변화를 주고자면 원하는 값으로 바꿀 수 있는것이죠. 변수 사용을 위해서는 선언(Declare)가 필요합니다. 변수 ..
변수를 사용할 때 변수의 범위를 이해하는 것은 아주 중요합니다. 여기서 말하는 변수의 범위는 변수를 사용할 수 있는 접근성(Accessibility)와 변수의 수명(Life Time)을 의미하게 됩니다. 변수의 범위는 4가지로 구분할 수 있습니다. - 프로시저 레벨 범위- 모듈 레벨 범위- 프로젝트 레벨 범위- 글로벌 변수 범위 위의 그림에서 확인할 수 있듯이 가장 작은 범위는 프로시저 레벨이며, 가장 큰 범위는 글로벌 변수입니다. 1) 프로시저 레벨 범위 프로시저 레벨 범위는 로컬변수라 많이 부릅니다. 모든 로컬 변수는 변수를 선언한 프로시저 혹은 변수 안에서만 사용이 가능합니다. 그리고 함수 혹은 프로시저가 종료가 되면 이 변수는 더이상 사용할 수 없습니다. 아래의 코드는 프로시저 레벨 변수에 대한 ..
엑셀 매크로 보안은 다양한 프로그램 혹은 VBA 코드로 부터 자신의 데이터와 PC를 보호하는데 사용이 됩니다. 이 글에서는 이러한 엑셀 매크로 보안에 대해서 알아보도록 하겠습니다. 매크로를 이용하여 엑셀을 처리하고자 하면, 엑셀 파일은 일반 엑셀 파일이 아닌 엑셀 매크로 사용 통합 문서로 저장이 되어야 합니다. 이 파일에는 보안을 설정할 수 있습니다. 그러면 매크로 보안이란 무엇일까요? 매크로 보안를 알아보도록 하겠습니다. 매크로 보안은 위에서 설명한 바와 같이 엑셀 매크로 사용 통합 문서와 깊은 연관이 있습니다. 사용자가 매크로를 사용하는 엑셀 파일을 받았을 때 데이터 혹은 PC의 보호를 위해서 이에 대한 확인 및 설정이 가능합니다. 매크로 보안은 엑셀 파일에 포함된 매크로를 바로 실행시킬 것이냐, 아..
이 예제에서는 InputBox를 이용하여 사용자로 부터 값을 입력받고, 이에 대한 값을 MsgBox를 통해서 출력하는 방법에 대해서 알아보도록 하겠습니다. VBA에서는 Message Box(메시지박스)를 통해서 Macro가 실행하고 있는 도중에 사용자에게 보여주고 싶은 내용을 보여줄 수 있습니다. 또한 실행 중에 사용자로 부터 특정값을 입력받을 수도 있습니다. 입력은 Input Box(입력박스)를 통해서 사용자로 부터 VBA로 전달됩니다. 이 섹션에서는 InputBox와 MsgBox를 어떻게 사용할 수 있는지에 대해서 알아보도록 하겠습니다. InputBox로 들어온 값을 변수로 넣는 방법도 추가적으로 알아볼께요. MsgBox를 통해서 데이터 출력하기 사용자에게 어떠한 정보를 제공하기 위해서는 메시지박스를..
프로그래밍을 하다보면 특정 동작을 수행하는 알고리즘을 짜야하는 경우가 많습니다. 이러한 알고리즘이 하나의 Main코드에 넣게되면 Main코드가 너무 방대해줘서 코드에 대한 가독성이 떨어지는 문제점을 가지게됩니다. 코딩을 할 때 중요한 포인트중 하나가 가독성인데, 가독성이 높은 코드는 다른사람이 코드를 분석을 할 때 용이하기 때문에 개발에 대한 비용을 줄여주는 이점을 지니게 되죠. 가독성을 높이는 방법중 하나는 특정 알고리즘을 모듈화하는 것입니다. 모듈화를 할 때 대표적으로 사용되는 것이 바로 함수입니다. 함수는 소프트웨어 개발시 (반복되는) 특정 알고리즘을 하나의 함수에 넣어서 그 함수를 반복적으로 재호출하게 사용을 하게 됩니다. 함수를 잘 활용하면 가독성이 높아질 뿐아니라, 코드의 양도 줄이고, 향후 ..
이 글은 VBA 디버깅에 대해서 좀 알아 보려고 합니다. 사용자가 VBA를 통해서 어떠한 코드를 개발할 때, 작성된 VBA 코드가 원활하게 돌아가길 원할겁니다.하지만 개발자나 사용자 모두 사람인지라 한번에 완벽한 코드를 만들 수는 없습니다. 이러한 경우에 우리는 디버깅(Debugging)을 해야 합니다. 디버깅은 코드에 내포된 사용자가 실수한 코드를 수정하는 것을 의미합니다. 제대로된 디버깅은 사용자가 개발한 어플리케이션 혹은 VBA의 문제점을 해결해줍니다. VBA는 다양한 옵션을 통해서 VBA 코드를 디버깅하도록 도와줍니다. 이러한 옵션에 대해서 한번 알아보도록 하겠습니다. 프로시저 실행하기 (단축키 F5) 프로시저를 만든뒤 실행하기 위해서는 마우스 커서를 프로시저 안에 두고 F5를 누릅니다(혹은 Ru..
이번글에서는 설정한 매크로에 대해서 디버깅하는 방법과 코드 수정하는 방법에 대해서 알아보도록 하겠습니다. VBA나 매크로를 원활하게 사용하기 위한 프로그래밍의 가장 중요한 점은 디버깅입니다. 디버깅을 잘해야 원하는 결과물을 만들어 낼 수 있습니다. 하지만 초급자 입장에서 디버깅을 하기가 쉽지는 않죠. 하지만 VBA는 엑셀 내부의 함수를 대부분 사용하기 때문에 관련 문법과 함수 사용법이 눈에 익기만 하면 다른 언어보다는 쉽습니다. 에러가 발생하는 이유도 제한적이기구요. 추후에 디버깅을 하는 방법에 대해서 자세히 다뤄볼텐데요. 이 글에서는 간단히 어떤식으로 코드가 흘러가는지를 보는 정도만 언급을 하도록 하겠습니다. 수정 부분도 간단히 할 겁니다. 겁먹지마세요 ^_^ 궁금한 점이 있으시면 언제든 물어보시면 답..
이전 글에서 엑셀에서 간단히 매크로를 설정하고 사용하는 방법에 대해서 알아보았습니다. 못보셨다구요? 그럼 이전글부터 한번 보고 오시죠!! ^-^/ 2015/09/06 - [IT Info/Excel And Macro] - 엑셀에서 매크로(Macro) 사용하는 방법 이 글에서는 위의 방법으로 설정한 매크로를 제대로(?) 저장하는 방법에 대해서 알아보도로 하겠습니다. 사용자가 설정한 매크로는 엑셀을 저장하게 되면 엑셀 내부에 저장이 되게 됩니다. But, 저장을 하고자 Save 버튼을 눌러서 파일이름을 지정하고 저장버튼을 누르면 아래와 같은 창이 뜨게됩니다. 창이 뜨거나 하면 당황스럽죠. 내가 멀 잘못했나 싶기도 하고...이럴땐 당황하지 말고, 아래의 방법으로 해결하시면 됩니다. 내용을 정리하면, 현재 파일에..
Excel 매크로는 마이크로소프트 엑셀의 가장 유용한 툴 중 하나입니다. 사용자는 매크로를 이용하여 자동적으로 원하는 Task를 만들 수 있습니다. 이 툴은 자동화에 대한 Task 생성에 대한 시간을 절약하여 주고, 직접 프로그래밍시 생길 수 있는 사용자 에러를 제거합니다. 사용자가 Excel VBA에 대해서 잘 알지 못하더라도, 매크로를 이용하여 Task를 자동화 할 수 있습니다. 매크로 녹화 버튼을 누른뒤 사용자가 추가하는 대부분의 작업을 자동적으로 추가할 수 있습니다. (모든 기능이 되는 건 아닙니다.) 사용자는 VBE(Visual Basic Environments)를 통해서 원하지 않는 코드를 삭제할 수 있습니다. 이에 대한 내용은 추후 설명드리겠습니다. 아래의 예제를 통해서 Excel 매크로를 ..
VBA 환경은 VBE라고 말합니다. 사용자가 VBE를 열수 있는 방법은 2가지가 있습니다. 사용자는 개발자 탭을 통해서 Visual Basic에 대한 VBE를 열수 있습니다. 또한 Alt + F11을 누름으로써도 VBE를 열수 있습니다. 아래의 그림은 개발자 툴에서 VBA를 여는 방법입니다. (제 PC에 설치된 엑셀이 영문판이라, 헷갈리신 다면 죄송합니다 ㅠㅠ) 위의 Visual Basic 버튼을 누르게 되면 아래와 같은 개발 환경이 뜹니다. 물론 ALT + F11을 눌러도 동일한 결과를 볼 수 있습니다. 우리는 위의 화면을 VBA 환경 혹은 VBA 통합 개발 환경(VBA Integrated Development Environment)이라고 부른답니다. VBA 통합 환경: VBA 에디터(VBA Edito..
VBA는 MS Office Application에서 사용하는 프로그래밍 언어입니다. VBA는 Visual Basic for Application의 준말입니다. 이 언어는 사용자가 원하는 특정 Task를 자동화 해준다는 장점을 가지고 있습니다. 많은 시간동안 사용자는 동일한 업무를 매일 처리합니다. 이러한 부분을 VBA는 자동화하여 사용자에게 편의성을 제공하게 됩니다. VBA의 소개 VBA는 MS Office Tool(Excel, Word, PowerPoint,Outlook,Access)의 일반적인 언어입니다. 만약 사용자가 VBA를 배우고자 한다면, 사용자는 MS Office Tool을 자동화 할 수 있고, 각 툴의 Object Model만 변경함으로써 각 툴을 사용할 수 있습니다. VBA를 왜 배워야 ..