목차
도메인 집계 함수 (D함수 계열)의 복잡한 조건식
액세스 D 함수 마스터하기
DLookup, DSum, DAvg... 이들은 테이블이나 쿼리의 특정 조건에 맞는 필드 값을 가져오거나 집계할 때 사용됩니다.
조건식 오류
문자열, 숫자, 날짜 형식의 따옴표 사용에 주의하세요.
도메인/필드 이름
정확한 필드 이름과 테이블/쿼리 이름을 지정해야 합니다.
Null 값 처리
조건에 맞는 데이터가 없을 때 발생하는 Null 값을 고려해야 합니다.
조건에 따른 값 반환 (IIF 함수)의 데이터 형식 불일치
논리적으로 참/거짓을 명확히 판별해야 합니다.
조건이 참일 때 반환될 값을 정의합니다.
조건이 거짓일 때 반환될 값을 정의합니다.
주의! 참일 때와 거짓일 때 반환되는 값의 데이터 형식을 일치시켜야 합니다.
날짜/시간 계산 함수 (DateDiff, DateAdd)의 인자 오류
컴활 실기 액세스에서는 특정 기간을 계산하거나 날짜에 특정 값을 더하는 문제가 자주 출제됩니다. 이때 사용되는 대표적인 함수가 바로 **DateDiff**와 **DateAdd** 함수입니다.문자열 처리 함수 (Left, Right, Mid, InStr)의 위치 및 길이 지정
문자열 함수 핵심 정리
Left(텍스트, 개수)
왼쪽부터 지정한 개수만큼 반환
예: Left("ABCDE", 2) → "AB"
Right(텍스트, 개수)
오른쪽부터 지정한 개수만큼 반환
예: Right("ABCDE", 2) → "DE"
Mid(텍스트, 시작위치, 개수)
시작 위치부터 지정한 개수만큼 반환
예: Mid("ABCDE", 2, 3) → "BCD"
InStr(시작위치, 텍스트1, 텍스트2)
텍스트2가 텍스트1에 처음 나타나는 위치 반환
예: InStr(1, "ABCDE", "CD") → 3
시작 위치는 1부터 시작한다는 점을 항상 기억해야 합니다.
집계 쿼리 (Sum, Avg, Count) 내 식 작성 및 Group By 활용
집계 쿼리 마스터하기
데이터를 그룹별로 요약하고 분석하는 핵심 기능입니다.
Sum, Avg, Count
- 숫자 필드의 합계, 평균 계산
- 조건에 맞는 레코드 수 세기
- Null 값 처리 방식 이해 필수
Group By
- 집계할 기준이 되는 필드 지정
- 모든 비집계 필드는 Group By에 포함
- 계산 필드를 Group By로 사용할 때 주의
핵심은 '무엇을 기준으로' 집계할 것인지 명확히 하고, 그 기준을 Group By 절에 정확히 명시하는 것입니다.
사용자 정의 함수(VBA) 및 매크로 연동 시 디버깅 문제
VBA와 매크로의 시너지
복잡한 비즈니스 로직 구현을 위한 필수 요소입니다.
VBA 사용자 정의 함수 (UDF)
- ✔️ 복잡한 계산 또는 조건 처리
- ✔️ 모듈에 Public Function으로 선언
- ✔️ 디버깅: F8 단계별 실행, Debug.Print 활용
매크로 연동
- ✔️ 버튼 클릭 시 특정 동작 실행
- ✔️ RunCode 액션으로 UDF 호출
- ✔️ 오류 메시지 확인 및 수정
VBA와 매크로는 엑셀의 프로시저와 유사하며, 논리적 오류를 잡아내는 꼼꼼함이 요구됩니다.
컴활 액세스, 정복할 수 있습니다!
액세스 함수는 처음에는 어렵게 느껴지지만, 반복적인 연습과 정확한 원리 이해를 통해 충분히 극복할 수 있는 부분입니다. 위에 제시된 자주 틀리는 유형들을 집중적으로 학습하고, 실제 기출문제를 통해 적용하는 연습을 꾸준히 한다면 좋은 결과를 얻으실 수 있을 겁니다. 포기하지 마세요!
자주 묻는 질문 (FAQ)
Q1. 컴활 1급 실기 액세스 함수의 공부 우선순위는 어떻게 되나요?
A1. 쿼리 작성 시 사용되는 D함수 계열, IIF, 그리고 날짜/문자열 함수가 가장 중요하며, 그 다음으로 집계 쿼리와 VBA 사용자 정의 함수 순으로 학습하는 것이 효율적입니다.
Q2. DLookup 함수에서 조건식을 필드 값과 비교할 때, 필드명을 대괄호([ ])로 묶어야 하나요?
A2. 네, 필드명은 대괄호로 묶는 것이 일반적이고 안전합니다. 예를 들어, `[필드명] = '조건'` 과 같이 사용합니다.
Q3. IIF 함수에서 '참일 때 값'과 '거짓일 때 값'이 Null인 경우 어떻게 처리해야 하나요?
A3. IIF 함수에서 Null을 반환하려면 문자열 "Null"이 아닌, Access 시스템의 Null 키워드를 그대로 사용해야 합니다. 예: `IIF([조건], Null, [필드값])`.
Q4. DateDiff 함수로 두 날짜의 '년' 차이를 계산했는데, 실제 나이와 다르게 나옵니다. 왜 그런가요?
A4. DateDiff("yyyy", 시작일, 종료일)은 단순히 '년도'의 차이를 계산하므로, 생일이 지나지 않아도 1살로 계산될 수 있습니다. 정확한 나이를 구하려면 IIF 함수를 중첩하여 생일 여부를 확인해야 합니다.
Q5. Mid 함수에서 '개수' 인자를 생략하면 어떻게 되나요?
A5. Mid 함수에서 '개수' 인자를 생략하면 '시작 위치'부터 문자열의 끝까지 모든 문자를 반환합니다. 필요한 경우에만 생략하고, 보통은 명시적으로 길이를 지정하는 것이 좋습니다.
Q6. InStr 함수에서 찾는 문자열이 없는 경우 어떤 값을 반환하나요?
A6. InStr 함수는 찾는 문자열이 원본 텍스트에 없는 경우 0을 반환합니다. 이를 이용하여 특정 문자의 존재 여부를 판단할 수 있습니다.
Q7. 집계 쿼리에서 Count(*)와 Count([필드명])의 차이는 무엇인가요?
A7. Count(*)는 모든 레코드의 수를 세는 반면, Count([필드명])은 해당 필드에 Null 값이 아닌 레코드의 수를 셉니다. Null 값을 포함할지 여부에 따라 선택하여 사용합니다.
Q8. Group By 절에 Select 절의 모든 비집계 필드를 포함해야 하는 이유는 무엇인가요?
A8. SQL 표준에 따라, 그룹화되지 않은 개별 레코드 값이 집계된 그룹 결과와 함께 표시될 경우 데이터의 모호성이 발생할 수 있기 때문에, 모든 비집계 필드는 그룹화 기준으로 사용되어야 합니다.
Q9. VBA 사용자 정의 함수를 만들었는데 쿼리에서 "정의되지 않은 함수입니다"라는 오류가 발생해요.
A9. 대부분 함수 이름의 오타, Public Function 키워드 누락, 또는 매개변수 데이터 형식 불일치 때문입니다. VBA 모듈에서 [디버그] - [컴파일]을 통해 구문 오류를 확인하고 함수 정의를 정확하게 다시 확인하세요.
Q10. 매크로에서 RunCode 액션으로 VBA 함수를 호출할 때 인자를 어떻게 전달하나요?
A10. RunCode 액션의 '함수 이름' 인자에 `함수명(인자1, 인자2, ...)` 형식으로 직접 작성합니다. 이때 각 인자는 VBA 함수 정의의 매개변수 순서와 데이터 형식에 맞게 전달해야 합니다.
---Q11. DSum 함수에서 여러 조건을 동시에 적용하려면 어떻게 해야 하나요?
A11. DSum 함수의 조건식 인자 내에서 `And`나 `Or` 연산자를 사용하여 여러 조건을 연결할 수 있습니다. 예: `"필드1 = '조건1' And 필드2 > 100"`.
Q12. IIF 함수를 중첩하여 3개 이상의 조건에 따라 다른 값을 반환하고 싶으면 어떻게 하나요?
A12. IIF 함수는 엑셀의 IF처럼 중첩하여 사용할 수 있습니다. `IIF(조건1, 값1, IIF(조건2, 값2, 값3))`와 같이 거짓일 때 값 자리에 다른 IIF 함수를 넣습니다.
Q13. DateAdd 함수로 특정 날짜의 다음 달 1일을 구하는 방법은 무엇인가요?
A13. 먼저 `DateAdd("m", 1, [현재날짜])`로 다음 달을 구한 후, `DateSerial(Year(다음달), Month(다음달), 1)`을 사용하여 그 달의 1일을 만듭니다.
Q14. Left 함수와 InStr 함수를 조합하여 특정 구분자 앞의 문자열을 추출하는 예시를 알려주세요.
A14. `Left([텍스트필드], InStr([텍스트필드], "구분자") - 1)`와 같이 사용하면 구분자 바로 앞까지의 문자열을 추출할 수 있습니다.
Q15. 집계 쿼리에서 '총합계'를 구하려면 어떻게 하나요?
A15. 쿼리 디자인 보기에서 '요약' 행을 추가하고, 합계를 구할 필드의 '요약' 셀을 'Sum'으로 설정합니다. 그룹화 기준이 되는 필드는 '그룹화'로 둡니다.
Q16. Access의 Format 함수는 엑셀의 TEXT 함수와 유사한가요?
A16. 네, Access의 Format 함수는 엑셀의 TEXT 함수처럼 숫자, 날짜, 시간 값을 특정 형식의 문자열로 변환하는 데 사용됩니다. 날짜 형식 지정 시 "yyyy-mm-dd", 숫자 형식 지정 시 "#,##0" 등을 활용합니다.
Q17. VBA에서 Option Explicit 선언은 왜 중요한가요?
A17. Option Explicit을 선언하면 모든 변수를 명시적으로 선언해야 하므로, 변수 오타로 인한 오류를 방지하고 코드의 가독성 및 유지보수성을 높이는 데 도움이 됩니다.
Q18. 매크로에서 메시지 박스를 띄우는 방법은 무엇인가요?
A18. 매크로 디자이너에서 'MsgBox' 액션을 추가하고, '메시지' 인자에 표시할 텍스트를 입력합니다. '경고음', '유형', '제목' 등을 설정할 수 있습니다.
Q19. 컴활 실기 액세스에서 쿼리를 작성할 때 대소문자 구분을 해야 하나요?
A19. Access 쿼리에서 기본적으로 필드명이나 테이블명은 대소문자를 구분하지 않습니다. 하지만 조건식의 문자열 값은 대소문자를 구분할 수 있으므로 주의해야 합니다.
Q20. Null 값을 0으로 바꾸거나 특정 값으로 대체하는 함수는 무엇인가요?
A20. Access에서는 **Nz 함수**를 사용하여 Null 값을 다른 값으로 대체할 수 있습니다. 예를 들어, `Nz([필드명], 0)`은 [필드명]이 Null이면 0을 반환합니다.
---Q21. DCount 함수로 특정 조건에 맞는 레코드 수를 세는 방법은 무엇인가요?
A21. DCount 함수를 사용하며, 필드명 대신 `"*"`를 첫 번째 인자로 사용하고 두 번째와 세 번째 인자에 테이블/쿼리 이름과 조건식을 넣습니다. 예: `DCount("*", "테이블명", "조건식")`.
Q22. Left, Right 함수에서 추출하려는 길이가 원본 문자열 길이보다 길면 어떻게 되나요?
A22. 추출하려는 길이가 원본 문자열의 길이보다 길더라도 오류가 발생하지 않고, 원본 문자열 전체를 반환합니다. 즉, 텍스트의 끝을 넘어가지 않습니다.
Q23. DateDiff 함수에서 "ww" (주 단위) 인터벌 사용 시 주의할 점이 있나요?
A23. "ww" 인터벌은 일요일을 기준으로 주의 경계를 판단합니다. 특정 요일로 시작하는 주를 기준으로 하려면 `FirstDayOfWeek` 인자를 추가로 지정해야 합니다.
Q24. 쿼리에서 계산 필드를 만들 때, 필드명에 공백이 있으면 어떻게 해야 하나요?
A24. 계산 필드의 이름에 공백이 포함될 경우, 해당 필드명을 대괄호([ ])로 묶어야 합니다. 예: `[총 판매 금액]: [단가] * [수량]`.
Q25. VBA에서 함수를 테스트할 수 있는 가장 간단한 방법은 무엇인가요?
A25. VBA 편집기에서 '직접 실행 창(Ctrl+G)'을 열어 `?함수명(인자)` 형식으로 함수를 직접 호출하여 반환 값을 확인할 수 있습니다.
Q26. 액세스에서 조건부 서식을 폼이나 보고서에 적용하는 방법은 무엇인가요?
A26. 폼이나 보고서 디자인 보기에서 컨트롤을 선택한 후 [서식] 탭의 [조건부 서식]을 클릭하여 규칙을 설정합니다. 조건식에 함수를 활용할 수도 있습니다.
Q27. D 함수 계열 사용 시 성능상 주의할 점이 있나요?
A27. D 함수는 데이터를 레코드 단위로 탐색하므로, 대량의 데이터에 반복적으로 사용하면 성능 저하가 발생할 수 있습니다. 가능한 경우 집계 쿼리나 조인(Join)을 활용하는 것이 더 효율적입니다.
Q28. 집계 쿼리에서 Sum 함수가 Null 값을 어떻게 처리하나요?
A28. Sum 함수는 Null 값을 무시하고 계산합니다. 즉, Null 값은 합계에 포함되지 않습니다. 만약 Null을 0으로 간주하여 합산하고 싶다면 Nz 함수를 함께 사용해야 합니다.
Q29. InStrRev 함수는 InStr 함수와 어떤 차이가 있나요?
A29. InStr 함수는 문자열의 시작부터 찾는 문자열의 첫 번째 발생 위치를 반환하는 반면, InStrRev 함수는 문자열의 끝에서부터 역방향으로 탐색하여 첫 번째 발생 위치(문자열 시작 기준)를 반환합니다.
Q30. 액세스에서 날짜를 비교할 때 `#` 기호를 사용하는 이유가 무엇인가요?
A30. `#` 기호는 Access에서 날짜/시간 리터럴을 명시적으로 구분하는 역할을 합니다. 이를 통해 Access는 해당 값이 텍스트가 아닌 날짜/시간 데이터로 인식하여 올바른 비교 및 계산을 수행합니다.
Disclaimer: 본 포스팅은 컴활 1급 실기 액세스 함수 학습에 도움을 드리고자 작성되었습니다. 시험의 출제 경향은 수시로 변동될 수 있으며, 제공된 정보는 참고용으로만 활용하시기 바랍니다. 정확한 최신 정보는 대한상공회의소 공식 자료를 확인해 주세요.