Excel 워크 시트 복사 및 수식에서 상대 셀 참조 유지


40

Excel의 또 다른 복사 문제 :

내가 복사 한 워크 시트 여전히 참조 WorkbookA.xlsx없이 WorkbookB.xlsx에 WorkbookA.xlsx에서 워크 시트를 복사 할 수있는 방법은 수식 예 =B!23하게 =[WorkbookA.xlsx]!B!23복사 할 때.

"절대"셀 참조 대신 "상대"셀 참조를 유지하고 싶습니다 (아직 존재하지 않는 경우 Excel 세계에서이 용어를 발명합니다).

내가 작동시키지 못하는 또 다른 대안은 셀 "값"만 붙여 넣는 옵션입니다. Excel에서는 "값"을 셀의 실제 수식이 아닌 계산 된 값으로 처리합니다. 붙여 넣기 수식을 선택해도 여전히 절대 참조가 제공됩니다.

내가 왜 필요한지에 대한 자세한 내용 : 일상적인 작업에 프로덕션 xlsx를 사용하고 있습니다. 우리는 지속적으로이 xlsx에 대한 "업그레이드"를 수행해야하므로 한 사람이 한 장의 사본과 사본을 만들 수 있습니다. 동시에 다른 사람이 다른 시트를 변경할 수도 있습니다. 보고서에는 요약 보고서와 같이 다른 시트에 종속 셀이 없으므로 시트 를 복사하여 원래 xlsx로 다시 병합하는 것이 바람직합니다. 그러나 "절대적인"참조는 많은 문제를 야기하고 있습니다.


혼란 스러워요. WBA에서 WBB로 시트 1을 복사하고 WBA가 아닌 WBB를 기준으로 수식을 복사하려고합니다. WBB 시트 2가 WBA 시트 2와 동일 하지 않으면 불가능합니다 . 또한 을 원할 경우 값만select all - copy - paste special - values 갖도록 시트 를 복사 할 수 있습니다 . 최종 단계를 수행하기 위해 최종 사용자에게 의존하기보다는 복사하는 동안 모든 작업을 수행하려는 경우 그 작업을 수행했습니다. WorkbookA (또는 1) 및 WBB (2)와 시트 번호 측면에서 어떻게 원하는지 정확히 알려주십시오.
Raystafarian

나는 이미 마지막 단락에서 설명하려고 시도했지만 여전히 명확하지 않다고 생각합니다. 예, WBA와 WBB는 WBA에서 한 장에 대해 동일한 기대치입니다. WBA에서 해당 시트를 디자인하는 동안 모든 셀 참조는 시트의 통합 문서와 관련이 있습니다. 복사 워크 시트 함수는 모든 셀 수식에 WBA를 추가하여 "절대"로 만들고 싶지 않습니다.
Jake

붙여 넣기 특수 값은 계산 된 값만 붙여 넣습니다. WBA.xls를 추가하지 않고 수식을 복사해야합니다.
Jake

알았어 알아
차리면

전체 통합 문서의 사본을 만든 다음 새 사본에서 필요하지 않은 것을 삭제할 수 없습니까?
dwolters

답변:


21

Ctrl+ ~를 사용 하여 수식을 표시하십시오. 그런 다음 Ctrl+ A를 사용 하여 모든 것을 선택하고 복사 한 다음 메모장에 붙여 넣습니다.

마지막으로 메모장에서 복사하여 다른 통합 문서에 붙여 넣습니다.


1
@Jake : 그러나 통합 문서에는 버튼, 드롭 다운 등 이 있다고 말했습니다 . 명명 된 범위. 이 기술은 그것들을 복사하지 않을 것입니다.
Scott

큰 워크 시트에서 링크 편집 / 소스 변경 기술은 매우 느리지 만 빠릅니다.
토니 풀로 카스

23

많은 경우 다음을 수행하는 것이 더 쉽다는 것을 알았습니다.

  • 시트를 새 통합 문서로 복사
  • 새 통합 문서에서 새 시트를 활성화하십시오.
  • 모두 선택 ( Ctrl+ A)
  • 찾기 / 바꾸기
    • 발견: [WorkbookA.xlsx]!
    • 바꾸기 : <비워두기>
  • 모두 다 바꿔

