Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기- 공유 링크 만들기
- X
- 이메일
- 기타 앱
Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기이 글의 목적은 엑셀에서 공유 통합 문서를 사용할 때 발생하는 변경 내용 충돌, 파일 잠금, 버전 불일치 문제를 체계적으로 진단하고 실무에서 즉시 적용 가능한 해결 절차와 예방 규칙을 제공하는 것이다.
엑셀에서 충돌이란 둘 이상의 사용자가 동일 파일의 동일한 영역을 시간적으로 겹치게 수정하여 저장 우선순위가 충돌하는 상황을 의미한다. 충돌은 저장 시점, 동기화 백엔드, 파일 잠금 상태, 워크시트 구조 변경 여부에 따라 발생 양상이 달라진다.
| 유형 | 전형적 원인 | 가시 증상 | 핵심 해결 포인트 |
|---|---|---|---|
| 같은 셀 동시편집 충돌 | 두 사용자가 동일 셀을 편집 후 거의 동시에 저장 | 충돌 대화상자 표시 또는 한쪽 변경분 소실 | 승자/패자 결정 규칙 확인, 충돌 병합 규칙 수립 |
| 파일 잠금 충돌 | 임시 잠금 파일(~$) 잔존, 네트워크 세션 비정상 종료 | 읽기 전용으로 열림, 저장 실패 | 잠금 파일 정리, 열려 있는 세션 식별 |
| 동기화 지연 충돌 | 클라우드 동기화 지연 또는 끊김 | 로컬 사본 생성, 버전 병합 요구 | 동기화 상태 회복, 버전 기록으로 병합 |
| 구조 변경 충돌 | 시트 추가/삭제, 표 구조 변경, 피벗 캐시 갱신 | 저장 불가, 일부 기능 자동 비활성 | 구조 작업 잠금, 변경 창구 단일화 |
| 호환 모드 충돌 | 다른 포맷 또는 구버전 클라이언트 혼용 | 기능 누락, 자동 병합 실패 | 파일 형식 통일, 클라이언트 버전 표준화 |
공유 통합 문서의 충돌 처리 방식은 저장 위치와 사용 중인 기능에 따라 달라진다.
충돌을 최소화하려면 문서의 구조 변경, 데이터 입력, 검토·승인 등 역할과 시간대를 분리해야 한다.
공유 파일에서 누가 언제 무엇을 바꾸었는지 기록하면 충돌 후 원인 파악이 빠르다. 다음 VBA 예시는 변경된 셀 주소, 이전 값, 새 값, 사용자, 시간 정보를 전용 로그 시트에 기록한다.
Option Explicit
' 시트 모듈이 아닌 ThisWorkbook 또는 대상 워크시트 코드 창에 삽입한다.
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ExitHandler
Application.EnableEvents = False
Dim wsLog As Worksheet
Dim nextRow As Long
Set wsLog = ThisWorkbook.Worksheets("LOG")
If wsLog Is Nothing Then
' 최초 1회: LOG 시트 자동 생성
Set wsLog = ThisWorkbook.Worksheets.Add(After:=Sheets(Sheets.Count))
wsLog.Name = "LOG"
wsLog.Range("A1:F1").Value = Array("시간", "사용자", "시트", "주소", "이전값", "새값")
End If
Dim c As Range
For Each c In Target.Cells
nextRow = wsLog.Cells(wsLog.Rows.Count, 1).End(xlUp).Row + 1
Dim oldVal As String, newVal As String
' 변경 전 값은 Undo 스택을 통해 직접 취득하기 어려우므로
' 사전 스냅샷 전략과 병행하는 것을 권장한다.
oldVal = "" ' 스냅샷 병행 설계 시 채움
newVal = CStr(c.Value)
wsLog.Cells(nextRow, 1).Value = Now
wsLog.Cells(nextRow, 2).Value = Environ$("Username")
wsLog.Cells(nextRow, 3).Value = c.Parent.Name
wsLog.Cells(nextRow, 4).Value = c.Address(False, False)
wsLog.Cells(nextRow, 5).Value = oldVal
wsLog.Cells(nextRow, 6).Value = newVal
Next c
ExitHandler:
Application.EnableEvents = True
End Sub
공유 문서는 필연적으로 버전이 분기된다. 버전 기록을 이용하여 병합·롤백 절차를 정형화한다.
구조 변경 충돌을 줄이려면 사용자 권한을 역할별로 제한한다.
' 보호 예시 Sub ProtectSheets() Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets ' 입력 범위만 잠금 해제 후 전체 보호 ws.Cells.Locked = True ws.Range("B5:K10000").Locked = False ws.Protect Password:="change_me", AllowFiltering:=True, AllowSorting:=True Next ws End Sub 동시에 많은 인원이 입력하는 환경에서는 파일 하나에 모든 것을 담지 않는 것이 효과적이다.
| 항목 | 체크 방법 | 합격 기준 | 빈도 |
|---|---|---|---|
| 파일 형식 통일 | 파일 속성 확인 | .xlsx 등 표준 형식만 사용 | 월 1회 |
| 동기화 상태 | 클라이언트 아이콘 확인 | 오류 없음 | 매일 |
| 버전 기록 활성 | 저장소 설정 확인 | 주요 파일 버전 기록 켜짐 | 월 1회 |
| 임시 파일 잔존 | ~$ 파일 스캔 | 0건 | 주 1회 |
| 역할 분리 준수 | 작업 로그 검토 | 위반 0건 | 주 1회 |
두 버전의 특정 범위를 비교하여 차이만 표시하는 보조 루틴을 작성하면 충돌 후 수동 병합 시간이 줄어든다.
Sub DiffRange(Optional ByVal rngA As Range, Optional ByVal rngB As Range) Dim r As Long, c As Long If rngA Is Nothing Then Set rngA = Application.InputBox("기준 범위", Type:=8) If rngB Is Nothing Then Set rngB = Application.InputBox("비교 범위", Type:=8) If rngA.Rows.Count <> rngB.Rows.Count Or rngA.Columns.Count <> rngB.Columns.Count Then MsgBox "범위 크기가 다르다." Exit Sub End If Application.ScreenUpdating = False For r = 1 To rngA.Rows.Count For c = 1 To rngA.Columns.Count If CStr(rngA.Cells(r, c).Value) <> CStr(rngB.Cells(r, c).Value) Then rngB.Cells(r, c).Interior.ColorIndex = 6 ' 노랑 표시 End If Next c Next r Application.ScreenUpdating = True End Sub 다음과 같은 간단한 운영 규칙 템플릿을 파일 첫 시트에 포함하면 교육 비용이 줄어든다.
[공유 통합 문서 운영 규칙] 1) 데이터 입력: 각자 맡은 행 범위만 수정한다. 2) 구조 변경: 파일 소유자만 수행한다. 변경 전 Teams에 공지한다. 3) 대량 작업: 자동 저장 일시 중지 후 완료 즉시 저장하고 동기화 완료까지 대기한다. 4) 충돌 발생: 버전 기록 확인 후 LOG 기준으로 병합한다. 5) 백업: 매주 월요일 09:00 버전 스냅샷 생성한다. 조직 규칙을 우선한다. 기본은 담당자 범위 우선, 없으면 저장 타임스탬프 우선으로 선택한다. 선택 후 반드시 버전 기록으로 검증한다.
해당 파일을 연 프로세스가 남아 있거나 서버 세션이 잔존한 것이다. 모든 사용자가 파일을 닫았는지 확인하고, 서버 관리자에게 세션 종료를 요청한 뒤 삭제한다.
동일 셀 충돌은 자동 병합이 불가능하다. 버전 비교 후 차이를 수동 반영해야 한다. 테이블 기반 입력으로 범위를 분리하면 수동 병합 난이도가 낮아진다.
작업 시간 예약, 자동 저장 일시 중지, 저장 및 동기화 완료 대기, 재개 통보의 4단계를 표준으로 운영한다.
동시 구조 변경으로 인한 간접 충돌일 수 있다. 구조 작업을 단일 창구로 제한하고, 영향 범위 문서화를 통해 예방한다.