- 공유 링크 만들기
- X
- 이메일
- 기타 앱
이 글의 목적은 엑셀 ‘시나리오 관리자(Scenario Manager)’에서 시나리오가 추가되지 않거나 저장되지 않는 문제의 근본 원인을 체계적으로 진단하고, 현장에서 즉시 적용 가능한 해결 절차와 점검 스크립트, 모범 구성 패턴을 제공하는 것이다.
시나리오 관리자 동작 원리 요약
시나리오 관리는 “변경 셀(Changing Cells)”에 서로 다른 값을 저장해 놓고 필요 시 불러와서 모델의 결과를 비교·분석하는 기능이다. 변경 셀은 입력값이 위치한 셀이며, 시나리오에는 각 변경 셀의 값 세트가 한 번에 저장된다. 시나리오 추가 실패는 대개 변경 셀의 성격·형식·보호 상태·공유 설정·호환성 문제로 발생한다.
증상 정의
- ‘시나리오 추가’ 버튼을 눌러도 저장되지 않거나, 대화상자를 닫으면 목록에 나타나지 않는다.
- “변경 셀을 지정할 수 없습니다”, “셀을 변경할 수 없습니다”, “이 통합 문서에서는 사용할 수 없습니다” 등의 경고가 출력된다.
- 시나리오 이름을 입력해도 중복 경고 또는 무응답 상태가 된다.
가장 흔한 원인과 영향
| 원인 | 영향 | 빠른 확인 | 즉각 조치 |
|---|---|---|---|
| 시트 또는 통합 문서 보호(Locked) | 변경 셀에 값 기록 불가, 추가 시 무반응/오류 | 리본 > 검토 > 시트 보호 해제 상태 확인 | 보호 해제 후 변경 셀 ‘잠금’ 해제 후 재시도 |
| 변경 셀에 수식 존재 | 시나리오가 수식 셀에 값을 쓸 수 없어 실패 | 해당 범위에 “=” 시작 여부 검사 | 입력 셀과 계산 셀 분리, 입력 셀만 변경 셀로 선택 |
| 병합 셀 포함 | 주소 해석 실패, 기록 충돌 | 선택 영역에서 병합 상태 확인 | 병합 해제 후 개별 셀로 구성 |
| 테이블(ListObject) 전체 열/구조적 참조를 변경 셀로 지정 | 가변 범위로 인한 시나리오 주소 고정 실패 | 범위가 Table1[Column] 형태인지 확인 | 테이블을 범위로 변환하거나 구체 셀 주소로 지정 |
| 공유 통합 문서(레거시) 또는 공동 편집 모드 | 일부 분석 기능 비활성화 | 상태 표시줄 공동 편집, OneDrive 동시 편집 여부 확인 | 공동 편집 해제 또는 로컬 단독 편집본에서 작업 |
| 변경 셀 개수 제한 초과 | 시나리오 정의 저장 실패 | 선택한 변경 셀 수 확인 | 핵심 입력만 추려서 개수 축소 |
| 이름 충돌 또는 잘못된 시나리오 이름 | 저장 시 덮어쓰기 경고 또는 미저장 | 기존 시나리오 목록·정의 이름 확인 | 고유한 짧은 영문/숫자 이름 사용 |
| 외부 링크/폐쇄된 참조 포함 | 평가 지연, 대화상자 비정상 종료 | 데이터 > 쿼리·연결·연결 편집 확인 | 링크 해제 또는 값 고정 후 시나리오 정의 |
| 파일 형식/호환성 문제(.xls·호환 모드) | 기능 제한, 저장 실패 | 제목 표시줄에 “호환 모드” 표시 확인 | .xlsx로 저장 후 재시도 |
| Excel for the web 사용 | 시나리오 관리자 기능 미지원/제한 | 브라우저에서 작업 중인지 확인 | 데스크톱 앱에서 열어 실행 |
권장 설정: 입력 영역 설계 패턴
- 입력 블록과 계산 블록을 물리적으로 분리하고, 입력 블록만 ‘변경 셀’로 지정한다.
- 입력 블록은 병합 없이 단일 셀로 구성한다.
- 테이블을 써야 한다면, 변경 셀은 테이블의 “한 개 셀” 주소로만 지정한다.
- 시트 보호를 사용할 경우, 입력 블록은
Locked=False,FormulaHidden=False로 설정한다. - 공동 편집이 필요한 문서라면 시나리오 정의는 로컬 복제본에서 작성한 뒤 최종본에 반영한다.
문제 해결 절차(체크리스트)
- 보호 해제: 검토 탭에서 통합 문서/시트 보호를 해제한다. 암호가 있다면 관리자에게 요청한다.
- 변경 셀 정리: 변경 셀 후보 범위에서 수식/병합/데이터 유효성 강제 드롭다운이 섞여 있는지 확인한다.
- 개수 축소: 변경 셀 수를 최소화한다. 모델 입력을 파라미터화해 핵심 레버만 남긴다.
- 공유 해제: 공동 편집을 중지하고 단독 편집 상태에서 작업한다. 필요 시 복사본(.xlsx)으로 저장한다.
- 주소 고정: 테이블 구조 참조는 피하고 단일 셀 주소로 지정한다.
- 호환 모드 종료: 파일을 .xlsx로 저장해 기능 제한을 제거한다.
- 시나리오 이름 규칙: 짧은 영문·숫자·밑줄로만 구성하고 중복을 피한다.
자동 점검 매크로(선택 영역 진단)
다음 코드는 현재 선택한 범위가 변경 셀로 적합한지 점검한다. 수식·병합·잠금 여부·테이블 참조 여부를 한 번에 확인한다.
Sub DiagnoseChangingCells() Dim rng As Range, msg As String Dim hasFormula As Boolean, hasMerged As Boolean, hasLocked As Boolean Dim lo As ListObject, c As Range
If TypeName(Selection) <> "Range" Then
MsgBox "진단할 셀 범위를 먼저 선택한다.", vbExclamation
Exit Sub
End If
Set rng = Selection
On Error Resume Next
hasFormula = Not rng.SpecialCells(xlCellTypeFormulas) Is Nothing
On Error GoTo 0
hasMerged = rng.MergeCells
hasLocked = False
For Each c In rng.Cells
If c.Locked Then hasLocked = True: Exit For
Next c
Dim inTable As Boolean
inTable = False
For Each c In rng.Cells
If Not c.ListObject Is Nothing Then inTable = True: Exit For
Next c
msg = "셀 개수: " & rng.Cells.Count & vbCrLf
msg = msg & "수식 포함: " & IIf(hasFormula, "예", "아니오") & vbCrLf
msg = msg & "병합 셀: " & IIf(hasMerged, "예", "아니오") & vbCrLf
msg = msg & "잠금 상태 포함: " & IIf(hasLocked, "예", "아니오") & vbCrLf
msg = msg & "테이블 내 셀 포함: " & IIf(inTable, "예", "아니오") & vbCrLf
If rng.Cells.Count > 32 Then
msg = msg & vbCrLf & "[경고] 변경 셀은 32개 이내로 줄이는 것을 권장한다."
End If
MsgBox msg, vbInformation, "변경 셀 진단 보고"
End Sub
시나리오 일괄 생성 예제(VBA)
다음은 변경 셀 B2:B4에 대해 세 가지 시나리오를 자동 생성하는 예제이다. 기존 시나리오를 지우고 재생성하는 루틴을 포함한다.
Sub RebuildScenarios() Dim sc As Scenario Dim ws As Worksheet Dim target As Range
Set ws = ActiveSheet
Set target = ws.Range("B2:B4") ' 변경 셀
' 1) 기존 시나리오 삭제
On Error Resume Next
For Each sc In ws.Scenarios
sc.Delete
Next sc
On Error GoTo 0
' 2) 시나리오 생성
ws.Scenarios.Add Name:="Base", ChangingCells:=target, Values:=Array(100, 0.2, 30)
ws.Scenarios.Add Name:="Optimistic", ChangingCells:=target, Values:=Array(120, 0.15, 25)
ws.Scenarios.Add Name:="Conservative", ChangingCells:=target, Values:=Array(90, 0.25, 40)
' 3) 요약 시트 생성(선택)
ws.Scenarios.Summary ResultCells:=ws.Range("E2:E5")
MsgBox "시나리오 3건을 재구성했다.", vbInformation
End Sub
Values:=Array(...) 배열 길이는 변경 셀 개수와 정확히 같아야 한다. 불일치 시 추가에 실패한다.테이블 사용 시 안전한 지정 방법
구조적 참조 전체 열을 변경 셀로 지정하면 주소가 가변이 되어 실패하기 쉽다. 다음처럼 단일 셀을 명시한다.
' 잘못된 예: 전체 열 참조 ' ChangingCells:=Range("Table1[Price]")
' 올바른 예: 입력 셀을 고정 주소로
ChangingCells:=Range("B2,B3,B4") ' 또는 Table1[[#This Row],[Price]] 같은 단일 셀
공동 편집 환경에서의 처리
공동 편집이 활성화된 통합 문서에서는 시나리오 관리가 제한될 수 있다. 다음 절차로 안전하게 작업한다.
- 현재 파일을 로컬 PC에 복사하여 단독 편집 모드로 연다.
- 시나리오를 정의하고 요약 보고서를 생성한다.
- 결과 값만 필요한 경우, 입력 셀 값을 ‘값 붙여넣기’로 최종 파일에 반영한다.
호환성 모드와 파일 형식 점검
.xls 또는 호환 모드에서는 일부 기능이 제한된다. 반드시 .xlsx로 저장하여 다시 시도한다. 매크로나 고급 개체가 많다면 임시로 ‘값만’ 복제한 얕은 사본에서 시나리오를 구성한 뒤, 결과만 원본에 반영한다.
성능과 유지보수 팁
- 변경 셀은 모델의 핵심 입력만 남기고 10~20개 내로 유지하는 것이 좋다.
- 시나리오 이름은 규칙적 접두사로 정렬되도록 만든다. 예:
01_Base,02_Opt,03_Con. - 시나리오 요약 결과 범위를 표로 변환하여 시각 보고서 차트와 연결한다.
문제 재현과 복구 시나리오
아래 절차로 실패를 재현하고 올바른 구성을 확인한다.
- 샘플 입력 블록(B2:B4)을 만들고, 계산식은 D열에 둔다.
- B열 셀을 ‘잠금 해제’로 설정한다. 검토 탭에서 시트 보호를 걸어도 입력은 허용된다.
- 시나리오 관리자에서 변경 셀을
B2:B4로 지정 후 ‘추가’한다. - 등락 시나리오 2~3개를 만든다. 저장이 안 되면 위 진단 매크로로 상태를 확인한다.
고급: 모델을 파라미터 테이블과 연동
많은 시나리오가 필요하면 시나리오 관리자만으로는 관리가 어렵다. 다음 패턴을 권장한다.
- 별도 시트에 파라미터 테이블을 만든다.
- 선택한 행의 값을 입력 블록에 복사하는 매크로를 만든다.
- 시나리오 관리자는 핵심 케이스만 유지한다.
Sub ApplyScenarioRow(rowIdx As Long) With Sheets("Params") Range("B2").Value = .Cells(rowIdx, 2).Value ' Price Range("B3").Value = .Cells(rowIdx, 3).Value ' Rate Range("B4").Value = .Cells(rowIdx, 4).Value ' Period End With End Sub 자주 발생하는 오류 메시지와 해석
| 메시지 | 해석 | 대응 |
|---|---|---|
| “셀을 변경할 수 없습니다” | 보호 또는 수식 셀 | 보호 해제 및 입력 셀로 분리 |
| “변경 셀을 지정할 수 없습니다” | 병합·테이블 전체 참조 등 주소 문제 | 단일 셀 주소로 재지정 |
| “이 통합 문서에서는 사용할 수 없습니다” | 공유/호환 모드 | 단독 편집, .xlsx로 저장 |
최소 재현 단위(Minimal Working Example)
아래 예시는 가장 단순한 구성으로 시나리오 추가가 정상 작동함을 검증한다.
1) A1:A3 라벨, B2:B4 입력, D2:D4 계산식 2) 변경 셀: B2:B4 3) 시나리오: Base / Optimistic / Conservative 4) 시트 보호: 해제 상태 5) 병합 없음, 수식 없음(입력 블록) FAQ
변경 셀에 데이터 유효성 목록이 있어도 되는가?
가능하다. 다만 목록 원본이 외부 연결 또는 변동 범위일 경우 주소 평가 지연으로 실패할 수 있다. 목록 원본을 동일 시트 고정 범위로 두거나 값만 복제한다.
피벗테이블과 연동된 입력을 변경 셀로 둘 수 있는가?
권장하지 않는다. 피벗테이블 새로 고침 시 값이 재설정되어 시나리오 적용 값이 유지되지 않을 수 있다. 입력 셀은 일반 범위로 둔다.
시나리오가 저장된 것처럼 보였다가 다시 사라진다.
공유 편집 또는 자동 저장 충돌 가능성이 높다. 자동 저장을 끄고 로컬에 저장 후 다시 시도한다.
변경 셀이 30개를 넘는다. 어떻게 관리하나?
모델 구조를 재설계하여 그룹 파라미터로 묶고 핵심 레버만 변경 셀로 남긴다. 나머지는 파라미터 테이블 방식으로 관리한다.
시나리오 요약 보고서가 빈 결과를 보여 준다.
결과 셀 범위에 수식이 없거나 참조가 끊겼을 수 있다. 결과 셀을 정확히 지정하고, 계산 모드를 자동으로 둔다.
결론
시나리오 추가 실패는 입력 셀의 본질적 속성(수식·병합·잠금), 주소 지정 방식(테이블 전체 참조), 협업 설정(공동 편집), 파일 호환성에서 발생한다. 입력과 계산을 분리하고, 변경 셀을 단순·고정 주소로 유지하며, 보호와 공유 기능을 일시적으로 해제하면 문제를 대부분 해결할 수 있다. 진단 매크로로 사전 점검을 자동화하고, 파라미터 테이블 패턴을 도입하면 유지보수 비용을 크게 줄일 수 있다.