컴퓨터활용능력1급/컴활1급 실기

취성패_컴활1급_14일차 <기출문제따라하기,프로시저,최신기출1>

삼토 2016. 12. 9. 17:37


product


sumproduct:

곱한 다음 합치기

항상 배열 값으로 넣을 것







(계산작업 해설 이어서)



4. 배열수식



=INDEX($B$4:$H$43,MATCH(MAX(IF($D$4:$D$43=L28,$G$4:$G$43)),($D$4:$D$43=L28)*$G$4:$G$43,0),2)


=INDEX($B$4:$H$43,MATCH(ⓐ,ⓑ,2)



찾을 값ⓐ

MAX(IF($D$4:$D$43=L28,$G$4:$G$43))

: 조건- 경영과


이 중에서 MAX인 중간고사의 점수



찾을 영역ⓑ

($D$4:$D$43=L28)*$G$4:$G$43,0)

: (학과가 경영과)*(을 영역)

경영과가 아닌 경우, 0이 된다

(값이 사라지는게 아니라 0으로 출력되므로 행/열번호는 정확하게 구해진다)


왜 이렇게? :

$G$4:$G$43

경영과 중간고사의 최고점수를 전체과 중간고사 점수에서 찾아라.

이러면 해당점수가 다른 학과와 겹칠 경우 출력되는 값이 2개가 되어버림


따라서

($D$4:$D$43=L28)*$G$4:$G$43

경영과 중간고사 최고점수를 경영과 중간고사 점수에서 찾아라




* 이벤트 프로시저 * (P.228기출과 함께)

각종 컨트롤[각주:1]에 VBA 이용해서 명령을 부여하여 기능을 수행할 수 있도록 만들어주는 작업



단축키 ALT+F11





버튼 클릭했을 때 폼이 나오도록 연결하기


1. WHAT 어떤 행위가 필요한가 (폼이 열리도록 해라)

2. WHEN 무엇을 했을 때 1이 일어나야 하나 (버튼을 눌렀을 때)


1. 이벤트 발생시점 만들기

- 클릭했을 때

- 폼이 실행화(초기화)가 될 때

2.






* 디자인버튼

디자인 버튼 눌림 o

 디자인 버튼 눌림x

 "비활성화"

 "활성화"

 클릭 시 개체가 선택됨

 클릭 시 개체가 클릭됨




<순서>

디자인버튼 눌러 비활성화를 먼저 하고

명령부여 후

디자인모드를 끄고 재확인




명령부여할 때


개체명.메서드


개체명: 이름

. : 명령을 내리겠다

메서드: 명령문


End Sub

중고차입력화면.Show

End Sub

SHOW 명령

: 열려라






INITIALIZE 초기화(실행) 만들기

: 폼의 빈 곳을 먼저  db클릭해서 띄워놓고

그 후 우측 상단을 눌러 initialize선택하여 변형해서 만든다


Private Sub UserForm_Click()

End Sub

-----------------------------------

Private Sub UserForm_Initialize()


Cmb모델.RowSource = "k4: k8"


End Sub


rowsource

: 행원본



"k4: k8"

: VBA에서 셀범위를 나타낼 때에는 " " 안에 넣어야 한다.

(셀범위는 엑셀 것이므로 " " 쓴다

VBA에서 " " 사용: 1. 연동된 엑셀과 정보를 공유할 때 --> 2. 문자처리)







<목록값 가져오는 2가지 방법>


1. 다른 셀에서 참조하기 : rowsource

cmb구분.rowsource = "j6:j10"

(문제형태) [j6:j10]영역의 내용이 cmb구분 콤보상자의 목록에 표시되도록



2. 내가 직접 값 목록을 입력하기 : with 구문

with cmb구분


.additem "사랑"

.additem "평화"

.additem "우정"


end with

(문제형태) .......




* 1과 2번 중 어떤걸 선택하는지 묻는 메시지를 띄운 후 그에 따라 가져오는 방식을 달리하고 싶다면?

: msgbox와 if문 사용



1) 메세지를 띄우는 구문

a = msgBox("띄울메시지", 단추옵션+아이콘, "창제목")


