itsource

Excel VBA:워크북 범위, 워크시트에 따라 명명된 공식/지정된 범위(활성 워크시트에 따라 결과가 변경됨)

mycopycode 2023. 8. 30. 21:41
반응형

Excel VBA:워크북 범위, 워크시트에 따라 명명된 공식/지정된 범위(활성 워크시트에 따라 결과가 변경됨)

편집: 제목이 명확하게 변경되었습니다.

빠른 요약:워크북 범위의 워크시트에 종속된 명명식(아래에서 설명)의 동작이 Excel에서 문서화된 기능인지 알고 싶습니다.그렇다면, 어딘가에 있는 설명서 방향을 알려주십시오. 온라인에서 이에 대한 내용을 찾을 수 없습니다(아마도 제가 잘못된 검색 용어를 사용하고 있는 것 같습니다.).?) 그리고 실제로 버그이고 이후 버전에서 사라질 수 있는 것을 사용하고 싶지 않습니다!

엄밀히 말하면 이것은 VBA에 대한 질문이 아닙니다. 하지만 명명된 공식은 저와 다른 사람들이 VBA 코드에서 항상 사용하는 것이기 때문에 제가 생각하는 주제에 여전히 적용할 수 있습니다.

편집: 아래 VBA 코드가 정확하지 않을 수 있습니다. 테스트하지 않았습니다.

일반 방법

엔지니어링/과학적 계산을 위해 동일한 워크북에서 동일한 명명식/범위를 여러 번 사용해야 했지만 워크시트는 서로 다릅니다.간단한 예로 원의 영역에 대해 다음과 같은 것을 구현할 수 있습니다.

Dim sht as Worksheet
For Each sht In ThisWorkbook
    Call sht.Names.Add(Name:="AreaCircle",RefersTo:="=PI()*'" & _
            sht.Name & "'!Radius^2")
Next sht

따라서 다음과 같은 명명된 범위/공식 집합(각 워크시트로 범위 지정)이 생성됩니다.

=PI()*Sheet1!Radius^2        <--- scoped to Sheet1
=PI()*Sheet2!Radius^2        <--- scoped to Sheet2
etc. etc.

물론 이것은 잘 작동하지만, 미래의 변화를 만들기 어렵다는 큰 단점이 있습니다.예를 들어, 만약 공식이 바뀐다면 (원의 면적은 물론 변하지 않을 것입니다!)그러나 예를 들어, AASHTO LRFD 고속도로 설계 코드의 공식은 거의 모든 버전을 변경합니다!), 저는 모든 이름 공식의 모든 인스턴스를 편집해야 합니다.VBA 절차를 작성해도 지루합니다.

대체 방법

일전에 엑셀 2013에서 사고로 아래 내용을 발견했는데 온라인 어디에서도 찾을 수 없었습니다.이것은 제가 그것을 사용하기 시작하는 것을 망설이게 만듭니다.

대신 다음과 같은 코드 한 줄을 실행한다고 가정합니다.

Call ThisWorkbook.Names.Add(Name:="AreaCircle",RefersTo:="=PI()*!Radius^2")

따라서 다음과 같은 단일 명명된 범위/식(워크북에 적용됨)이 생성됩니다.

=PI()*!Radius^2<--- 공식은 워크북으로 범위가 지정됩니다.!Radius,것은 아니다.Radius.

이는 다음과 같지 않습니다( 느낌표 없음).

=PI()*Radius^2<--- 여기참고:Radius워크북으로 범위가 지정됩니다.

지금이다,AreaCircle위의 첫 번째 방법과 동일한 동작을 생성합니다. 워크시트에서 정의한 로컬 값인 Radius를 기반으로 결과를 생성합니다.그래서 만약 두 개의 명명된 범위가 있다면,Radius(하나는 에 해당)Sheet1는 고하나는리그▁for.Sheet2),AreaCircle됩니다.Radius사용 중인 시트에 표시됩니다.또한 새로운 워크시트를 추가할 때마다 공식의 새 버전을 더 이상 추가할 필요가 없다는 추가적인 이점이 있습니다.

이 동작은 설명하기 어려운 동작입니다. 제 설명이 헷갈릴 경우 다음 단계를 수행하여 이 동작을 다시 만들 수 있습니다.

  1. 를 두 개한 후 셀 "1에 "1"을 합니다.A1Sheet1 내 " 셀 내 "2A12의 셀 트 2 셀 "3"A1시트 3 의
  2. 는 이름의 .CellA1범위 포함)을=!$A$1
  3. 입력=CellA1이든 든이 모에니 "1" 생합 다발서셀다니 "1"에 ".Sheet1결과적으로 "2"가 됩니다.Sheet2 등등 »

문서화?

이봐, 당신이 해냈어요 - 여기서 함께 해줘서 고마워요!

위에서 언급했듯이, 누가 이 "기능"에 대한 설명서를 알려줄 수 있습니까?저는 이것을 좀 더 복잡한 프로젝트에서 구현하기 시작하고 싶습니다. 다른 것이 없다면 이름 관리자를 약 20배 더 쉽게 탐색할 수 있습니다(모든 중복 이름 없이).

설명서에 대해서는 이름기타 워크시트 공식 평가를 참조하십시오.

  • =A1.
  • =!A1 셀 을 .

워크시트 참조와 함께

  • 현재는 Excel이 다시 계산하는 것을 의미합니다...
  • 활성은 사용자가 보고 있는 것을 나타냅니다...

이것이 찰스 윌리엄스가 보여준 것입니다.사용 사례에 대해서는, 예를 들어 VBA에서 사용자 정의 기능을 권장합니다.

사용에 주의해야 합니다!이름의 참조:
로 시작하는 가 있는 이름은 될 때 가 나올 수. refer-to-to-to =!는 VBA에서 호출됩니다. 중인 됩니다.

시트 1의 셀 A1에 1을 넣습니다.
담다=CellA1표 1의 A2에서 셀 A1은 다음과 같이 정의됩니다.=!$A$1
수동 계산으로 전환
시트 2 활성화
이 VBA 코드 실행

Sub Testing()
Worksheets("Sheet1").Range("a1") = 8
Application.Calculate
End Sub

이제 시트 1로 다시 전환하면 시트 1이 표시됩니다!A2에는 Sheet2에 있던 내용이 포함됩니다!A1

간접()을 사용하면 이 문제를 피할 수 있습니다.
당사의 Name Manager addin은 이러한 종류의 구문 사용을 감지하고 경고합니다.

언급URL : https://stackoverflow.com/questions/22920090/excel-vba-workbook-scoped-worksheet-dependent-named-formula-named-range-resul

반응형