에너지 관점 스터디:에관스

컴활 1급 · Access 콤보 상자

ListIndex는 선택 행, ListCount는 전체 행 수, ItemData는 바운드 열 값입니다

두음 암기는 `인선·카총·아이값`입니다. ListIndex는 선택한 행의 위치, ListCount는 목록의 총 행 수, ItemData는 지정한 행의 바운드 열 값을 돌려줍니다.

재미 문장은 `인선이는 카운터에서 총 몇 줄인지 세고 아이 값을 꺼낸다`입니다. 시험장에서는 선택 위치-전체 개수-행의 값 세 단계로 다시 번역하세요.

결론부터 말하면 첫 행은 ListIndex 0이고 마지막 행의 번호는 ListCount-1입니다. `ItemData(ListIndex)`는 현재 선택된 행의 BoundColumn 값을 돌려주며, 바운드 열이 아닌 다른 열 값이 필요하면 `Column(열, 행)`을 사용합니다.

컴활 1급 Access ListIndex ListCount ItemData를 선택 행 전체 행 수 바운드 열 값으로 비교한 인포그래픽
인선·카총·아이값으로 ListIndex의 선택 위치, ListCount의 전체 개수, ItemData의 바운드 열 값을 구분합니다.
작성에관스 컴활 1급 학습팀 발행2026년 8월 11일 수정2026년 8월 17일 주제Access 콤보 상자

핵심 포인트

이 글에서 먼저 챙길 것

  • ListIndex는 현재 선택한 행을 0부터 세는 위치 번호입니다.
  • ListCount는 RowSource가 만든 목록의 전체 행 수입니다.
  • ItemData(행)는 지정한 행의 BoundColumn 값을 반환합니다.
  • 전체 반복 범위는 0부터 ListCount-1까지입니다.
  • 바운드 열이 아닌 값을 꺼낼 때는 Column(열, 행)을 사용합니다.

본문

컴활 1급 공부 기준을 더 구체적으로 보기

이 글이 필요한 사람

컴활 1급 Access 프로시저 문제에서 ListIndex와 ListCount를 같은 숫자로 착각하거나 ItemData 괄호 안에 열 번호를 넣는 사람에게 맞는 글입니다. 세 항목은 모두 목록을 다루지만 위치·개수·값이라는 결과가 다릅니다.

기존 `BoundColumn·ColumnCount·ColumnWidths 차이` 글은 저장 열·열 개수·열 폭을 맡고, `LimitToList·AutoExpand·NotInList 차이` 글은 입력 제한·자동 완성·목록 외 처리를 맡습니다. 이 글은 목록이 준비된 뒤 선택 행과 행 수, 행 값을 VBA에서 읽는 방법만 담당합니다.

검색에서는 `컴활 ListIndex`, `ListCount ItemData`, `Access 콤보 상자 선택 값`처럼 코드 한 줄의 의미를 묻는 질문이 반복됩니다. 먼저 결과가 위치인지 개수인지 값인지 표시하면 식을 외우지 않아도 정답을 좁힐 수 있습니다.

두음 암기부터 잡으세요: 인선·카총·아이값

`인선`은 ListIndex-선택 행, `카총`은 ListCount-총 행 수, `아이값`은 ItemData-지정 행의 값을 연결합니다. 이름의 Index·Count·Data를 각각 위치·개수·데이터로 번역한 두음입니다.

문제를 질문으로 바꾸면 더 빠릅니다. `몇 번째 행을 골랐나`는 ListIndex, `목록에 몇 행이 있나`는 ListCount, `그 행의 실제 값은 무엇인가`는 ItemData입니다.

ListIndex와 ItemData는 함께 자주 쓰이지만 같은 결과가 아닙니다. ListIndex가 2라면 세 번째 행을 골랐다는 뜻이고, ItemData(2)는 세 번째 행의 바운드 열 값을 반환합니다.

세 항목은 위치·개수·값으로 나눕니다

ListIndex는 사용자가 선택한 행이 목록에서 어디에 있는지를 나타냅니다. 숫자 자체는 업무 데이터가 아니라 목록 안의 위치입니다.

