명명된 범위의 이름이 동적일 수 있나요?

명명된 범위의 이름이 동적일 수 있나요?

Excel에서 명명된 범위의 이름이 동적이기를 바랍니다(범위 자체가 아니라!). 수식이나 참조 셀을 사용하여 범위 이름을 정의하여 참조 셀의 내용이 변경되면 이름도 변경되도록 정의할 수 있는지/방법을 알고 싶습니다.

예:열에 목록을 작성하고 다음과 같이 열 상단에 목록 제목을 쓰면:

     A
1 *Colours*
2  Red
3  Yellow
4  Blue

그런 다음 목록 제목(A1) 뒤에 목록의 셀 범위 이름(A2:A4)을 지정합니다. 그런 다음 목록 제목이 변경되면 범위 이름이 자동으로 변경되도록 합니다(예: 범위 이름 = A1 및 A1의 내용이 변경되면 이름도 변경됩니다.

추가 정보내 구체적인 사례에 대해: 나는 명명된 범위를 사용하여 다른 사람이 사용할 수 있는 Excel 스프레드시트에 여러 종속 및 동적 드롭다운 목록을 만들고 있습니다. 사용자가 기존 목록(지원 목록 워크시트)에 항목을 추가하려는 경우 드롭다운 목록(기본 테이블 워크시트)이 자동으로 변경되도록 모두 설정되어 있습니다. 그러나 다음 과제는 사용자가 새 목록을 쉽게 추가할 수 있도록 만드는 것입니다. 내 계획은 이미 설정된 예비 목록 열(지원 목록 워크시트에 있음)을 제공하여 채워지면 자동으로 드롭다운 목록(기본 테이블 워크시트에 있음)으로 바뀌도록 하는 것입니다. 모든 데이터 검증 수식(명명된 범위 사용)은 기본 테이블 워크시트에 드롭다운 목록을 생성하도록 설정되어 있으며, 누락된 단계는 사용자가 새 목록 제목을 입력하면 목록 범위의 자동 이름 지정입니다. 기본 테이블에 표시된 드롭다운 목록은 사용자의 이전 선택에 따라 달라지므로 내 데이터 유효성 검사 수식에서는 명명된 범위를 사용해야 합니다.

어떤 힌트라도 주시면 정말 감사하겠습니다!

답변1

이는 A1의 값이 수식으로 설정되지 않고 입력된다고 가정합니다. 워크시트 코드 영역에 다음 이벤트 매크로를 입력합니다.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim str As String
    str = Range("A1").Text
    If Intersect(Range("A1"), Target) Is Nothing Then Exit Sub
    Dim n As Name
    For Each n In ActiveWorkbook.Names
        If n.RefersTo = "=Sheet1!$A$2:$A$4" Then
            n.Delete
        End If
    Next n
    ActiveWorkbook.Names.Add Name:=str, RefersTo:="=Sheet1!$A$2:$A$4"
End Sub

워크시트 코드이므로 설치가 매우 쉽고 자동으로 사용됩니다.

  1. Excel 창 하단 근처에 있는 탭 이름을 마우스 오른쪽 버튼으로 클릭합니다.
  2. 코드 보기를 선택하면 VBE 창이 나타납니다.
  3. 내용을 붙여넣고 VBE 창을 닫습니다.

고민이 된다면 먼저 시험 워크시트에서 시도해 보세요.

통합 문서를 저장하면 매크로도 함께 저장됩니다. 2003 이후 Excel 버전을 사용하는 경우 파일을 .xlsx가 아닌 .xlsm으로 저장해야 합니다.

매크로를 제거하려면:

  1. 위와 같이 VBE 창을 불러옵니다.
  2. 코드를 지워라
  3. VBE 창을 닫습니다

일반적인 매크로에 대해 자세히 알아보려면 다음을 참조하세요.

http://www.mvps.org/dmcritchie/excel/getstarted.htm

그리고

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

이벤트 매크로(워크시트 코드)에 대해 자세히 알아보려면 다음을 참조하세요.

http://www.mvps.org/dmcritchie/excel/event.htm

이 작업을 수행하려면 매크로를 활성화해야 합니다.!

편집#1:

A1 및 B1을 이름으로 사용하려면 다음을 바꾸십시오.

str = Range("A1").Text

와 함께:

str = Range("A1").Text & Range("B1").Text

관련 정보