컴활1급 문제풀이2017. 1. 30. 00:07

[처리기능]

[문제 3] <판매장부> 폼의 'txt물품코드' 컨트롤을 클릭하면 조건에 따라 '판매단가' 원금에 비용이 추가 되도록 이벤트 프로시저를 작성하시오

▶ select ~ case 문을 이용할 것

Select Case Left(판매단가, 2)

Case "11"
 txt판매단가 = 판매단가 + 판매단가 * 0.1
 
Case "21"
 txt판매단가 = 판매단가 + 판매단가 * 0.06

Case "31"
 txt판매단가 = 판매단가 + 판매단가 * 0.05

Case "41"
 txt판매단가 = 판매단가 + 판매단가 * 0.04

Case "51"
 txt판매단가 = 판매단가 + 판매단가 * 0.03

Case "61"
 txt판매단가 = 판매단가 + 판매단가 * 0.02

Case "71"
 txt판매단가 = 판매단가 + 판매단가 * 0.01

End Select

Posted by 엘세레네
컴활1급 문제풀이2017. 1. 29. 22:07

[입력수정]

[문제 3] <학생정보> 폼을 열면 다음과 같이 되도록 기능을 구현하시오

▶ 새로운 레코드를 입력할 수 있도록 화면을 표시할 것

▶ 매크로로 구현하고, 'New정보입력'으로 이름을 지정할 것

GoToRecord ,,새 레코드,

 

[처리기능]

[문제 3] <학생정보> 폼의 'txt학번' 컨트롤에 포커스가 옮겨가면 다음과 같은 기능하도록 구현하시오

▶ 선택한 학생의 시험 응시횟수를 표시할 것

▶ <성적> 테이블을 이용할 것

MsgBox [성명] & "의 응시횟수는 " & DCount("[학번]", "성적", "[학번]=[txt학번]") & "번째입니다."

Posted by 엘세레네
컴활1급 문제풀이2017. 1. 29. 21:12

[DB구축]

[문제 1-5] <사원> 테이블 완성

▶ 마지막에 '멀티' 필드를 추가하고 사진, 이력서 문서 등이 지원되는 모든 파일 형식의 데이터 형식을 첨부할 수 있게 설정하시오

데이터 형식 -> 첨부 파일

 

[입력수정]

[문제 2] <사원검색> 폼의 'txt사번' 컨트롤에는 'txt이름'에 표시된 사원명을 <사원> 테이블에서 찾아 '사번'을 표시하시오

▶ DlookUp 함수를 이용할 것

=DLookUp("[사번]","사원","[이름]=[txt이름]")

 

[조회출력]

[문제 2] <사원검색> 폼의 'cmb코드' 컨트롤이 업데이트되면 다음과 같은 기능이 수행되도록 구현하시오

▶ 'cmb코드'에서 지정한 사원에 해당하는 정보를 탖아 표시하도록 하시오

▶ 현재 폼의 'RecordSource' 속성을 이용하여 이벤트 프로시저를 작성하시오

Me.RecordSource = "select * from 사원 where 코드='" & cmb코드 & "'"

Posted by 엘세레네
컴활1급 문제풀이2017. 1. 23. 20:57

프로시저 2번 말고 틀린 게 없다! 와아!!!

Posted by 엘세레네
컴활1급 문제풀이2017. 1. 23. 20:09

[기타작업]

[문제 2-2] '가스누출' 폼의 <입력> 버튼을 클릭하면 폼의 데이터가 [표1]의 마지막 행 다음에 입력되도록 프로시저를 작성하시오

i = Range("B3").CurrentRegion.Rows.Count + 2

Cells(i, 2) = txt구매자

Cells(i, 3) = cmb제조회사

Cells(i, 4) = txt주소

Cells(i, 5) = cmb구분

Cells(i, 6) = txt연락처

 

 

Posted by 엘세레네
컴활1급 문제풀이2017. 1. 23. 18:15

[계산작업]

[문제 2] [표1]의 분류, 제품코드, 가격을 이용하여 [표3]의 [E29:E31] 영역에 분류별 최고가 제품의 제품코드를 계산하여 표시하시오

▶ INDEX, MATCH, MAX 함수를 이용한 배열 수식 사용

1. 분류별 최고가를 구한다.       =MAX((조건)*(구할범위))        =MAX((B4:B25=D29)*(D4:D25))

2. 구한 값의 행주소를 구한다.   =MATCH(값,범위,유형)           =MATCH(MAX((B4:B25=D29)*(D4:D25)),(B4:B25=D29)*(D4:D25),0)

