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기출과 함께)
각종 컨트롤에 VBA 이용해서 명령을 부여하여 기능을 수행할 수 있도록 만들어주는 작업 1
단축키 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급 > 컴활1급 실기' 카테고리의 다른 글
취성패_컴활1급_16일차 <access: 유효성검사, 입력마스크, 형식> (0) | 2016.12.13 |
---|---|
취성패_컴활1급_15일차 (0) | 2016.12.12 |
취성패_컴활1급_13일차 <정렬, 부분합, 데이터표, 목표값찾기, 시나리오, 매크로> (0) | 2016.12.08 |
취성패_컴활1급_12일차 <피벗 테이블, 통합> (0) | 2016.12.07 |
8일차 (0) | 2016.12.01 |