Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기- 공유 링크 만들기
- X
- 이메일
- 기타 앱
Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기이 글의 목적은 Windows 지역 설정과 엑셀 언어/형식 차이로 인해 수식·함수·구분기호·날짜/숫자 해석이 달라져 발생하는 호환 문제를 체계적으로 진단하고 재발 방지까지 가능하도록 표준 절차와 실무 팁을 제공하는 것이다.
엑셀은 운영체제의 지역 형식과 엑셀 자체의 언어 설정을 따라 숫자 기호, 목록 구분기호, 날짜 표시 규칙, 함수 이름 현지화 여부 등을 해석한다. 이때 다음 차이가 생기면 동일한 통합문서라도 PC마다 계산·표시가 달라질 수 있다.
.인지 ,인지에 따라 숫자 인식이 달라진다.,인지 ;인지에 따라 수식 구문이 달라진다.MM/DD/YYYY인지 DD.MM.YYYY인지에 따라 텍스트 날짜가 다르게 해석된다.SUM)인지 현지어(SUMME, SOMME, WENN 등)인지에 따라 수식 텍스트가 다르게 보인다.| 증상 | 주요 원인 | 즉시 확인 포인트 |
|---|---|---|
| 함수 인수 구분 오류(#N/A, #NAME?) | 인수 구분기호 불일치(, vs ;) | Windows 고급 형식의 목록 구분 기호, 엑셀 옵션의 시스템 구분 기호 사용 |
| 숫자를 텍스트로 인식 | 소수점 기호 상이(. vs ,) | Windows 소수 기호와 데이터 원본의 기호 비교 |
| 텍스트 날짜가 다른 날짜로 변환 | 날짜 문화권 차이(월/일 순서, 구분자) | 원본 문자열 패턴, 대상 PC의 짧은 날짜 형식 |
| CSV 열이 한 칸에 합쳐짐 | CSV 구분자 불일치(쉼표 vs 세미콜론) | 파일 구분자, Windows 목록 구분 기호, Power Query 가져오기 옵션 |
| 함수 이름이 인식되지 않음 | 현지화된 함수명/영문 함수명 혼용 | 엑셀 표시 언어, 수식 표시/편집 방식 |
| 동적 배열 수식이 다른 PC에서 #NAME? | 엑셀 버전·함수 제공 여부 차이 | 함수 앞 _xlfn. 프리픽스 존재 여부, Office 빌드 |
아래 셀 수식으로 현재 시스템의 핵심 구분 기호를 확인한다.
=CELL("decimal") // 소수점 기호 =CELL("thousands") // 천 단위 기호 =INFO("listsep") // 인수 구분기호(일반적) 또는 다음 테스트 수식으로 즉시 판별한다.
=IF(1,2,3) // 쉼표 사용 환경에서만 정상 =IF(1;2;3) // 세미콜론 환경에서만 정상 =VALUE("1.23") // 소수점 기호가 . 인 환경에서만 1.23 =VALUE("1,23") // 소수점 기호가 , 인 환경에서만 1.23 운영체제 설정을 팀 표준으로 맞추면 CSV/텍스트, 인수 구분기호까지 일괄적으로 안정화된다.
yyyy-MM-dd)로 통일한다.국가별 소수/천 단위 기호가 섞인 데이터를 강건하게 숫자로 변환한다.
=NUMBERVALUE(A2, ".", ",") // "1,234.56" → 1234.56로 안정 변환 =NUMBERVALUE(A2, ",", ".") // "1.234,56" → 1234.56로 안정 변환 동일 통합문서 내에서 데이터 구분자가 혼재될 때 다음과 같이 처리한다.
// 쉼표 또는 세미콜론 모두 대응 =LET(s,A2, d, IF(ISNUMBER(SEARCH(";",s)),";"," ,"), TEXTSPLIT(s, d)) 동적 배열 미지원 버전은 Power Query 사용이 더 안전하다.
공유 전 모든 쉼표를 세미콜론으로, 혹은 반대로 변환해야 할 때 수식 텍스트를 일괄 치환하는 VBA 유틸리티를 사용한다.
Sub SwapArgSeparators() Dim s As String, sep As String, alt As String sep = Application.International(xlListSeparator) alt = IIf(sep = ",", ";", ",") Dim c As Range For Each c In Selection If c.HasFormula Then s = c.FormulaLocal ' 현지어/현지 구분기호 기반 s = Replace(s, sep, "§§§") s = Replace(s, alt, sep) s = Replace(s, "§§§", alt) c.FormulaLocal = s End If Next c End Sub FormulaLocal는 현지어 함수명과 현재 인수 구분기호를 사용한다. 다국어/다지역 팀은 Formula와 Formula2 기반 영문 수식 표준화 전략을 병행하는 것이 안전하다.문자열 날짜 대신 구성 요소로 직접 생성하면 지역 영향이 제거된다.
// "2025-10-25"와 같이 하이픈 기준 텍스트를 안전 변환 =LET(s,A2, y,--LEFT(s,4), m,--MID(s,6,2), d,--RIGHT(s,2), DATE(y,m,d)) Power Query에서는 문화권 인수를 지정한다.
// Power Query M = Table.TransformColumns(Source, {{"OrderDate", each Date.FromText(_, "en-US")}}) 팀 문서 표준을 영문 함수명으로 정하면 언어 혼용으로 인한 #NAME? 위험이 줄어든다. 다음 패턴을 권장한다.
Formula/Formula2로 영문 함수명을 유지한다.FormulaLocal을 사용한다.| 영문 | 독일어 예 | 프랑스어 예 | 한국어 UI 예 |
|---|---|---|---|
| IF | WENN | SI | IF |
| SUM | SUMME | SOMME | SUM |
| VLOOKUP | SVERWEIS | RECHERCHEV | VLOOKUP |
| XLOOKUP | XVERWEIS | RECHERCHEX | XLOOKUP |
동적 배열(XLOOKUP, TEXTSPLIT 등) 미지원 환경에서 파일을 열면 _xlfn.이 붙거나 #NAME? 오류가 난다. 배포 전 다음 절차를 따른다.
_xlfn 포함 수식을 스캔한다.Sub ScanXlfn() Dim c As Range For Each c In ActiveSheet.UsedRange If c.HasFormula Then If InStr(1, c.Formula, "_xlfn", vbTextCompare) > 0 Then Debug.Print c.Address, c.Formula End If End If Next c End Sub // 숫자 파싱 문화권 고정 = Table.TransformColumns(Source, {{"Amount", each Number.FromText(_, "de-DE")}}) // 날짜 파싱 문화권 고정 = Table.TransformColumns(Source, {{"OrderDate", each Date.FromText(_, "en-GB")}}) ,인데 시스템은 .인 경우, Power Query에서 문화권을 데이터에 맞게 지정해야 숫자 손실을 방지할 수 있다.| 항목 | 권장 표준 | 점검 방법 | 주기 |
|---|---|---|---|
| 날짜 표기 | ISO 8601 yyyy-MM-dd | 샘플 파일 검토 | 분기 |
| CSV 구분자 | 쉼표 또는 세미콜론 단일화 | ETL 스크립트/문서 명시 | 반기 |
| 수식 언어 | 영문 함수명 유지 | 코드 리뷰/매크로 검사 | 배포 전 |
| 숫자 파싱 | NUMBERVALUE 강제 사용 | 정책 스캔 규칙 | 상시 |
| Power Query 문화권 | 열별 문화권 명시 | M 코드 리뷰 | 배포 전 |
// 선택 영역의 수식 구분기호를 현 시스템 표준으로 통일 Sub NormalizeSeparatorsSelection() Dim c As Range For Each c In Selection If c.HasFormula Then c.FormulaLocal = c.FormulaLocal ' 재기록로 표준화 Next c End Sub =NUMBERVALUE(A2, ",", ".") // 예: "12.345,67" → 12345.67 =LET(s,A2, y,--RIGHT(s,4), m,--LEFT(s,2), d,--MID(s,4,2), DATE(y,m,d)) =LET(s,A2, d, IF(ISNUMBER(SEARCH(";",s)),";", IF(ISNUMBER(SEARCH("|",s)),"|",",")), TEXTSPLIT(s,d)) Sub FindXlfnWorkbook() Dim sh As Worksheet, c As Range For Each sh In ThisWorkbook.Worksheets For Each c In sh.UsedRange If c.HasFormula Then If InStr(1, c.Formula, "_xlfn", vbTextCompare) > 0 Then Debug.Print sh.Name, c.Address, c.Formula End If End If Next c Next sh End Sub 다국가 팀에서 파일을 배포할 때는 표준 머리말 시트를 포함한다.
● 파일 표준 - 수식 언어: English (Formula/Formula2) - CSV 구분자: comma - 날짜: yyyy-MM-dd - 숫자 파싱: NUMBERVALUE 사용 권장
● 열별 문화권
Amount: Number.FromText(_, "en-US")
OrderDate: Date.FromText(_, "en-GB")
Sub Preflight() Dim issues As Long ' 1) _xlfn Call FindXlfnWorkbook ' 2) 구분기호 테스트 Debug.Print "ListSep:", Application.International(xlListSeparator) ' 3) 샘플 파싱 검증 Debug.Print Evaluate("NUMBERVALUE(""1,23"","",""." )") Debug.Print Evaluate("NUMBERVALUE(""1.23"",""." ,"" ,"" )") End Sub 안 된다. 엑셀은 단일 인수 구분기호만 허용한다. 운영체제 설정과 엑셀 옵션에 의해 정해지므로 통일해야 한다.
표시만 바뀌는 경우가 많다. 다만 FormulaLocal을 사용한 자동화나 텍스트 기반 치환 로직은 영향을 받으므로 배포 표준을 영문 수식으로 두는 것이 안전하다.
_xlfn 검사를 먼저 수행하고, INDEX/MATCH, MID/SEARCH 등의 대체식을 제공한다. 버전 매트릭스를 문서화한다.
CSV 구분자와 Windows 목록 구분 기호가 다를 가능성이 높다. 데이터 가져오기 마법사 또는 Power Query에서 구분자를 명시한다.
숫자는 NUMBERVALUE, 날짜는 구성 요소로 DATE(y,m,d)를 생성한다. 표시 형식은 자유롭게 현지화한다.