11

이 답변 바로 아래의 서명되지 않은 답변은 약간의 변형으로 저에게 효과적이었습니다.

  1. 대상 스프레드 시트를 작성하고 저장하십시오.

  2. "이동", "복사"를 사용하거나 수식이있는 페이지를 새 스프레드 시트로 드래그하십시오. 그러면 새 페이지의 수식이 이전 워크 시트를 가리 킵니다. 그런 다음 새 스프레드 시트를 이전 워크 시트와 같은 위치에 저장하십시오.

  3. 그런 다음 데이터 탭으로 이동하여 링크 편집을 클릭하십시오. 페이지에 링크가 없으면 옵션이 활성화되지 않습니다.

  4. 결과 대화 상자에서 소스 파일의 이름을 선택하고 "소스 변경"을 클릭하십시오.

  5. 다음에 나타나는 열린 파일 대화 상자에서 새 스프레드 시트의 이름을 선택하십시오.

닫기를 클릭하면 완료됩니다.


9

또는 단순히 다음을 수행하십시오.

이것을 변환 :

=database_feed!A1

이에:

=INDIRECT("database_feed!A1")

워크 시트간에 복사 할 때 더 이상 참조가 변경되지 않습니다.

참조 된 시트가 많지 않은 경우 다른 대안을 사용할 수 있습니다.

=INDIRECT("'"&B1&"'!A1")

B1 셀에 참조 시트 이름을 입력하십시오. 이제 새 스프레드 시트에 복사 할 때 업데이트 할 셀이 하나만 있습니다.


1
수식이 포함 된 템플릿 시트가 있고이를 VBA를 사용하여 새 통합 문서에 복사하는 것이 좋습니다. 따옴표 사이에 참조를 유지하고 A1 유형 참조를 유지하려면 TRUE를 추가해야한다는 것을 알았습니다. 예. = INDIRECT ( " 'Sheet1'! A1", TRUE)
RogerB 2016 년

2
INDIRECT이 (만 편집 할 때 반대) 때마다 다시 계산 있도록 휘발성 공식은하는 수 아주 천천히 아래로 더 복잡한 통합 문서, 그래서주의와 함께 사용하기
앤디 테라

3

아래 코드는 필요에 따라 조정할 수 있습니다. 시트의 모든 수식을 가져 와서 wb1새 통합 문서의 시트에 적용합니다. 수식은 Strings 로 적용 되므로 원본 통합 문서에 대한 참조는 삽입되지 않습니다. 또한이 코드는 클립 보드를 사용하지 않고 셀을 반복 할 필요가 없으므로 매우 빠릅니다.

Sub copyformulas()

Dim wb1 As Workbook, wb2 As Workbook
Dim s1 As Worksheet, s2 As Worksheet
Dim formArr() As Variant

Set wb1 = ThisWorkbook
Set s1 = wb1.Sheets("Sheet1")
Set wb2 = Workbooks.Add
Set s2 = wb2.Sheets("Sheet1")

formArr = s1.UsedRange.Formula
s2.Range("A1").Resize(UBound(formArr, 1), UBound(formArr, 2)).Formula = formArr

End Sub

3

응답의 99 %가 원래 질문을 해결하지 못 했으므로 다음은 올바른 응답입니다.

  1. 평상시처럼 원본 파일 (Original.xlsx)에서 새 Excel 파일 (New.xlsx)로 시트를 복사합니다. 일반적으로 이름을 마우스 오른쪽 버튼으로 클릭하고 "이동 또는 복사 ..."를 선택합니다.

  2. 두 번째-새로 작성된 파일 (New.xlsx)을 저장하십시오.

  3. 새 파일의 데이터에서 "링크 편집"을 클릭하십시오.

  4. 팝업에서 "소스 변경 ..."을 선택하십시오.

  5. 파일 (New.xlsx)을 찾아서 열기를 클릭하십시오.

원본 (Original.xlsx)에 대한 모든 참조가 제거됩니다.

