Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기- 공유 링크 만들기
- X
- 이메일
- 기타 앱
Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기이 글의 목적은 Excel에서 하이퍼링크가 걸린 셀의 “표시 텍스트만” 복사할 때 링크가 끊기는 원인과, 링크를 유지하거나 필요한 형식으로 정확히 추출·재구성하는 실무형 해결책을 단계별로 제시하는 것이다.
엑셀의 하이퍼링크는 크게 두 요소로 구성되며, 복사 동작마다 처리 방식이 다르다.
일반 복사는 셀 전체를 복사해야 하이퍼링크 개체가 함께 이동한다. 반면 F2로 셀 편집 모드에서 문자를 일부만 드래그해 복사하면 그 순간은 단순 텍스트로 인식되어 링크 정보가 제거된다. 이 차이가 “텍스트만 복사 시 링크 끊김”의 1차 원인이다.
다음 순서를 따르면 대부분의 기본 시나리오에서 링크가 유지된다.
이 절차는 엑셀 → 엑셀, 엑셀 → Word/Outlook 등 서식 있는 붙여넣기를 지원하는 앱에서 링크를 보존한다. 반면 메모장처럼 서식을 지원하지 않는 곳으로 붙여넣으면 링크는 형식상 존재할 수 없다.
업무상 텍스트는 보고서 본문으로, 링크는 별도 열 또는 주석으로 저장해야 하는 경우가 많다. 다음 방식으로 표시 텍스트와 URL을 분리·정리한다.
엑셀 기본 함수에는 “하이퍼링크 주소 추출”이 없다. 다음 사용자 정의 함수(UDF)를 표준 모듈에 추가해 활용한다.
Option Explicit
'하이퍼링크의 URL/경로를 반환한다. 없으면 빈 문자열을 반환한다.
Public Function GetHyperlinkAddress(ByVal Target As Range) As String
On Error GoTo SafeExit
If Target Is Nothing Then GoTo SafeExit
If Target.Hyperlinks.Count > 0 Then
GetHyperlinkAddress = Target.Hyperlinks(1).Address
Else
GetHyperlinkAddress = ""
End If
SafeExit:
End Function
'통합문서 내부 링크의 SubAddress(예: Sheet1!A1, 이름정의 등)를 반환한다.
Public Function GetHyperlinkSubAddress(ByVal Target As Range) As String
On Error GoTo SafeExit
If Target Is Nothing Then GoTo SafeExit
If Target.Hyperlinks.Count > 0 Then
GetHyperlinkSubAddress = Target.Hyperlinks(1).SubAddress
Else
GetHyperlinkSubAddress = ""
End If
SafeExit:
End Function
사용 예시는 다음과 같다.
=GetHyperlinkAddress(A2) → A2의 URL/경로 반환=GetHyperlinkSubAddress(A2) → A2가 내부 링크일 때 대상 주소 반환이렇게 추출한 주소를 별도 열에 두고, 표시 텍스트 열은 그대로 유지하여 보고서와 데이터 표준화 모두 충족한다.
표시 텍스트와 주소를 분리했으면, 필요한 시점에 HYPERLINK 함수로 재조합한다.
=HYPERLINK(B2, A2) 위 식에서 A2는 표시 텍스트, B2는 URL/경로 열이다. 이렇게 만든 결과 셀은 다시 복사해도 링크가 유지된다.
셀 안의 문자열 일부만 다른 셀에 붙여넣되, 그 부분만 클릭 가능한 링크로 남기고 싶을 수 있다. 다음 두 가지 접근을 사용한다.
엑셀은 한 셀 내부에서 일부 문자에만 링크를 부여할 수 있다(서식 있는 텍스트). 절차는 아래와 같다.
이 텍스트 일부를 다른 엑셀 셀로 복사할 때는 서식을 유지하는 붙여넣기를 사용하면 링크가 유지되는 경우가 많다. 다만 대상이 다른 애플리케이션이면 링크 유지 여부가 앱의 리치 텍스트 처리 능력에 좌우된다.
다음 매크로는 현재 선택된 셀의 일부 텍스트만을 다른 셀에 복사하고, 동일 주소의 링크를 적용한다.
Sub CopyPartialTextWithLink() Dim src As Range, tgt As Range Dim startPos As Long, length As Long Dim linkAddr As String
Set src = Selection
If src Is Nothing Then Exit Sub
If src.Hyperlinks.Count = 0 Then
MsgBox "원본 셀에 하이퍼링크가 없다."
Exit Sub
End If
'예시: 6번째 문자부터 10자 길이를 복사/적용
startPos = 6
length = 10
linkAddr = src.Hyperlinks(1).Address
Set tgt = Application.InputBox("붙여넣을 대상 셀 선택", Type:=8)
If tgt Is Nothing Then Exit Sub
tgt.Value = Mid$(CStr(src.Value), startPos, length)
tgt.Characters(1, length).Font.Underline = xlUnderlineStyleSingle
tgt.Characters(1, length).Font.Color = vbBlue
ThisWorkbook.Worksheets(tgt.Worksheet.Name).Hyperlinks.Add _
Anchor:=tgt.Characters(1, length), _
Address:=linkAddr, _
SubAddress:=""
End Sub
업무에 맞게 startPos와 length를 동적으로 계산하여 적용하면 된다.
| 환경 | 권장 복사 방식 | 붙여넣기 권장 옵션 | 비고 |
|---|---|---|---|
| Windows Excel 2016~Microsoft 365 | 셀 전체 선택 후 Ctrl+C | 원본 서식 유지 또는 대상 서식 맞추기 | 서식 유지 시 링크 보존 가능성이 높다. |
| Mac Excel 2019~Microsoft 365 | 셀 전체 선택 후 ⌘+C | 편집 → 선택하여 붙여넣기 → 형식 유지 | 일부 앱 간 붙여넣기에서 리치 텍스트 처리 차이가 있다. |
| Excel on the Web | 셀 전체 복사 | 동일 웹 앱 내 붙여넣기 권장 | 브라우저 보안·클립보드 정책 영향이 있다. |
| 엑셀 → 메모장 | 해당 없음 | 순수 텍스트만 가능 | 링크 보존 불가. URL 별도 열 제공이 해법이다. |
수백 건의 링크가 걸린 목록을 재배치해야 할 때 다음 4단계를 권장한다.
=GetHyperlinkAddress(A2)를 채워 URL만 별도 컬럼화한다.=HYPERLINK(B2, A2)로 최종 하이퍼링크를 만든다.이렇게 구성하면 A열은 보고서 가독성 중심, B열은 데이터 이관 중심, C열은 클릭 동작 중심으로 역할이 분리되어 관리성이 높아진다.
같은 통합문서 내부로 이동하는 링크는 Address가 비어 있고 SubAddress만 채워지는 경우가 많다. 위 UDF의 GetHyperlinkSubAddress로 대상 주소를 별도 열에 확보한 뒤, 재구성 시 다음 형태를 쓴다.
=HYPERLINK("#" & D2, A2) D2에 Sheet1!A1 같은 내부 대상이 들어 있다고 가정한다.
mailto:name@example.com?subject=... 형식은 일부 붙여넣기 대상에서 자동 클릭이 비활성화될 수 있다. 대상 앱의 메일 처리 옵션을 점검한다.\\서버\공유\파일.xlsx 형식은 보안 정책에 따라 차단될 수 있다. 문서화 시 URL 인코딩 또는 포털 링크로 변환을 고려한다.조직 문서에서 자주 발생하는 링크 만료·권한 오류를 줄이기 위해 다음을 따른다.
Excel on the Web 환경에서는 다음 Office Script로 선택 영역 내 하이퍼링크 주소를 옆 열에 채울 수 있다.
function main(workbook: ExcelScript.Workbook) { const sheet = workbook.getActiveWorksheet(); const range = sheet.getUsedRange(); const rows = range.getRowCount(); const cols = range.getColumnCount();
// A열에 표시 텍스트, B열에 URL을 담는 예시
for (let r = 0; r < rows; r++) {
const cell = range.getCell(r, 0);
const rich = cell.getRichText();
if (rich) {
const runs = rich.getRuns();
let url = "";
for (const run of runs) {
const link = run.getLink();
if (link) { url = link.getAddress() ?? ""; break; }
}
range.getCell(r, 1).setValue(url);
} else {
// 일반 링크(셀 전체 링크) 처리
const link = cell.getHyperlink();
if (link) {
range.getCell(r, 1).setValue(link.address ?? "");
} else {
range.getCell(r, 1).setValue("");
}
}
}
}
스크립트 실행 후 B열에 URL이 정리되므로, 보고서에는 A열을, 시스템 이관에는 B열을 사용하면 된다.
| 증상 | 원인 | 즉시 해결 | 근본 해결 |
|---|---|---|---|
| 텍스트만 복사하니 링크 소실 | 편집 모드 부분 선택 복사 | 셀 전체 선택 후 복사 | URL 별도 열 관리 + HYPERLINK 재생성 |
| 다른 앱에 붙여넣자 링크 사라짐 | 대상 앱이 서식 미지원 | 서식 지원 앱으로 중계(Word/Outlook) | 텍스트/URL 분리 저장 후 문서화 규정 수립 |
| 내부 참조 링크 주소가 안 보임 | SubAddress 형태로만 저장 | 하이퍼링크 편집 창에서 확인 | UDF로 SubAddress 추출·보관 |
| 대량 목록에서 링크 관리 어려움 | 표시 텍스트와 URL 혼재 | URL 컬럼 신설 | VBA/Office Scripts로 일괄 추출·재하이퍼링크 |
=GetHyperlinkAddress(셀)=HYPERLINK(URL셀, 텍스트셀) 사용정확성이 중요하면 가장 안전하다. 표시 텍스트와 무관하게 실제 주소를 복사할 수 있기 때문이다. 다만 대량 작업에는 비효율적이므로 UDF/스크립트를 권장한다.
가능하나 자동화 난도가 있다. 부분 하이퍼링크를 수동으로 설정하거나 VBA로 부분 문자열에만 링크를 적용하는 방식을 쓴다. 대상 앱이 서식을 지원해야 한다.
메모장은 서식을 지원하지 않아 불가하다. URL을 별도 열로 두고 그 값을 함께 제공하는 방식으로 대체한다.
공유 범위가 제한되었기 때문이다. 조직 정책에 맞춘 공유 링크를 생성하고, 보고용 텍스트와 URL 원본을 분리 보관한다.
엑셀 기본 함수만으로는 어렵다. VBA UDF나 Office Scripts를 사용한다. 링크를 처음부터 HYPERLINK 함수로 구성했다면 원본 텍스트/URL 열을 함께 관리하는 것이 최선이다.