반응형

VBA 25

Excel VBA - For, Next

For, Next 사용하기 For, Next 문은 정해놓은 횟수동안 동일한 작업을 반복하는 것이다. For와 Next는 세트로 사용한다. Sub Button_Click() Dim i as Integer For i = 1 To 10 Range("A" & i) = i + 1 Next i End Sub 위 코드는 i를 1에서 1까지 1씩 증가시키는 동안 A 컬럼의 i 번째 셀에 i + 1 을 계산해서 출력하라는 것이다. 실행하면 다음 결과를 얻게 된다. 위에서 Range("A" & i) 대신 Cells(i, 1) 을 써도 같은 결과를 얻게 된다. For, Next 문 안에 For, Next 문이 들어갈 수도 있다. 2가지 변수의 조건을 변경하면서 반복 계산하게 된다. Sub Button_Click() Dim ..

Excel VBA 기초 2023.12.02

Plot Digitizer

Plot Digitizer 논문이나 책에서 다른 사람이 만든 그래프를 따라 그리거나 값을 추출하고 싶을 때 사용하는 프로그램을 Plot Digitizer 라고 한다. 이를 전문적으로 하는 프로그램이 있긴 하지만 엑셀 VBA를 이용해서 비슷하게 따라할 수 있다. 우선 시트에 다음과 같이 입력하고 검은색 버튼의 이름은 Plot_Digitizer 우측에는 직선 및 표식이 있는 분산형 차트를 넣고 차트의 이름은 Chart1 이라고 정했다. 그리고 E4 와 E7 Cell 에는 [데이터] 탭 - [데이터 도구] 그룹 - [데이터 유효성 검사] 의 [데이터 유효성 검사] 메뉴에서 [설정] 탭의 [유효성 조건] - [제한 대상] 에서 목록 을 선택하고 원본에 No,Yes 를 입력한 후 확인을 누른다. 그러면 다음과 같..

Excel VBA 응용 2023.12.02

Excel VBA - VBA Editor 살펴보기 (2)

VBA Editor 메뉴 구성 재설정 버튼 우선 VBA 실행 시 에러가 나면 ('1004' 런타임 오류가 발생하였습니다.... 어쩌고...) 에러창을 끈 후에도 아무것도 실행이 되지 않는다. 그럴 때 버튼을 눌러야 하는데 이렇게 하면 VBA를 재설정할 수 있다. 이제 코드를 편집한 후 다시 실행하면 된다. 편집 위치 VBA 코드 편집할 때 커서가 있는 위치를 표시한다. 평소에 이걸 확인할 일은 거의 없긴 한데 나중에 복잡한 코드를 작성할 때, 행 수가 크면 내가 이만한 수준의 코드를 작성했구나... 하는 뿌듯함을 느낄 수 있다. VBAProject 속성 다른 사람이 작성한 Excel 파일의 코드를 보려고 하면 암호를 입력하라는 창이 나올 때가 있다. 암호는 다음 메뉴에서 설정할 수 있다. 읽기 전용으로 ..

Excel VBA 기초 2023.11.30

Excel VBA - 변수 (2)

변수 선언 변수를 선언할 때 주의해야 할 것은 변수를 각각 따로 선언해야 한다는 것이다. 예를 들어 다음과 같이 3개의 변수를 한꺼번에 Long으로 선언하면 Dim x, y, z As Long z 만 Long으로 선언하고, 나머지는 Long이 아닌 Variant로 선언하게 된다. 제대로 하려면 Dim x As Long, y As Long, z As Long 또는 Dim x As Long Dim y As Long Dim z As Long 이렇게 선언해야 된다. 참고로 dim x as long 으로 입력해도 자동으로 Dim x As Long 으로 바뀌게 되니 편하게 소문자로 입력하자. 변수의 다른 표시 방법 몇가지 변수 형식은 다른 방법으로 표시할 수 있는데 Integer는 % Long은 & Single은 ..

Excel VBA 기초 2023.11.30

Excel VBA - 변수 (1)

변수(Variable) VBA에서 변수를 선언하면 이 변수를 범위에서 사용할지를 설정하고 변수가 사용할 수 있는 값의 범위도 설정할 수 있다. 우선 변수 사용 범위에 대해 알아보면 지역변수 (Dim) 변수 사용범위는 프로시저(Procedure) 수준으로 선언된 프로시저에서만 사용 가능하고 실행할 때마다 재생성되므로 초기값이 0이나 공백, Null이 된다. 모듈변수 (Dim or Private) 변수 사용범위는 모듈(Module) 수준으로 선언한 해당 모듈에서만 사용 가능하고 프로그램이 종료될 때까지 값을 유지한다. 전역변수 (Public) 변수 사용범위는 프로젝트(Project) 수준으로 프로젝트의 어디에서나 사용 가능하고 프로그램이 종료될 때까지 값을 유지하며 모듈 개체에서만 선언할 수 있고 폼이나 시..