끝난!


답변 목록에서 더 높아야합니다
sabre23t

2
  • 워크 시트를 'WorkbookB.xlsx'에 복사
  • 새 파일에서 워크 시트 열기
  • 모두 선택
  • 메뉴 데이터로 이동하여 링크 편집을 클릭하십시오
  • 이전 파일에 대한 링크가 현재 열려있는 파일에 대한 링크가되도록 링크 편집

이것은 나를 위해 작동합니다.


0

이 작업을 수행하려면 두 통합 문서가 모두 열려 있어야합니다 . 이 매크로를 실행하면 workbookA!sheet1을 복사 workbookB!sheet1한 다음 모든 workbookA참조를 바꿉니다. 원유이지만 작동합니다 . WorkbookA.xlsx 이름과 일치하도록 코드를 분명히 변경할 수 있지만 올바른 확장명을 사용하고 인용 부호로 유지하십시오.

아시다시피, 매크로를 만들 alt + F11려면 Visual Basic Editor를 불러 오십시오. 그런 다음 WBA를 마우스 오른쪽 버튼으로 클릭하고 insert - module아래 코드를 복사하여 모듈에 붙여 넣습니다. 그런 다음 F5매크로를 실행하십시오. 매크로가 실행되지 않으면 매크로가 활성화되지 않았기 때문일 수 있습니다. 매크로를 저장 한 다음 다시 열어 매크로를 활성화하라는 메시지가 표시되면 활성화하십시오.

Sub copysheetremoveWBref()

    Application.ScreenUpdating = False

    'activate WBA
    Application.Workbooks("workbooka.xlsx").Activate
    'Select WBA Sheet1
    Application.Workbooks("workbooka.xlsx").Sheets("Sheet1").Select
    'copy WBA!sheet1 to WBB!sheet1
    Sheets("Sheet1").copy Before:=Workbooks("WorkbookB.xlsx").Sheets("sheet2")
    'find WBA references and remove them
    Cells.Replace What:="=[workbookA.xlsx]", Replacement:="=", LookAt:=xlPart _
        , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

    Application.ScreenUpdating = True


End Sub

1
단일 루틴은 CTRL+H지금 수동으로 사용하는 것이 좋지만 , 이러한 모든 것들은 버튼, 드롭 다운 등과 같은 컨트롤에 대한 참조를 수정하지는 않습니다. 명명 된 범위.
Jake

0

셀을 정상적으로 새 워크 시트에 복사 한 다음 수식에서 이전 파일 경로를 제거하기 위해 찾기를 수행 하여이 작업을 수행했습니다.

예를 들어 첫 번째 수식이 =J2있고 이것이 =[filepath]J2이면 새 스프레드 시트 전체를 찾아서 [filepath]바꾸고 아무 것도 바꾸지 마십시오 . 삭제하고 수식을로 복원합니다 =J2.

VB가 필요 없습니다!


슬프게도 엑셀은 공식 내에서 하위 문자열을 찾을 때 간헐적으로 작동하는 것 같습니다 : /. 작은 따옴표로도 아무것도 찾을 수없는 것 같습니다.
Douglas Gaskell

0

비슷한 문제가 발생했습니다. 수식을 WBA에 연결하여 붙여 넣은 이유는 WBA에서 작업하고있는 탭 (시트)의 이름이 WBB의 탭 (시트)과 다르기 때문입니다. 나를 위해, 그것은 항상 "마지막 시트"였지만 하나는 'MinFlow'이고 다른 하나는 'NormalFlow'입니다. 나는 'Results'로 이름을 바꾸었고 복사 / 붙여 넣기는 내가 원하는대로 작동했다.


0

이동할 셀을 선택하십시오. 이제 n 드롭을 다른 워크 시트 (다른 ​​탭)로 드래그하여 이동하십시오.

알아요. 까다로운 부분은 다음과 같습니다. cmd (mac) 또는 alt (win)를 누르면 셀이 다른 탭에 놓일 수 있습니다.


답을 조금 더 넓힐 수 있습니까? 드래그하는 동안 다른 탭에서 드롭하는 방법 / 위치가 명확하지 않습니다. 감사.
fixer1234

