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"을 합니다.
A1
Sheet1
내 " 셀 내 "2A1
2의 셀 트 2 셀 "3"A1
시트 3 의 - 는 이름의 .
CellA1
범위 포함)을=!$A$1
- 입력
=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
'itsource' 카테고리의 다른 글
Bitnami의 Wordpress 도커 설정을 통한 지속성 (0) | 2023.08.30 |
---|---|
PowerShell에서 일부 파일 및 폴더를 제외한 재귀 디렉터리 및 파일 목록을 검색하는 방법은 무엇입니까? (0) | 2023.08.30 |
문자열에서 하위 문자열을 일치시키는 방법, 대소문자 무시 (0) | 2023.08.30 |
유동적인 웹사이트는 더 이상 만들 가치가 있습니까? (0) | 2023.08.30 |
JavaScript URL 디코드 기능 (0) | 2023.08.30 |