Excel VBA 기초 2023.11.30

TSP (Traveling Salesman Problem)

TSP (Traveling Salesman Problem) TSP는 모든 도시들을 한번씩 방문하고 원래 시작점으로 돌아오는 최단 경로의 이동 순서를 구하는 것이다. Excel에서도 이 문제를 간단하게 풀 수 있는데 해찾기 추가 기능을 이용하면 된다. 해찾기 추가 기능은 수동으로 추가해야 사용할 수 있다. Excel 옵션의 추가 기능 창 하단의 관리에서 Excel 추가 기능을 선택하고 이동 버튼을 누르면 추가 기능 창이 나타난다. 해 찾기 추가 기능을 체크하고 확인 버튼을 누르면 다음과 같이 해 찾기 추가 기능을 사용할 수 있게 된다. 리본 메뉴의 [데이터] 탭 오른쪽 가장자리에 [해 찾기] 버튼이 생겼다. 해 찾기 버튼을 눌러서 다음과 같은 창이 나타나면 성공이다. 이제 시트에 다음과 같이 입력하고 빨간..

Excel VBA 응용 2023.11.30

Stop Watch

Stop Watch 만들기 VBA를 이용해서 스톱워치를 만들 수 있다. 어차피 핸드폰에 있는 거 쓸텐데 무슨 소용일까 싶지만 시간을 다루는 코드를 응용하는 방법을 알아놓으면 나중에 쓸 일이 있겠지... 우선 시트에 다음과 같이 입력하고 B2 Cell의 표시 형식을 hh:mm:ss.000 로 변경했다. 1/1000 초 단위 스톱워치를 만들기 위해서다. 그리고 빨간 버튼의 이름은 Start_Btn 으로 파란 버튼의 이름은 Reset_Btn 으로 정했다. F3 Cell에 시작 이라고 입력하고 빨간 버튼을 마우스로 클릭한 다음 F3 Cell을 클릭하면 다음 그림과 같이 수식에 =$F$3 가 입력된다. (텍스트 편집이 아니다) 그러면 빨간 버튼에 F3 Cell에 입력한 글자가 똑같이 표시된다. 같은 방법으로 파란..

Excel VBA 응용 2023.11.29

소인수분해

소인수분해 VBA를 이용해서 소인수분해를 해보자. 우선 시트에 다음과 같이 입력하고 실행버튼에 다음 코드를 연결한 후 Sub Prime_Click() Dim S As String Dim C As Long, D As Long, X As Long, Y As Long, F As Long C = 0 '소인수로 나눈 횟수. 0으로 리셋 P = 2 '소인수. 2부터 시작해서 3, 5, 7, ...로 증가 F = 0 '소인수 갯수. 0으로 리셋 [B5] = "" '소인수분해 결과 나오는 곳. 이전 결과를 지워야 함 X = [B3] '입력한 자연수 Do Y = X / P 'X를 P(소인수)로 나누는데 If (X Mod P) = 0 Then 'X가 P로 나누어 떨어지면 X = Y '나눈 몫 Y를 X로 다시 지정 C = ..

Excel VBA 응용 2023.11.29

콜라츠 추측

콜라츠 추측 (Collatz conjecture) 자연수 n에 대해 n이 짝수면 반으로 나누고 n이 홀수면 3배에 1을 더하는 것을 반복하다보면 결국에 1이 된다는 문제 f(n)={n2,if n is even3n+1,if n is odd 정말 1이 되는지 VBA를 이용해서 확인해보자. 우선 시트에 다음과 같이 입력하고 실행버튼의 이름은 Collatz로 지정했다. 그리고 실행버튼에 다음 코드를 연결해준 후 실행하면 Sub Collatz_Click() Dim i As Long, num As Long [B6:C1048576] =..

Excel VBA 응용 2023.11.29

Excel VBA - Columns, Rows

Columns Range와 비슷한 용도로 사용할 수 있는데 열을 한꺼번에 지정할 때는 Columns를 사용하면 된다. Sub Button_Click() Columns(1) = 1 End Sub Columns(1) 에서 1은 1번째 열 즉, A 열을 의미한다. 위 코드는 A 열을 1로 채우라는 거다. Range("A:A") = 1 과 같다. 실행 결과 A1부터 A1048576까지 1로 가득 채워졌다. Columns 뒤 괄호 안의 숫자를 바꿔보자. Sub Button_Click() Columns(3) = 7 End Sub Columns(3) 에서 3은 3번째 열 즉, C 열을 의미한다. 위 코드는 C열을 7로 채우라는 거다. 실행 결과 C1부터 C1048576까지 7로 가득 채워졌다. 다음과 같이 숫자 대신..

Excel VBA 기초 2023.11.24
반응형