0

안녕하세요.이 문제에 대한 간단한 해결책이 있습니다.

  1. 평소와 같이 셀을 복사하십시오.
  2. 수식에서 이전 통합 문서 [WorkbookA.xlsx]에 연결하는 텍스트를 선택하고 복사하십시오.
  3. 변경하려는 모든 셀을 선택하고를 누르고 CTRL+F바꾸기 탭을 선택하십시오.
  4. [WorkbookA.xlsx]를 빈 공간으로 바꿉니다 (일명 Replace with필드에 아무것도 쓰지 않음) Replace All.

짜잔-끝났다.


0

또 다른 '트릭'-소스 워크 시트를 복사하기 전에 모든 수식 한정자 =를 다른 문자 집합 (예 :)으로 바꾸십시오 ###=.

공식 한정자 다시 (교체 한 후 복사 한 후, 이상 워크 시트를 복사 교체 ###=로를 =).

참조 시트에 앞서 형식 시트 내의 모든 시트 참조도 새 시트로 복사되어야합니다.


0
  1. 평소와 같이 시트를 복사하십시오. (탭을 마우스 오른쪽 버튼으로 클릭하고 '이동 또는 복사'로 이동하십시오.) 형식화를위한 것입니다.

  2. 원본 시트에서 모든 셀을 복사합니다 ( Ctrl+ A또는 왼쪽 위 삼각형 및 Ctrl+ 사용 C)

  3. 새 통합 문서에 값으로 붙여 넣기 ( "1 단계"시트 위에) (붙여 넣기 옵션> 123)


0

VBA 프로그램에서 시트를 가져 오기 때문에이 작업을 자동으로 수행해야하는 경우 이것을 사용하십시오 :

Public Sub ChangeSource()
'
' ChangeSource Macro
' Edit the links to point to the current workbook.
'
    Dim allLinks As Variant
    allLinks = ThisWorkbook.LinkSources(xlExcelLinks)
    If Not IsEmpty(allLinks) Then
        Dim eachLink As Long
        For eachLink = 1 To UBound(allLinks)
            If InStr(3, "String found in source book name.", allLinks(eachLink)) Then
                ThisWorkbook.ChangeLink Name:=allLinks(eachLink), NewName:=ThisWorkbook.FullName, Type:=xlExcelLinks
            End If
        Next eachLink
    End If
End Sub

"소스 북 이름에있는 문자열"을 변경하십시오. 교체하려는 이전 링크와 일치합니다. 모든 링크를 바꾸려면 if 블록을 제거 할 수 있습니다.


-1

두 통합 문서를 엽니 다. 원본 통합 문서 (WorkbookA.xlsx)에서 복사 할 시트를 선택하십시오. 시트 탭을 마우스 오른쪽 버튼으로 클릭하고“이동 또는 복사…”를 선택하십시오. "이동 또는 복사"대화 상자의 "예약"드롭 다운에서 "WorkbookB.xlsx"를 선택하고 해당 책에서 원하는 위치를 선택한 다음 "사본 만들기"를 선택하십시오. (그리고“확인”을 클릭하십시오.)


-1

이 경우 WorkbookA.xlsx가 될 시트를 이동하려는 시트의 사본을 만드십시오. "WorkbookA.xlsx 사본"이라고 이름을 바꿉니다. 이제이 새 통합 문서와이 경우 WorkbookB.xlsx가 될 시트를 이동하려는 통합 문서를여십시오. WorkbookA.xlsx의 사본 인 작성한 통합 문서의 시트를 마우스 오른쪽 단추로 클릭하고 '이동 또는 복사'를 선택한 다음이 시트를 WorkbookB.xlsx로 이동하십시오. 끝났습니다!


귀하의 답변이 질문의 문제를 어떻게 해결하는지는 확실하지 않습니다. 왜 이동이 다른 방식으로 작동하고 복사가 작동합니까?
Máté Juhász

제안한 솔루션을 시도했지만 작동하지 않습니다. 전체 시트 복사와 이동에는 차이가 없습니다.
nixda
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.