나는 이것이 어떻게 이루어질 수 있는지 탐구하려고 노력한 후에 매우 혼란스러워졌습니다. 매우 간단하지만 아직 해결책을 찾을 수 없습니다.
제가 알고 싶은 것은 다음과 같습니다. 나는 세 개의 개별 문서를 가지고 있는데, 모두 어느 정도 연결되어 있습니다. 데이터는 문서(1. 마스터 입력)에서 입력되고 세 개의 스프레드시트로 요약됩니다.
각 문서는 동일하게 배치되어 있으며 유일한 가변 요소는 날짜이며 마스터 입력의 경우 숫자 값이 있습니다.
그림 형식으로 보면 다음과 같습니다.
ㅏ. 1 마스터 입력 --> (피드) 2,3 b. 2 --> (피드) 3 및 4 c. 3 --> (피드) 4
제가 알고 싶은 것은 문서 2,3,4의 데이터가 매년 변경된다는 것입니다. 예를 들어 스프레드시트에 '하이퍼링크'가 많이 있습니다.
2015년 =" \일별 수익\2015[수익 2015.xls]연도 요약'!$C$160"
2016년 =" \일별 수익\2016[수익 2016.xls]연도 요약'!$C$160"
2017 =" \일별 수익\2017[수익 2017.xls]연도 요약'!$C$160"
위에서 변경해야 할 유일한 변수는 연도입니다. 대체하는 데 사용할 수 있는 코드/매크로 등이 있습니까?년도하이퍼링크 내에서. 파일 경로는 다음과 같습니다.언제나동일하게 유지됩니다.
나는 그 사실을 완전히 알고 있다.찾아서 바꾸기하지만 저는 이 기능을 사용자에게 친숙하고 쉽게 만들고 싶습니다.
도와주세요, 감사합니다!
답변1
우선, 하이퍼링크에 대해 계속 이야기하고 계십니다. 당신이 의미하는 것은 다른 파일을 참조하는 수식이라고 생각합니다. 그것들은 하이퍼링크가 아닙니다. 실제로 하이퍼링크를 의미하는 경우 해결 방법은 다음과 같습니다.
실제 질문에 대답하려면: 예, 이에 대한 매크로가 있습니다. 확신하는. 당신이 알아야 할 것은 객체라고 생각합니다 Worksheet.Hyperlinks
. 각 워크시트의 각 하이퍼링크를 반복하여 주소를 원하는 대로 바꿀 수 있습니다. 다음은 스니펫 예입니다.
Sub ChangeHyperlinks()
Dim ws As Worksheet
Dim hyp As Hyperlink
For Each hyp In ws.Hyperlinks
hyp.Address = Replace(hyp.Address, "2015", "2016")
Next
End Sub
변경하고 싶지 않으면 수정해야 합니다.모든와 같은 조건문을 추가하여 하이퍼링크를 만듭니다 If InStr(1, hyp.Address, "\Daily Revenue\2015") Then
. Workbook_Open
파일이 열릴 때마다 이벤트를 실행하고 파일 이름을 기준으로 올바른 연도를 선택한 다음 하이퍼링크에 대한 바꾸기를 실행할 수 있습니다 . 응, 이거 발사될 거야모든파일이 이미 정확하더라도 파일이 열리는 시간입니다. 가지고 있는 하이퍼링크 수에 따라 괜찮을 수도 있고 모든 것이 중단될 수도 있습니다.
실제로 의미하는 것이 수식인 경우 코드 조각은 다음과 같습니다. 다시 말하지만, 필요에 따라 더 많이 조정해야 하지만 이렇게 시작하는 것이 좋습니다.
Private Sub Workbook_Open()
Dim i As Integer
Dim srcArray As Variant
srcArray = ThisWorkbook.LinkSources(xlLinkTypeExcelLinks)
For i = 1 To UBound(srcArray)
Debug.Print srcArray(i)
ThisWorkbook.ChangeLink srcArray(i), Replace(srcArray(i), "2015", "2016")
Next
End Sub
또한 수식을 의미했다면 귀하의 질문은스택 오버플로.
답변2
귀하의 질문에 몇 가지 모호한 점이 있습니다. 이 답변에서는 하이퍼링크가 아닌 예제에 설명된 대로 다른 통합 문서의 셀 참조에 대해 이야기하고 있으며 작업이 매년 모든 수식을 다시 작성하는 대신 참조를 연도별로 조정할 수 있도록 설정하는 것이라고 가정합니다.
먼저, 어딘가에 연도 참조가 필요합니다. 연도를 언제, 어떤 방식으로 변경하려는지 명확하지 않습니다(매년 1월 1일 자동으로? 선택한 날짜에? 언제든지 연도를 변경할 수 있기를 원하십니까?). 따라서 저는 이것을 일반적인 솔루션을 기반으로 하겠습니다. 연도 참조를 저장할 셀을 선택하세요. 내 예 Z1
에서는 예제의 셀 참조가 포함된 워크시트의 셀을 사용하겠습니다 . 연도를 마음대로 또는 선택한 날짜에 변경하려면 Z1
4자리 연도를 입력하면 됩니다. 1월 1일에 연도가 자동으로 변경되도록 하려면 를 사용하십시오 =YEAR(TODAY())
.
그런 다음 연도를 각 수식에 하드 코딩하는 대신 참조를 연결하고 Z1
INDIRECT 함수를 사용하여 텍스트 문자열을 셀 참조로 변환합니다. 예를 들어:
'\Daily Revenue\2015[Revenue 2015.xls]Year Summary'!$C$160 becomes
INDIRECT("'\Daily Revenue\"&Z1&"[Revenue "&Z1&".xls]Year Summary'!$C$160")
기존 워크시트의 경우 셀 참조를 수정하려면 한 번만 변경해야 합니다. 그 후에는 언제든지 Z1
항목을 변경하여 연도를 변경할 수 있습니다.