ex)

a MsgBox("셀을 참조하여 목록값으로 정하실래염?", vbYesNo + vbQuestion, "메시지연습")



a라는 변수를 지정한 것임.

예 버튼 누르면 vbyes가,

아니오 누르면 vbno가 a로 반환된다.



2)

따라서 이제 if를 작성해보자

if 사용까지 마친 최종버전은!


a = MsgBox("셀참조?", vbYesNo + vbQuestion, "연습")


If a = vbYes Then


cmb구분.RowSource = "j6:j10"


Else


With cmb구분

.AddItem "사랑"

.AddItem "평화"

.AddItem "우정"


End With


End If








* 옵션단추 중 'opt1회'가 선택되도록

- 체크박스: chk

- 옵션단추 : opt

true를 주면 선택된다




닫으려면

Unload Me

(엑세스는 open과 close를 쓴다)


컴퓨터에서 프로그램 실행시키면 램에 이 정보가 올라가야함

그것을 '적재(load)'라 함. 

따라서, unload는 메모리에서 정보를 소거한다는 뜻.



메시지박스를 표시한 후 닫으려면

unload me 위에 msgbox를 정의해야함.

(표시한 후 -> 닫기 이므로)



VBA에서 종료하려면




숙제: 프로시저 문제 3번 반복







기출 따라하기 '중고차'의 ③번 문제 이어서 (p.228)

 


* 셀에 폼 입력값 넣기

cells(행,열숫자값) = 입력한 콤보상자


ex)

cells(4,2) = cmb모델



--> 마지막으로 입력한 행 다음 행에 자동 위치하도록 행번호를 구하려면?


--> 행 위치(4)에 변수를 넣는다 : 행번호

cells(행번호,2) = cmb모델


--> 그 위에 변수를 정의한다.

행번호 = Range("b3").CurrentRegion.Rows.Count + 3


--> range: 표의 시작/기준을 정의함.

currentregion: (b3기점으로) 데이터가 입력되어있는 연결된 범위[각주:2]만큼을 감지함.

rows: 행단위로 수행해라// 여기까지 쓰면 2가 나옴

count: 행개수를 세어라

+2 : b4에 입력해야하므로 2+2=4로 만든다


<완성본>



Private Sub Cmd입력_Click()

행번호 = Range("b3").CurrentRegion.Rows.Count + 3


Cells(행번호, 2) = Cmb모델

End Sub




* listindex속성


cells 4행 12열 가져오는 걸 생각해보쟈


cells(행번호,4) = cells(4,12)


--> 고정되어있으므로 4

cells(행번호,4) = cells(신차행번호,12)


--> '신차행번호'라는 변수를 만들어서 cmb모델에서 선택했던 항목의 리스트 번호를 가져오게 하면 됨

신차행번호 = cmb모델.listindex + 4


+4 : 리스트인덱스의 리스트0(빼곰카)의 시작은 4열. 따라서 리스트값에 +4를 해야 주소가 나옴.





콤보 상자의 고유한 번호 : listindex (0부터 시작)

0 빼꼼카

1 베베카

3 꽁공카

4 도도카

5



용법:

ex.

Cells(행번호, 2) = Cmb모델.listindex

-> cmb모델에서 빼꼼카를 선택하면 0으로 입력이 된다







[백업본]



Private Sub Cmd입력_Click()

행번호 = Range("b3").CurrentRegion.Rows.Count + 2

신차행번호 = cmb모델.listindex + 4



Cells(행번호, 2) = Cmb모델

cells(행번호,3) = text년식



cells(행번호,4) = cells(신차행번호,12)



if text년식 = "" or text등록일<text년식 then

cells(행번호,5) = "등록오류"

else

cells(행번호,5) = cells(신차행번호,12)*0.8^(text등록일-text년식)



cells(행번호,6) = text등록인

cells(행번호,7)=text등록일

















  1. (누를 수 있는 명령단추, 텍스트 상자, 레이블 상자, 콤보 상자, 체크박스, 옵션단추, 스핀단추 등등) [본문으로]
  2. 가로 세로 뿐 아니라 대각선까지도 감지함 [본문으로]