別ファイルのデータをアクティブシートにインポートする
これは、指定したファイルの “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
解説
上記のコードでは、という変数にコピー元のエクセルファイルを、という変数にコピー元のシートを指定しています。次に、メソッドを使用して、コピー元のシートをアクティブシートの前にコピーしています。最後に、メソッドを使用して、コピー元のファイルを閉じています。sourceWorkbook
sourceSheet
sourceSheet.Copy
sourceWorkbook.Close
このコードを実行する前に、コピー元のエクセルファイルのパスと、コピー元のシートの名前を適宜変更してください。また、アクティブシートの前にコピーしたい場所が異なる場合には、の部分を適宜変更してください。
コメント