ListCount는 콤보 상자나 목록 상자에 들어 있는 전체 행의 수입니다. 특정 행을 선택했는지와 상관없이 RowSource와 RowSourceType이 만든 목록의 크기를 셉니다.

ItemData(Index)는 Index로 지정한 행의 BoundColumn 데이터를 반환합니다. 따라서 위치 번호를 실제 코드·이름 같은 값으로 바꾸는 단계라고 이해하면 됩니다.

ListIndex는 첫 행을 0으로 세는 선택 위치입니다

Microsoft Learn에 따르면 ListIndex는 현재 선택한 항목을 판별하는 읽기 전용 Long 값이며, 첫 번째 항목은 0, 두 번째 항목은 1로 셉니다. 화면에서 보이는 첫 줄을 1로 계산하면 한 줄씩 밀립니다.

목록에 5개 항목이 있다면 선택 가능한 행 번호는 0·1·2·3·4입니다. ListCount는 5이지만 마지막 ListIndex는 4라는 차이를 항상 붙여야 합니다.

BoundColumn을 0으로 설정하면 Access는 열 값 대신 ListIndex 값을 컨트롤 값으로 사용할 수 있습니다. 일반적인 BoundColumn은 열 번호를 1부터 세지만 ListIndex는 행 위치를 0부터 센다는 점이 핵심 함정입니다.

ListCount는 목록에 들어 있는 전체 행 수입니다

Microsoft Learn은 ListCount를 콤보 상자의 목록 부분이나 목록 상자에 들어 있는 행 수로 설명합니다. 이 값은 RowSource와 RowSourceType이 만든 결과에 따라 정해지며 사용자가 직접 설정하는 값이 아닙니다.

RowSourceType이 Table/Query라면 테이블이나 쿼리 결과 레코드 수가 기준입니다. Value List라면 RowSource에 적은 값과 ColumnCount 구성이 만들어 낸 행 수가 기준입니다.

ListCount는 `선택된 행의 번호`가 아닙니다. 목록에 20행이 있고 사용자가 첫 행을 골랐다면 ListCount는 20, ListIndex는 0입니다.

반복문은 0 To ListCount-1로 작성합니다

목록의 모든 행을 순회할 때는 `For i = 0 To Me!cbo부서.ListCount - 1`처럼 시작합니다. 첫 행 번호가 0이고 마지막 행 번호가 전체 개수보다 하나 작기 때문입니다.

`0 To ListCount`로 쓰면 마지막 반복에서 존재하지 않는 행을 한 번 더 읽게 됩니다. 반대로 `1 To ListCount-1`로 쓰면 첫 번째 행을 빼먹습니다.

시험 직전에는 `개수는 n, 위치는 0부터 n-1`이라고 말해 보세요. 배열·목록 문제에서 반복 범위를 정하는 가장 짧은 공식입니다.

ItemData는 지정한 행의 BoundColumn 값을 반환합니다

Microsoft Learn에 따르면 ItemData(Index)는 지정한 행의 바운드 열 데이터를 반환하는 읽기 전용 Variant입니다. ItemData(5)는 여섯 번째 행의 값을 뜻하므로 괄호 안 Index도 0부터 셉니다.

현재 선택된 행의 값을 읽으려면 `Me!cbo부서.ItemData(Me!cbo부서.ListIndex)`처럼 두 속성을 연결할 수 있습니다. ListIndex가 행 위치를 주고 ItemData가 그 위치의 실제 바운드 값을 꺼냅니다.

ItemData의 괄호 안에는 열 번호가 아니라 행 번호가 들어갑니다. 열을 선택하는 기준은 BoundColumn이며, 이 역할 경계를 바꾸어 낸 보기가 자주 오답이 됩니다.

다른 열 값이 필요하면 Column(열, 행)을 사용합니다

ItemData는 항상 BoundColumn 값을 반환합니다. 같은 행의 다른 열을 읽어야 한다면 Microsoft Learn이 안내하는 Column 속성을 사용합니다.

