Q15. 다른 책의 셀을 참조하는 방법?
이전에는 다른 시트에서 값을 참조하는 방법을 다루었습니다.
그것의 약간 응용 버전입니다.
이런 식으로 데이터 .xlsx와 매크로 테스트 .xlsm이라는 파일을 준비했습니다.
매크로 테스트가 읽는 파일이며 데이터 .xlsx가 읽는 데이터가 들어 있습니다.
한 파일입니다.
데이터 .xlsx의 내용은 다음과 같습니다.
이것을 읽어 매크로 테스트 안에 있는 전체 시트에 추기해 가려면? 라는 것을
생각해 봅시다.
매크로 테스트의 전체 시트는 이런 느낌입니다.
그냥 B16 셀이 열려 있기 때문에 16 행째에 데이터를 반영하고 싶네요.
■ 포인트
다른 책에서 셀을 참조하는 경우 이미 열려 있고 아무 것도 열지 않은 경우
처리가 됩니다.
이미 열려 있다면 그대로
Range("B16").Value = Workbooks("데이터.xlsx").Worksheets(1).Range("B3").Value
와 같이 작성할 수 있습니다만, 이 경우는 대상이 되는 책이 열려 있지 않은 경우,
읽을 수 없어 오류가 발생합니다.
예를 들어, 열려 있는지 여부를 미리 확인하고
함께 처리를 작성하는 방법 등이 있지만, 이번에는 간단하게
원래 열려 있지 않은 경우를 상정하고,
대상 책 열기 → 특정 셀의 값 참조
라는 흐름으로 매크로를 만들어 갑시다.
책을 여는 것은 쉽습니다.
Workbooks.Open Filename:="절대 경로"
됩니다. 디렉토리에 따라서는 파일명만으로도 열 수 있으므로,
상황에 따라 구분해 봅시다.
■답변
Sub Q15_Answer()
Dim wb As Workbook
Set wb = ThisWorkbook
Dim ws As Worksheet
Set ws = wb.Worksheets("全体")
Workbooks.Open FileName:=("C:\Users\user\Desktop\work\VBAマクロ\データ.xlsx")
ws.Range("B16").Value = Workbooks("データ.xlsx").Worksheets(1).Range("B3").Value
ws.Range("C16").Value = Workbooks("データ.xlsx").Worksheets(1).Range("C3").Value
ws.Range("D16").Value = Workbooks("データ.xlsx").Worksheets(1).Range("D3").Value
ws.Range("E16").Value = Workbooks("データ.xlsx").Worksheets(1).Range("E3").Value
ws.Activate
Set wb = Nothing
Set ws = Nothing
End Sub
■해설
첫째, 통합 문서와 워크 시트를 저장하는 변수를 선언하고 읽는 대상입니다.
전체 시트를 대입하고 있습니다.
이것은, 시트를 참조하는 기술을 할 때 짧게 보기 쉽게 하기 위해서입니다.
로드 소스도 마찬가지로 변수에 넣으면 더 보기 쉬워집니다.
그런 다음 Workbooks.Open FileName:=("C:\Users\user\Desktop\work\VBA 매크로\데이터.xlsx")
에서 로드할 책을 열고 있습니다.
경로는 적절하게 환경에 맞게 변경하십시오.
덧붙여서, 이미 대상 책을 열고있는 상태에서이 열기 프로세스가 실행되었다고 가정합니다.
그래도 오류로 멈추지 않습니다. 그대로 후속 처리가 흐릅니다.
그런 다음 직접 대상 셀을 참조하면됩니다.
마지막 ws.Activate는, 데이터를 대입한 뒤는 데이터측의 셀이 액티브하게 되어 버리기 때문입니다.
이 1 문장을 넣는 것으로, 결국 전체 시트를 활성화하고 있습니다.
실행 결과는 다음과 같습니다. 무사히 복사할 수 있었습니다.
Reference
이 문제에 관하여(Q15. 다른 책의 셀을 참조하는 방법?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/guren111/items/919ea0cc1e3e4f54e8bf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)