728x90
엑셀코딩스쿨 정렬 알고리즘(간단) |
새파일을 연다 다름이름으로 저장 파일형식 : 매크로 사용 통합문서 (xlsm) 문서를 작성하며 수시로 저장한다. |
|
A3셀과 A4셀에 30,29를 입력하고 검정십자 모양일 때 클릭하여 |
1이 되는 32행까지 드래그 한다. |
3행에서 32행 까지 행높이를 조정한다. |
|
B 열에서 AF 열까지 너비를 2로 설정한다. |
C33에서 AF33까지 1에서 30까지 입력한다. |
C35 셀에 다음 수식을 입력한다. =randbetween(1,30) |
|
검정십자 모양을 통해 AF35까지 해당 수식을 복사한다. |
수식을 마우스 검정십자 모양 활ㅇ |
A35에 fix라고 입력 |
개발도구 - 매크로 기록 매크로 이름 : MD_Copy_Fix |
|
|
A35 셀에서 부터 AF35 셀까지 복사(단축키 Ctrl + C) |
1) A33 셀 클릭 2) 마우스 우클릭 3) 선택하여 붙여넣기에서 값만 붙여넣기 4) ESC 키 클릭 5) B33셀 선택 기록 정지 클릭!! |
|
|
|
랜덤함수로 인해 33행과 35행의 값이 달라진다. 33행은 값 35행은 함수 |
VBA 창을 열어 (단축키 Alt + F11) 왼쪽 프로젝트 창에서 Module1 더블 클릭 오른쪽 기록된 매크로 확인 |
왼쪽 아래 속성창에서 모듈 이름 변경 Copy_Module |
프로젝트 창에서 마우스 우클릭 삽입 모듈 |
모듈1 이름 변경 Sort_Module |
|
우측 창에 sub MD_Sort 라고만 치면 우측 그림 처럼 자동으로 End sub 까지 생성 |
|
아래와 같이 for 구문, if 구문 입력 Sub MD_Sort() For k = 1 To 3 If 1 = 1 Then Else End If Next k End Sub |
상단 메뉴바의 빈칸에서 마우스 우클릭 편집 클릭!! |
편집 도구탭 생성 |
아래 그림처럼 if 구문 세줄 선택 |
편집도구에서 들여쓰기 클릭 (단축키 Tab 키) |
들여쓰기 됨 |
|
1=1을 지우고 Range("C33").Offset(, k - 1) > Range("C33").Offset(, k) 으로 변경 |
Sub MD_Sort() For k = 1 To 3 If Range("C33").Offset(, k - 1) > Range("C33").Offset(, k) Then Else End If Next k End Sub |
if 구문의 then 끝에서 엔터 Tab 키 한번 클릭(들여쓰기) 후 입력 MsgBox Range("C33").Offset(, k - 1).Value MsgBox Range("C33").Offset(, k).Value MsgBox "앞에 수가 크다" |
|
Sub MD_Sort() For k = 1 To 3 If Range("C33").Offset(, k - 1) > Range("C33").Offset(, k) Then MsgBox Range("C33").Offset(, k - 1).Value MsgBox Range("C33").Offset(, k).Value MsgBox "앞에 수가 크다" Else End If Next k End Sub |
좌(VBA창) 우(엑셀창)으로 배치하여 구문 실행을 확인 |
MD_Sort 구문 내에 아무 곳에 마우스 클릭 후 F8 키를 눌러 매크로를 한 줄씩 실행함 |
그림과 같이 실행되기 직전의 구문이 노랑으로 표시됨 |
F8키를 여러번 눌러 C33셀의 값 30 이 메세지박스로 표현 됨 확인 클릭하면 곧~ |
D34셀의 값 15 가 메세지 박스로 표현 됨 확인 클릭하면 곧~ |
메세지 박스 앞에 수가 크다. 확인 |
위 과정을 세 번 반복한다. 두수를 비교했을 때, 앞의 수가 크다면 메세지 박스가 팝업된다. 하지만 그렇지 않으면 매크로는 조용히 끝난다. |
메세지 박스 3줄 앞에 모두 아프스트로피를 붙여 주석처리한다. |
아래 그림처럼 다음 두 줄을 입력한다. v_val_temp1 = Range("C33").Offset(, k - 1).Value v_val_temp2 = Range("C33").Offset(, k).Value MsgBox (v_val_temp1 & "," & v_val_temp2) |
F8을 눌러 한줄씩 실행하면 앞의 수가 클 경우 앞의 수와 뒤의 수가 함께 출력됨 |
메세지박스를 주석처리하고 아래 두 줄을 입력하여 서로 값을 바꾸어 입력한다. Range("C33").Offset(, k - 1) = v_val_temp2 Range("C33").Offset(, k) = v_val_temp1 |
F8키를 눌러 한 줄 씩 실행하여 결과를 확인해본다. |
아래 이미지와 같이 v_ch_num = 0 를 상단에 v_ch_num = v_ch_num + 1 를 중간에 삽입한다. |
아래 그림 처럼 영역을 선택하여 들여쓰기한다. 들여쓰기 단축키 Tab 키 |
아래 그림과 같이 상단에 do 하단에 until loop v_Ch_Num=0 중간 아래쪽 쯤에 doevents 를 적는다. |
|
Sub MD_Sort() Do v_Ch_Num = 0 For k = 1 To 3 If Range("C33").Offset(, k - 1) > Range("C33").Offset(, k) Then '값비교 'MsgBox Range("C33").Offset(, k - 1).Value 'MsgBox Range("C33").Offset(, k).Value 'MsgBox "앞에 수가 크다" v_val_temp1 = Range("C33").Offset(, k - 1).Value '각각 변수에 v_val_temp2 = Range("C33").Offset(, k).Value '값을 저장함. 'MsgBox (v_val_temp1 & "," & v_val_temp2) Range("C33").Offset(, k - 1) = v_val_temp2 '서로 값을 바꾸어 Range("C33").Offset(, k) = v_val_temp1 '입력함 v_Ch_Num = v_Ch_Num + 1 DoEvents Else End If Next k Loop Until v_Ch_Num = 0 End Sub |
하단에 msgbox "성공!" 을 적는다. |
F8을 눌러 한 줄씩 실행하면서 숫자들이 자리를 잘 바꾸는지 점검한다. 크게 이상이 없을 경우 정지 또는 빨리 감기 F5를 누른다. |
from 구문의 3을 29로 변경한다. from k=1 to 29 |
|
Sub MD_Sort() Do v_Ch_Num = 0 For k = 1 To 29 If Range("C33").Offset(, k - 1) > Range("C33").Offset(, k) Then '값비교 'MsgBox Range("C33").Offset(, k - 1).Value 'MsgBox Range("C33").Offset(, k).Value 'MsgBox "앞에 수가 크다" v_val_temp1 = Range("C33").Offset(, k - 1).Value '각각 변수에 v_val_temp2 = Range("C33").Offset(, k).Value '값을 저장함. 'MsgBox (v_val_temp1 & "," & v_val_temp2) Range("C33").Offset(, k - 1) = v_val_temp2 '서로 값을 바꾸어 Range("C33").Offset(, k) = v_val_temp1 '입력함 v_Ch_Num = v_Ch_Num + 1 DoEvents Else End If Next k Loop Until v_Ch_Num = 0 MsgBox "성공!" End Sub |
매크로 창에서 F5 키를 눌러 순수대로 잘 정령이 되는지 확인한다. |
화면의 글자 크기에 따라 숫자가 보이지 않고##으로 표시되는 경우는 칸에 비해 글자크기가 크기 때문이다. 아래 화면과 같이 영역을 선택 후 셀서식-맞춤 -셀에 맞춤으로 설정하면 글자 및 숫자가 모두 보인다. |
* 조건부 서식 준비 작업 * 아래 그림과 같이 왼쪽 위 C3에서 부터 오른쪽 아래로 드래그 하여 영역을 잡는다. (반드시 왼쪽 위에서 출발하여 오른쪽 아래로 영역을 잡는다.) |
수식을 사용하여 서식을 지정할 셀 결정 | 수식칸에는 =$A3<=C$33 서식버튼을 눌러 채우기에서 적당한 색을 선택 |
아래 그림과 같이 선택한 색이 칠해져 가각 숫자에 따른 높이로 표현되었다. |
개발도구 -삽입 -단추(양식컨트롤) |
적당한 곳에 적당한 크기로 드래그 |
매크로 지정 창이 뜨면 Copy 매크로를 클릭 확인 |
단추 모양에서 마우스 우클릭 텍스 편집 |
적당한 단추 이름을 적는다. |
다시 한번 단추만들기하여 이번에는 매크로를 sort를 클릭 |
역시 적당한 이름을 붙인다. | |
아래 그림과 같이 copy 모듈과 sort 모듈을 작동시켜 확인한다. |
시도횟수를 AG33셀에 기록 색을 구간별로 나누어 적용하면 조금 더 화려하게 만들 수 있다. |
더 많은 숫자로 더 화려하게... |
엑셀 파일 다운로드 |
728x90
'■ Excel > ㅡExcel Class' 카테고리의 다른 글
돌줍기게임(2인간단) (0) | 2022.08.23 |
---|---|
엑셀Class VBA 로또번호(간단) (0) | 2022.05.19 |
엑셀Class- VBA 구구단표 (0) | 2022.05.04 |
엑셀Class- VBA 매달1장 달력 만들기(작성중) (0) | 2022.04.24 |
엑셀 수업 - 유클리드 알고리즘 #27- (0) | 2020.09.02 |