例文を使って繰り返し業務を時短

【マクロ・VBA】エクセルファイルをインポートする

エクセル、マクロ、VBAのエクセルファイルのインポート VBA

別ファイルのデータをアクティブシートにインポートする

これは、指定したファイルの “Sheet1″からA1:D10の範囲をアクティブワークシートにコピーして貼り付けるエクセルマクロです。必要に応じて、範囲を変更してください。

Sub ImportData()
    '1. データをインポートしたいワークシートをアクティブにします。
    ActiveSheet.Select
    
    '2. インポートするファイルを選択するためのダイアログボックスを表示します。
    Dim fileName As Variant
    fileName = Application.GetOpenFilename("Excel Files (*.xlsx), *.xlsx")
    
    '3. 選択されたファイルを開きます。
    Workbooks.Open fileName
    
    '4. インポートするワークシートを選択します。
    Dim importSheet As Worksheet
    Set importSheet = Workbooks(fileName).Worksheets("Sheet1")
    
    '5. データをコピーし、アクティブワークシートに貼り付けます。
    importSheet.Range("A1:D10").Copy Destination:=ActiveSheet.Range("A1")
    
    '6. インポートが完了したら、開いたファイルを閉じます。
    Workbooks(fileName).Close SaveChanges:=False

MsgBox "完了"
End Sub

解説

  • データをインポートしたいワークシートをアクティブにします。
    • ActiveSheet.Select によって、現在アクティブなシートを選択します。
  • インポートするファイルを選択するためのダイアログボックスを表示します。
    • Application.GetOpenFilename を使用して、ダイアログボックスを表示します。
    • Excel Files (*.xlsx), *.xlsx は、ファイルの種類を指定するためのフィルターであり、Excelファイルのみを表示するようにフィルタリングされます。
    • 選択されたファイル名が、fileName 変数に代入されます。
  • 選択されたファイルを開きます。
    • Workbooks.Open を使用して、fileName で指定されたファイルを開きます。
  • インポートするワークシートを選択します。
    • Workbooks(fileName).Worksheets("Sheet1") を使用して、インポートするシートを選択します。
  • データをコピーし、アクティブワークシートに貼り付けます。
    • importSheet.Range("A1:D10").Copy を使用して、インポートする範囲をコピーします。
    • ActiveSheet.Range("A1").PasteSpecial を使用して、コピーした範囲をアクティブワークシートに貼り付けます。
  • インポートが完了したら、開いたファイルを閉じます。
    • Workbooks(fileName).Close を使用して、開いたファイルを閉じます。
    • SaveChanges:=False によって、変更を保存しないように指定されます。
  • 最後に、MsgBox "完了" を使用して、処理が正常に終了したことをユーザーに通知します。

別の構文1

Sub ImportExcelFile()
    Dim filePath As String
    filePath = "C:\path\to\file.xlsx" ' インポートするファイルのパスを指定
    
    Workbooks.Open filePath ' ファイルを開く
    
    Dim sourceSheet As Worksheet
    Set sourceSheet = ActiveWorkbook.Sheets(1) ' インポート元のシートを選択
    
    Dim targetSheet As Worksheet
    Set targetSheet = ActiveSheet ' インポート先のシートを選択
    
    sourceSheet.UsedRange.Copy ' インポート元の範囲をコピー
    
    targetSheet.Range("A1").PasteSpecial xlPasteValues ' インポート先のセルに貼り付け
    
    Application.CutCopyMode = False ' コピーを解除
    
    ActiveWorkbook.Close SaveChanges:=False ' ファイルを閉じる

MsgBox "完了"
End Sub

解説

  • 変数 filePath にインポートするExcelファイルのパスを文字列として設定します。
  • Workbooks.Open メソッドで、ファイルを開きます。引数には、ファイルのパスを指定します。
  • 変数 sourceSheet に、開いたファイルの1つ目のシートをセットします。ActiveWorkbook.Sheets(1) は、開いたファイルの1つ目のシートを選択するためのコードです。
  • 変数 targetSheet に、アクティブなシートをセットします。このマクロが実行された時にアクティブなシートがインポート先になります。
  • sourceSheet.UsedRange.Copy を使用して、インポート元の範囲をコピーします。 UsedRange は、データが入力されている範囲を示すプロパティです。
  • targetSheet.Range("A1").PasteSpecial xlPasteValues で、インポート先のセルに貼り付けます。ここでは値だけを貼り付けるために xlPasteValues を使用しています。
  • Application.CutCopyMode = False で、コピーを解除します。
  • ActiveWorkbook.Close SaveChanges:=False で、開いたファイルを閉じます。SaveChanges:=False を指定することで、保存せずに閉じることができます。
  • MsgBox "完了" で、実行完了のメッセージを表示します。

