EXCEL VBA 別のブックからデータをコピーする(ブック間のシートコピー)(テクニック)

 

EXCEL VBA 別のブックからデータをコピーする(ブック間のシートコピー)(テクニック)

 

●はじめに

EXCELブックで別々にデータを管理している時に、個々に同じデータをブックに持つよりも、マスターデータのブックとして、必要に応じてデータを参照または、データをコピーする方が、データが管理しやすくなります。ここで説明するのは、別のブックからデータをコピーする2通りのプログラム説明をいたします。それでは、順番に説明いたします。

 

●【EXCEL VBA 別のブックからエクセルブックを開かないでデータ取得する(ブック間のシートコピー)、下記の参照して下さい】

 

 

EXCEL VBA 他のブックからデータを取得する。(指定したファイル)

 

●プログラム説明 (サンプル①)

下記のサンプルプログラムは、他のブックから必要なデータを取得し選択したデータを習得するサンプルプログラムです。今回、説明するサンプルは、下記、図の通りに、メインブックからマスターブックにアクセスを行い、マスターブックからメインブックに必要なデータを取得(コピー)を行うサンプルプログラムです。複数のプログラムで共通データを取り扱う時に、便利だと思います。


下記のサンプルプログラムを実行する際は、下記の通りにブック名(ファイル名)・シート名を設定して下さい。
※ ファイル名「main」シート名「項目」
※ ファイル名「Master」シート名「項目M」
※ 「Master.xlsx」の保存先は、C:\DATAへ保存する。

★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
別ブック転記

 

 

'******** AKIRA55.COM ******* https://akira55.com/other_books
'
Sub マスターデータ取込01()  '指定したファイルを取り込み、別のファイルに貼り付ける。

    Dim SetFile As String
    Dim wbMoto, wbSaki As Workbook
    

    Set wbMoto = ActiveWorkbook  'マスターデータ取り込み元をブック名をセット(取り込み元)

    Application.DisplayAlerts = False
       
    SetFile = "C:\DATA\Master.xlsx"  'マスターデータファイルの取り込み場所をセット(取り込み先)
    
    Workbooks.Open fileName:=SetFile, ReadOnly:=True, UpdateLinks:=0 'マスターデータファイルを読み取り専用で開きます()
    Set wbSaki = Workbooks.Open(SetFile) '開いたマスターブック名とセット(取り込み先)
    

        wbSaki.Worksheets("項目M").Range("A1:B20").Copy  '取り込み先のシート名の「項目M」セルA1:B20の範囲をコピー
        
        wbMoto.Worksheets("項目").Range("A1").PasteSpecial xlPasteFormulasAndNumberFormats  '取り込み元 シート名「項目」A1から貼り付け
        
        Application.CutCopyMode = False  'コピー切り取りを解除
        
        wbSaki.Close False  'マスターデータ取り込み先のファイルを閉じる
    
    Application.DisplayAlerts = True

End Sub
'
'

 

 

●実行前~実行後  ※プログラム実行後、ブック名「Master」からデータを取得して、ブック名「main」へデータを取得する事ができました。

 

 

 

他のブックからデータを取得する・複数シートからデータ取得(ファイルを選択する)

 

●プログラム説明 (サンプル②)

下記のサンプルプログラムは、上記のサンプルプログラム①の応用になります。今回のサンプルプログラムは、他のブックから取得する場合に、ダイアログボックスにより、ファイルが自由に選択する事が出来ます。複数のマスターブックからデータを取得する場合に利用できます。それでは、順番に説明いたします。

下記のサンプルプログラムを実行する際は、下記の通りにブック名(ファイル名)・シート名を設定して下さい。
※ ファイル名「main」シート名「項目」・「顧客データ」
※ ファイル名:「MasterXX」シート名「項目M」 ・「顧客データ」
ファイル名については、上記のファイル名では無くでも動作しますが、シート名は指定です。

 

 

'******** AKIRA55.COM ******* https://akira55.com/other_books 
'
Sub マスターデータ取込02()  '選択したファイルを取り込み、別のファイルに貼り付ける。

    Dim RC As Integer
    Dim OpenFileName, fileName, Path, SetFile As String
    Dim wbMoto, wbSaki As Workbook

    Set wbMoto = ActiveWorkbook  'マスターデータ取り込み元をセット

    Application.DisplayAlerts = False
    
    RC = MsgBox("マスターデータ取込みますか?", vbYesNo + vbQuestion, "確認")
    
    If RC = vbYes Then
            
            OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
            'ダイアログボックスを表示して、マスターデータファイルを指定します。
            
            If OpenFileName <> "False" Then
                 SetFile = OpenFileName
            Else
                MsgBox "キャンセルされました"
                Exit Sub  'マスターデータの取り込みをキャンセル
            End If
    
            
            Workbooks.Open fileName:=SetFile, ReadOnly:=True, UpdateLinks:=0
            'ダイアログボックスで指定したマスターデータファイルを開きます。
            
            Set wbSaki = Workbooks.Open(Path & SetFile)
            
                'ワークブック間のシート「項目」をコピーします。
                wbSaki.Worksheets("項目M").Range("A1:B20").Copy
                wbMoto.Worksheets("項目").Range("A1").PasteSpecial xlPasteFormulasAndNumberFormats
                
                'ワークブック間のシート「顧客データ」をコピーします。
                wbSaki.Worksheets("顧客データM").Range("A1:G20").Copy
                wbMoto.Worksheets("顧客データ").Range("A1").PasteSpecial xlPasteFormulasAndNumberFormats
                
                
                Application.CutCopyMode = False  'コピー切り取りを解除
                wbSaki.Close False  'マスターデータ取り込み先のファイルを閉じる
  
        Else
        
        MsgBox "処理を中断します"
    
    End If
    
    Application.DisplayAlerts = True

End Sub
'
'

 

 

●実行前~実行後 ※プログラム実行後、ダイアログボックスが表示されて、ファイル(マスター)を選択します。選択したファイルから、シート「項目」・「顧客データ」を取得しました。

 

 

 

最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。

 

AKIRA