예를 들어 첫 열이 부서코드, 두 번째 열이 부서명이고 현재 선택 행의 부서명이 필요하다면 `Me!cbo부서.Column(1, Me!cbo부서.ListIndex)`처럼 접근할 수 있습니다. Column의 열·행 인덱스는 모두 0부터 셉니다.

`ItemData=바운드 열`, `Column=지정 열`로 구분하세요. 저장 열을 바꾸는 BoundColumn과 단순히 다른 열을 읽는 Column 코드를 같은 작업으로 보면 안 됩니다.

ColumnHeads가 있으면 ListCount 함정을 확인합니다

Microsoft Learn에 따르면 Table/Query 기반 목록에서 ColumnHeads=Yes이면 열 머리글 행이 ListCount에 추가될 수 있습니다. 따라서 화면의 데이터 행 수와 ListCount가 한 행 차이 나는 원인이 될 수 있습니다.

Value List에서는 ColumnHeads=Yes로 바꾸면 첫 번째 값 행이 머리글로 사용되고 ListCount 자체는 그대로일 수 있습니다. 같은 ColumnHeads라도 RowSourceType에 따라 세는 방식이 다릅니다.

일반 시험 문제에서는 먼저 0부터 ListCount-1 공식을 적용하되, 행 수가 예상과 다르면 ColumnHeads와 RowSourceType을 함께 확인하세요.

ListRows와 ListCount도 같은 개수가 아닙니다

ListCount는 목록에 실제로 존재하는 전체 행 수이고 ListRows는 드롭다운을 열었을 때 한 번에 보여 줄 행 수입니다. 목록이 30행이어도 ListRows를 8로 설정하면 화면에는 8행 높이만 보이고 스크롤로 나머지를 확인합니다.

Microsoft Learn의 예제도 ListCount가 8보다 작으면 ListRows를 ListCount에 맞추고, 크면 ListRows를 8로 제한합니다. 전체 데이터 개수와 화면 표시 높이를 나눈 예입니다.

이번 글의 소유 범위는 ListIndex·ListCount·ItemData입니다. ListRows·ListWidth 같은 표시 크기 속성은 후속 가이드에서 별도로 다루고 여기서는 ListCount와의 경계만 확인합니다.

시험 직전에는 6줄로 복습하세요

첫째, 두음은 `인선·카총·아이값`입니다. 둘째, ListIndex는 선택 행 위치이고 첫 행은 0입니다. 셋째, ListCount는 전체 행 수입니다.

넷째, 마지막 행 번호는 ListCount-1입니다. 다섯째, ItemData(행)는 그 행의 BoundColumn 값입니다. 여섯째, 다른 열은 Column(열, 행)로 읽습니다.

마지막으로 ListCount는 데이터 전체 개수, ListRows는 화면에 한 번에 보일 행 수입니다. 위치-개수-값-표시 높이를 분리하면 콤보 상자 코드를 빠르게 해석할 수 있습니다.

FAQ

자주 묻는 질문

ListIndex와 ListCount의 차이는 무엇인가요?

ListIndex는 현재 선택한 행의 0 기반 위치이고 ListCount는 목록 전체 행 수입니다. 5개 목록의 마지막 행을 선택하면 ListIndex는 4, ListCount는 5입니다.

ItemData 괄호 안에는 행 번호와 열 번호 중 무엇이 들어가나요?

행 번호가 들어갑니다. ItemData(Index)는 지정한 행의 BoundColumn 값을 반환합니다. 다른 열을 지정하려면 Column(열, 행)을 사용합니다.

목록 전체를 반복할 때 왜 ListCount-1까지 쓰나요?

행 번호가 0부터 시작하기 때문입니다. 전체가 n행이면 유효한 행 번호는 0부터 n-1까지이므로 `For i = 0 To ListCount - 1`이 됩니다.

ListCount와 ListRows는 같은 속성인가요?

아닙니다. ListCount는 목록의 전체 행 수이고 ListRows는 콤보 상자를 펼쳤을 때 한 번에 표시할 행 수입니다.