別の構文2

*アクティブシートの右隣に別ブックのシートをインポート

*ハイライトの箇所を変更して活用してください

Sub アクティブシートの右隣に別ブックのシートをインポート()

'このファイル
Dim wb1 As Workbook
    Set wb1 = ThisWorkbook
Dim ws1 As Worksheet
    Set ws1 = wb1.ActiveSheet   
   
'相手ファイル(インポートファイル)
Dim FName As String
MsgBox "「インポートファイル」選択"
FName = Application.GetOpenFilename("Microsoft Excelブック,*.xls*") 

If FName <> "False" Then
    Dim wb2 As Workbook
        Set wb2 = Workbooks.Open(FName)
    Dim ws2 As Worksheet
        Set ws2 = wb2.Worksheets(1)
        
    Else
        GoTo Skip
    End If

ActiveWindow.SelectedSheets.Copy After:=ws1

ActiveSheet.Name = "Import" & "_" & VBA.Format(Now(), "h時mm分ss秒")
    
Skip:
    
'相手ファイル閉じる
Application.CutCopyMode = False  
wb2.Close savechanges:=False

MsgBox "完了"
End Sub

解説

  • 前提)別ファイルのエクセルシートを取り込むエクセルファイルを開く
  • 6~7行目:特定シートを選択してアクティブにする
         *アクティブシートの右隣のシートに取り込みます。(24行目表記)
          補足)シートを指定する場合は、以下の”Sheet1”の箇所を変更
Set ws1 = wb1.Worksheets("Sheet1")
  • 12行目:取り込むファイルはダイアログを開いて選択
        *開くファイルはエクセルのみ指定(“Microsoft Excelブック,.xls“)
  • 18行目:取り込むファイルのシートはWorksheets(1)と指定
        参考)異なるシートを取り込む場合は、上記 Worksheets(1) を変更        
  • 21行目:ダイアログ表示時のエラー処理(ファイルを選択しないで閉じた場合など)
        GoTo Skip~Skip(30行目):で完了のメッセージを表示
  • 24行目:選択しているシートの右隣り(After)に取り込み
        参考1)左隣りを指定する場合は以下の通り
            ActiveWindow.SelectedSheets.Copy Before:=ws1
        参考2)文末にコピーする場合
            ActiveWindow.SelectedSheets.Copy After:ThisWorkbook.ActiveSheet(ThisWorkbook.ActiveSheet.Worksheets.Count)      
  • 26行目:シートの名前をつける
        *ここでは Import+日付 で名前をつけています
        *任意のシート名の変更は、この箇所 ” シート名” (カンマの中) を変更
  • 28行目:任意のセルを選択
        *ここでは Range(“A1”) を選択
  • 33行目:コピーモード解除
  • 34行目:取り込み済みの相手ファイルを閉じる
  • 35行目:メッセージボックスに完了と表示

別のエクセルファイルからシートをアクティブシートに貼り付ける方法

Sub PasteSheetFromAnotherWorkbook()
    'コピー元のファイルを指定する
    Dim sourceWorkbook As Workbook
    Set sourceWorkbook = Workbooks.Open("C:\path\to\source\file.xlsx")
    
    'コピー元のシートを指定する
    Dim sourceSheet As Worksheet
    Set sourceSheet = sourceWorkbook.Worksheets("Sheet1")
    
    'コピー元のシートをコピーする
    sourceSheet.Copy Before:=ThisWorkbook.Sheets(1)
    
    'コピー元のファイルを閉じる
    sourceWorkbook.Close SaveChanges:=False
End Sub

解説

上記のコードでは、という変数にコピー元のエクセルファイルを、という変数にコピー元のシートを指定しています。次に、メソッドを使用して、コピー元のシートをアクティブシートの前にコピーしています。最後に、メソッドを使用して、コピー元のファイルを閉じています。sourceWorkbooksourceSheetsourceSheet.CopysourceWorkbook.Close

このコードを実行する前に、コピー元のエクセルファイルのパスと、コピー元のシートの名前を適宜変更してください。また、アクティブシートの前にコピーしたい場所が異なる場合には、の部分を適宜変更してください。

ダミーデータのダウンロード

コメント

タイトルとURLをコピーしました