3. 제품코드를 구한다.              =INDEX(범위,행주소,열주소)    =INDEX(A4:A25,MATCH(MAX((B4:B25=D29)*(D4:D25)),(B4:B25=D29)*(D4:D25),0))

4. 절대/상대/혼합참조로 수정 후 채우기 핸들을 이용하여 [표1]을 채워준다.

=INDEX($A$4:$A$25,MATCH(MAX(($B$4:$B$25=D29)*($D$4:$D$25)),($B$4:$B$25=D29)*($D$4:$D$25),0))

 

★ 알아두기 - ISODD()=값이 홀수이면 True, 아니면 False의 결과 값이 반환된다.

Posted by 엘세레네
컴활1급 문제풀이2017. 1. 19. 23:40

[처리기능]

[문제 2] <나이변경> 업데이트 쿼리

▶ <원생> 테이블에 있는 '생일' 필드와 시스템의 오늘 날짜를 이용하여 '현재나이' 필드 값을 현재 나이로 업데이트 할 것

▶ Date, DateDiff 함수 사용

▶ <원생> 테이블의 '나이' 필드 다음에 '현재나이' 필드를 숫자 데이터 형식으로 추가한 후 업데이트를 실행할 것

1. <원생> 테이블의 '나이' 필드 다음에 '현재나이' 필드를 추가한다.

2. 데이터 형식을 '숫자'로 설정한다.

3. 업데이트 쿼리를 만든다.

4. '현재나이' 필드를 추가하고 조건에 DateDiff("yyyy",[생일],Date())를 작성한다.

5. 쿼리를 실행한 후 쿼리의 이름을 '나이변경'으로 저장한다.

