- 최초 작성일: 2001-02-06
- 최종 수정일: 2026-09-30
- 조회수: 3 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: HYPERLINK 설정 & 이름 복사하기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
지난 시간에 하이퍼링크 설정에 대해 설명을 드렸더니 그것과 관련된 질문을 하신 분이 있군요. ^^
안녕하세요?
궁금해서 이렇게 글을 올립니다.
다름이 아니라 엑셀로 DB 작업을 하다가 막히는 부분이 있어서…
A라는 곳에 제목을, B라는 곳에 URL을 입력했습니다.
문제는 A부분에 B의 URL이 전체적으로 하이퍼링크 걸리도록 할 수 있느냐
하는 것입니다.
고수님들의 훈수를 기다리겠습니다.
하이퍼링크와 관련하여 강좌시간에 몇 번 설명드린 기억이 납니다. VB0056 강좌에서 소개해 드린 방법, 즉 사용자가 지정한 폴더 중에서 원하는 파일을 검색한 다음 하이퍼링크를 설정하는 방법을 이해하셨다면 이런 것쯤은 A picece of cake!!가 되어야 하는데…
질문을 하셨으니까 답변을 드려야겠군요. 우선 아래와 같은 표가 있습니다. 왼쪽 셀에는 회사명이 있고 오른쪽에는 그 회사의 URL명이 있다고 가정할 때, 회사명에 하이퍼링크를 걸어서 클릭을 했을 때 해당 홈페이지로 바로 접속을 하고 싶다는 질문이시지요?
HYPERLINK 설정 & 이름 복사하기
핵심 요약: 하이퍼링크와 이름 복사
영역을 순환하며 옆 셀 값으로 하이퍼링크를 만들고, Names 컬렉션을 순환하며 이름 정의를 다른 파일에 복사합니다.
- 1단계: Application.InputBox(Type:=8)로 대상 영역을 받습니다.
- 2단계: Hyperlinks.Add로 옆 셀의 URL을 주소로 하이퍼링크를 만듭니다.
- 3단계: For Each로 Names 컬렉션을 순환하며 다른 통합 문서에 이름을 추가합니다.
Step 1: 이름 옆 URL로 하이퍼링크 걸기
| 회사명 | URL명 |
|---|---|
| Exceller | http://www.iExceller.com |
| Pacific | http://www.pacific.co.kr |
| Amore | http://www.amore.co.kr |
| Laneige | http://www.laneige.co.kr |
| Hera | http://www.hera.co.kr |
| Empas | http://www.empas.com |
| Simmani | http://www.simmani.com |
아래 버튼을 클릭하면 InputBox가 나타나는데 여기서 해당 영역(위의 표에서 빨간 점선 네모 부분)을 지정해 보세요.
바로 이렇게 되도록 해 달라는 요청이시지요? 코드를 살펴볼까요? 몇 줄 되지도 않는 아주 간단한 코드입니다.
Step 2: MakeHyperlink 프로시저
Sub MakeHyperlink()
Dim rngCell As Range
Dim rngTarget As Range
Dim Msg As String
On Error GoTo ET
'//에러가 발생할 경우 에러 트래핑 구문인 ET로 갑니다.
Set rngTarget = Application.InputBox("하이퍼링크를 설정할 영역을 지정하세요", _
"대상영역 지정//By Exceller", Type:=8)
'//InputBox를 사용해서 사용자가 지정한 대상영역을 받아옵니다. 값이 아닌 Range를
'//받기 위해서 그냥 InputBox 함수가 아니라 Application.InputBox라고 해 주었습니다.
'//이 둘의 차이점은 아시지요? ^^
For Each rngCell In rngTarget
rngCell.Hyperlinks.Add anchor:=rngCell, Address:=rngCell.Offset(0, 1).Value
'//사용자가 지정한 영역이 유효한 영역이면 For ~ Next 순환문을 돌면서
'//하이퍼링크를 설정합니다. 지정한 영역의 바로 옆 셀의 값을 사용하므로
'//…,Address:=rngCell.Offset(0,1)이 되는 것입니다.
Next rngCell
Exit Sub
ET:
Msg = "유효하지 않은 영역입니다!" & vbCr
Msg = Msg & "영역을 다시 확인하세요"
MsgBox Msg, , "영역 설정 오류//By Exceller"
End Sub
Step 3: 이름 정의를 다른 파일로 복사하기
오늘은 짧게 여기까지…만 하려니까 좀 허전하지요? 질문 하나를 더 소개해 드리지요.
안녕하세요.
서로 다른 엑셀 파일인데, A 파일의 셀을 B파일로 복사할 때,
정의한 이름을 그냥 사용할 수 있도록 하는 방법이 있는지요?
시트 전체를 다른 파일로 복사하다 보니까 "정의한 파일의 이름을 그대로
사용하시겠습니까?"라는 메시지에 계속 "예" 버튼을 눌러야 하더군요.
좋은 방법을 알려주세요. 감사합니다.
현재 파일의 특정 영역에 이름을 정의해 두고 사용하였는데 이것을 다른 파일로 복사를 할 경우, 종전의 이름을 그대로 사용하고 싶다는 질문이시군요.
작업 중인 파일의 여러 범위에다 이름을 정의해 두었는데 이것을 다른 파일에서 사용하고자 할 경우, 각각의 범위를 일일이 다시 지정한다는 것은 비효율적인 일이라 할 수 있겠지요? 또한 VBA를 배운 사람의 태도도 아닐 것입니다. ^^
이런 경우, 아래의 코드를 응용해서 사용해 보시기 바랍니다. 이것은 현재 워크북에 정의되어 있는 이름들을 MyXls.xls라는 파일에 한꺼번에 샤악 복사하는 코드입니다. 코드가 간단하니까 별도의 설명은 필요없으리라 생각됩니다.
Sub CopyCurrentNames()
Dim MyName As Name
'//다른 것은 설명드릴 것도 없고, Name 개체를 하나 정의해 두고 순환문을 돌면서
'//순차적으로 접근해가며 사용하는 방법을 주의깊게 살펴보시기 바랍니다.
For Each MyName In ActiveWorkbook.Names
Workbooks("MyXls.xls").Names.Add Name:=MyName.Name, RefersTo:=MyName.Value
Next MyName
End Sub
이 코드를 실행하기 전에 대상 통합 문서(MyXls.xls)가 열려 있어야 합니다. 오늘날에는 확장자가 .xlsx인 경우가 많으므로 파일 이름을 자신의 파일에 맞게 바꾸어 사용하시기 바랍니다.
마무리
다음 시간에…
정리 — 하이퍼링크와 이름 복사 핵심
| 구분 | 사용한 코드 | 역할 |
|---|---|---|
| 영역 받기 | Application.InputBox(..., Type:=8) | Range 개체 받기 |
| 하이퍼링크 | rngCell.Hyperlinks.Add anchor:=rngCell, Address:=... | 링크 설정 |
| 옆 셀 값 | rngCell.Offset(0, 1).Value | 링크 주소 |
| 이름 순환 | For Each MyName In ActiveWorkbook.Names | 모든 이름 접근 |
| 이름 복사 | Workbooks("MyXls.xls").Names.Add | 다른 파일에 이름 추가 |
자주 묻는 질문 (FAQ)
Q1. 회사명에 옆 셀의 URL로 하이퍼링크를 걸려면?
영역을 순환하며 Hyperlinks.Add의 Address에 옆 셀의 값을 지정합니다.
Q2. InputBox와 Application.InputBox의 차이는?
InputBox 함수는 값을 돌려주지만 Application.InputBox는 Type:=8을 지정해 Range 개체를 돌려받을 수 있습니다.
Q3. 정의한 이름을 다른 파일로 한꺼번에 복사하려면?
Names 컬렉션을 순환하며 대상 통합 문서의 Names.Add로 이름과 참조 영역을 추가합니다.
마치며
몇 줄의 코드로 하이퍼링크를 일괄 설정하고 이름 정의도 한꺼번에 옮길 수 있습니다.