DateDiff(시간기준,날짜1,날짜2-> 날짜의 간격을 시간기준에 따라 반환하는 함수. 시간기준에는 연도(yyyy), 분기(p), 월(m) 등 설정가능

Posted by 엘세레네
컴활1급 문제풀이2017. 1. 19. 21:35

[DB구축]

[문제 1-5] '제작사' 필드에 '영진', '원샷', '이기적' 데이터만 입력할 수 있게 유효성 검사 규칙을 설정하시오

In ("영진",'원샷","이기적")       /        "영진" or "원샷" or "이기적"

 

[조회출력]

[문제 1-4] ISBN 바닥글 영역의 'txt할증건수' 컨트롤에 건수를 표시하시오

▶ '대여일자'가 2015년 3월 1일 이전 자료의 건수를 표시할 것

▶ DCount, Count, Sum, IIf 중 적절한 함수를 이용할 것

▶해당 자료가 없을 경우 '0'으로 표시할 것

=Sum(IIf([대여일자]<=#2015-03-01#,1,0))

Count(IIf())는 사용불가! 0도 숫자니까 세어버린다  ->  Count(IIf([대여일자]<=#2015-03-01#,1))

 

[문제 2] <자료검색> 폼의 'cmd닫기' 버튼을 클릭하면 메시지 상자를 표시하도록 이벤트 프로시저를 작성하시오

▶ <예> 버튼 클릭 시 해당 폼이 종료 됨

a = MsgBox("폼을 닫겠습니까?, vbYes, "폼 닫기")

If a = vbYes Then

DoCmd.Close

End If

 

[처리기능]

[문제 1] '회원성명'이 일부를 매개 변수로 입력받아 결과를 표시하는 <회원별대여> 쿼리를 작성하시오.

▶ <자료대여>, <회원정보> 테이블을 이용할 것

▶ <자료대여>의 '대여번호'와 <회원정보>의 '대여번호'가 일치하는 행만 포함하도록 조인 속성을 설정할 것

▶ '회원ID'를 기준으로 오름차순 정렬하고, '대여번호'로 내림차순 정렬할 것

Like "*" & [회원성명의 일부를 입력할 것] & "*"

포함되는 값을 필터할 때
1단계 : "필드 like *컨트롤*"
2단계 : "필드 like '*컨트롤*'"
3단계 : "필드 like '*"컨트롤"*'"
4단계 : "필드 like '*" & 컨트롤 & "*'"

 

추가로 기억할 것!

양수;음수;0      ;"Y";"N"

Posted by 엘세레네
컴활1급 문제풀이2017. 1. 18. 21:34

[입력수정]

[문제 1-3] 본문에 있는 'txt총합' 컨트롤에는 해당번호의 총합이 표시되도록 설정하시오

▶ <제품> 테이블과 'txt번호' 컨트롤, Dsum() 함수를 이용하여 구할 것

=Dsum("[필드]","테이블","[필드]=[컨트롤]") = Dsum("[재고]","제품","[번호]=[txt번호]")

 

▶ 'txt넘버' 컨트롤에는 포커스가 이동하지 않도록 설정하시오

포커스가 이동 -> 탭 정지

 

[조회출력]

[문제 2] <재고관리> 폼의 'txt조회'에 '넘버'를 입력하고 '조회' 버튼을 클릭하면 다음과 같이 동작하고록 이벤트 프로시저를 작성하시오

▶ 'txt조회' 컨트롤에 입력된 '넘버'를 포함하는 레코드가 조회되도록 할 것

▶ Filter, FilterOn 속성을 이용할 것

Me.Filter = "넘버 like '*" & txt_조회 & "*'"

Me.FilterOn = True

 

[처리기능]

[문제 3] <컨트롤> 폼의 't관리인' 컨트롤의 내용이 변경되면 다음과 같이 동작하고록 이벤트 프로시저를 구현하시오

▶ 메시지 박스(패널티 / 패널티를 부여하시겠습니까? / 예아니오)를 표시하고 '예'를 클릭하면 점수를 다시 계산하여 처리할 것

▶ '점수'가 90 이상인 경우에만 '점수'에 1점을 감할 것(이외의 경우는 변경되지 않고록 처리할 것)

▶ Before Update 이벤트로 구현할 것

a = MsgBox("패널티를 부여하겠습니까?", vbYesNo, "패널티")

If a = "Y" And "점수" >= 90 Then

점수 = 점수 - 1

Else

DoCmd.CancelEvent

End If

Posted by 엘세레네
컴활1급 문제풀이2017. 1. 17. 21:13

[DB구축]

[문제 3] <성적관리> 폼의 'cmd_저장'에 <저장> 매크로 구현

▶ inputbox로 형태를 입력받아 처리할 것

=inputbox("저장할 파일이름을 쓰시오" & chr(13) & C:\학생테이블.xlsx로 저장하시오")

 

[입력수정]

[문제 1] <성적관리> 폼 완성

▶ 본문의 'txt_등급' 컴트롤에 평균이 90점 이상이면 "A", 70점 미만이면 "C"가 표시되도록 설정하시오

=IIF([평균]>=90,"A"IIF([평균]>=80,"B","C"))

IF가 아니라 IIF인 것 잊지말기!!

 

▶ 전체보기  ->  M.FilterOn = False

맞았지만 다시 한 번 외우기!

 

[조회출력]

[문제 1] <학과별성적> 보고서 완성

▶ 페이지 바닥글의 'txt_날짜' 컨트롤에 시스템의 현재 날짜와 시간이 '2017-01-17 오후 08:30:23' 같이 표시되도록 설정하시오

=Now()  /  기본 날짜

날짜는 Date(), 날짜와 시간은 Now() 헷갈리지 말기!!

 

[처리기능]

[문제 1] <학과> 폼의 'cmd_삭제'에 이벤트 프로시저 작성

▶ DoCmd 개체의 RunSQL 메서드를 이용할 것

▶ 'txt_학과코드' 컨트롤에 입력된 데이터와 학과코드가 정확하게 동일한 경우에만 레코드를 삭제하도록 구현할 것

DoCmd.RunSQL "delete * from 학과 where 학과코드 = '" & txt_학과코드 & "'"

 

[문제 2] <미등록학과> 쿼리

▶ <학생>, <학과> 테이블을 이용하여 학생이 수강하지 않은 학과를 표시하는 <미등록학과> 쿼리를 작성하시오

1. 학과-학과, 학과-담당교수, 학생-학과 필드를 추가한다.

2. 관계선을 더블클릭하여 조인 설정을 2로 바꾼다.

3. 학생-학과 필드는 표시에 체크를 풀고, 조건에 'Is Null'을 입력한다  ->  빈 값이 검색되도록 한다

 

Posted by 엘세레네
컴활1급 문제풀이2017. 1. 16. 22:30

[조회출력]

[문제 2] <회원관리> 폼의 조회 버튼을 클릭할 때 다음과 같은 기능을 수행하도록 '조회' 매크로를 작성하시오.

▶ 현재 폼 데이터에 '부가서비스'가 'cmd_부가서비스'에 입력된 값과 동일한 레코드만을 표시하도록 하시오

[Forms]![회원관리]![cmd_부가서비스]=[부가서비스]

 

[처리기능]

[문제 1] 암호 폼의 'cmd_확인'에 이벤트 프로시저 작성

▶ 'txt_암호'에 입력한 문자가 "1234"이면 <회원정보> 폼을 열고 아니면 "암로가 잘못입력되었습니다!"라는 메시지 상자 표시

If Me.txt_암호 = "1234" Then

Docmd.openForm "회원정보",acNormal

Else

Msgbox ("암호가 잘못입력되었습니다!")

End If

 

[문제 2] <부가서비스> 인원

▶ <가입내역>,<회원신상명세> 2003년 6월 30일 이후에 가입한 회원들의 부가서비스별 인원을 조회하는 <부가서비스인원> 쿼리 작성.

가입일 - 조건 : >#2003-06-30#

질문 : 이후인데 왜 '>'일까? ㅠㅜ

 

기억해야 할 것 정리!

Select Case 식

Case 값1

값1일 때 실행할 명령문

Case 값2

값2일 때 실행할 명령문

Case Else

위의 조건이 모두 만족하지 않을 때 실행한 명령문

End Select

Posted by 엘세레네
컴활1급 문제풀이2017. 1. 16. 18:27

[계산작업 시트]

[문제 1] [표1]의 생년월일과 성별을 이용하여 [F3:F24] 영역에 주민번호를 계산하여 표시하시오

▶ 생년월일을 사용하여 앞 6자리를 계산하고, 8번째 자리는 성별이 "남"이면 1, "여"이면 2로 표시한 다음 뒤에 "******"를 표시하시오.

▶ 출생년도가 2000년 이상일 때, 성별이 "남"이면 3, "여"이면 4로 표시하시오.

▶ 2008-11-29, 성별이 "여"  ->  081129-3******

▶ IF, TEXT, YEAR 함수와 & 연산자 사용 

1. 앞 6자리를 구한다.       =TEXT(D3,"YYMMDD-")

2. 8번째 자리를 구한다.    =IF(E3="남",IF(YEAR(D3)>=2000,3,1),IF(YEAR(D3)>=2000,4,2))

3. 연산자로 이어준다.      =TEXT(D3,"YYMMDD-")&IF(E3="남",IF(YEAR(D3)>=2000,3,1),IF(YEAR(D3)>=2000,4,2))&"******"

 

[기타작업 시트]

[문제 2-3] 종료버튼을 클릭하면 워크시트의 [H5]셀에 "의료기관"을 입력한 후 폼을 종료하는 프로시저를 작성하시오

Private Sub cmd종료_Click()

[H5] = "의료기관"

Unload Me

End Sub

Posted by 엘세레네
컴활1급 문제풀이2017. 1. 15. 18:01

[기타작업 시트]

[문제 2-2] 폼이 초기화되면 'cmb보험분류'에는 [I6:I15], 'lst공제액'에는 [J5:K9]가 표시되도록 프로시저를 작성하시오

▶ 각 목록의 첫 번째 항목이 선택되도록 지정하시오.

Private Sub UserForm_Initialize()

cmb보험분류.RowSource = "I6:I15"

cmb보험분류 = "암보험"

lst공제액.RowSource = "J5:K9"

lst공제액.CloumnCount = 2

lst공제액 = lst공제액.List(0, 0)

End Sub

 

[문제 2-3]은 버리자...

Posted by 엘세레네
컴활1급 문제풀이2017. 1. 14. 23:26

[기타작업 시트]

[문제 2-3] '도서등록'폼의 등록 버튼을 클릭하면 폼에 입력된 데이터가 시트의 표에 입력되도록 프로시저를 작성하시오

▶ ListIndex와 List 속성을 이용하시오.

▶ 도서분류를 선택하지 않은 경우 메시지를 표시하고 도서분류의 첫 번째 항목을 선택하시오.

▶ 정가는 천단위마다 콤마를 표시하여 입력하시오.

Private Sub cmd등록_Click()

iRow = lst도서분류.ListIndex

i = Range("A4").CurrentRegion.Rows.Count + 4

If IsNull(lst도서분류.Value) Then

Msgbox "도서분류를 선택하세요."

lst도서분류.ListIndex = 0

Else

Cells(i,1) = lst도서분류.List(iRow,0)

Cells(i,2) = txt도서명

Cells(i,3) = txt저자

Cells(i,4) = txt출판일

Cells(i,5) = txt페이지수.Value

Cells(i,6) = Format(txt정가,"#,###")

End If

End Sub

Posted by 엘세레네
컴활1급 문제풀이2017. 1. 14. 20:26

[계산작업 시트]

[문제 2] [표1]의 학년, 강의과목과 [표2]의 할인율표를 이용하여 [G3:G32] 영역에 수강료 할인율을 계산하여 표시하시오

▶ HLOOKUP, MATCH 함수 사용

1. 강의과목을 표에서 찾는다.                                       (내림차순이라 -1)    =MATCH(F3,A36:A37,-1)  

2. 할인율을 계산한다.                            (과목이랑 행수가 차이나므로 +1)     =HLOOKUP(E3,B35:D37,MATCH(F3,A36:A37,-1)+1)  

3. 절대/상대/혼합참조로 수정 후 채우기 핸들을 이용하여 [표1]을 채워준다.    =HLOOKUP(E3,$B$35:$D$37,MATCH(F3,$A$36:$A$37,-1)+1)

 

[문제 3] [표1]의 현재강의수와 전체강의수를 이용하여 [K2:K32] 영역에 진행률을 계산하여 다음과 같이 표시하시오

▶ '현재강의수/전체강의수'의 값이 0.8일 경우 : ▶▶▶▶▶▶▶▶80.0%

▶ '현재강의수/전체강의수'의 값이 0.55일 경우 : ▶▶▶▶▶55.0%

▶ '현재강의수/전체강의수'의 값이 오류일 경우 : 신생강의

▶ REPT, TEXT, IFERROR 함수 사용

1. 삼각형을 먼저 구한다.                      =REPT("▶",(H3/J3)*10)

2. 값을 %로 나타낸다.                         =TEXT(H3/J3,"0.0%")

3. 두 식을 연산자를 사용해 붙여준다.    =REPT("▶",(H3/J3)*10)&TEXT(H3/J3,"0.0%")

4. 오류일 경우의 값을 지정해준다.        =IFERROR(REPT("▶",(H3/J3)*10)&TEXT(H3/J3,"0.0%"),"신생강의")

 

[문제 4] 사용자 정의 함수 'fn비고'를 작성하여 [표1]의 [L3:L32] 영역에 비고를 계산하여 표시하시오

▶ '수강인원/현재강의수'가 20 이상이면 "강의증설", 5 이하이면 "강의폐강", 그외에는 공백으로 표시하시오

▶ SELECT CASE 문 이용

1. 기본 구문을 작성한다.                          Public Function fn비고(현재강의수, 수강인원)

                                                           End Function

2. 기본 구문 사이에 조건문을 작성한다.     Select Case 수강인원 / 현재강의수

                                                           Case Is >= 20

                                                           fn비고 = "강의증설"

                                                           Case Is <= 5

                                                           fn비고 = "강의폐강"

                                                           Case Else

                                                           fn비고 = ""

                                                           End Select

3. 비고에 'fn비고' 함수를 사용하여 답을 구하고 채우기 핸들을 이용하여 [표1]을 채워준다.

 

[문제 5] [표1]의 강사명, 강의과목, 전체강의수를 이용하여 [표3]의 [G36:J38] 영역에 과목별 전체강의수별 강사명을 계산하여 표시하시오

▶ [표3]의 순위는 전체강의수가 많은 순으로 지정됨

▶ INDEX, MATCH, LARGE 함수를 적용한 배열 수식 사용

1. 과목별 전체강의수 순위를 구한다.     =LARGE((F3:F32=G35)*J3:J32,F36)

2. MATCH로 값의 위치를 구한다.         =MATCH(LARGE((F3:F32=G35)*J3:J32,F36),(F3:F32=G35)*J3:J32,0)

3. 찾은 값으로 강사명을 구한다.          =INDEX(D3:D32,MATCH(LARGE((F3:F32=G35)*J3:J32,F36),(F3:F32=G35)*J3:J32,0))

4. 절대/상대/혼합참조로 수정 후 채우기 핸들을 이용하여 [표3]을 채워준다.

    =INDEX($D$3:$D$32,MATCH(LARGE(($F$3:$F$32=G$35)*$J$3:$J$32,$F36),($F$3:$F$32=G$35)*$J$3:$J$32,0))

 

[기타작업 시트]

[문제 2-3] 종료 버튼을 클릭하면 현재 작업하는 시트의 [F2]셀에 시간을 제외한 현재 날짜를 입력한 후 폼을 종료하는 프로시저를 작성하시오

1. [F2]셀에 현재날짜를 입력하는 식을 작성한다.      [F2] = DATE

2. 폼을 종료하는 식을 작성한다.                              Unload Me

Posted by 엘세레네