Excelでシートおよびセル範囲をコピーする方法を説明します。
コピーの原理は、指定したセルの範囲をクリップボードにコピーして、それを指定した位置に張り付けることでコピーします。
セル範囲のコピー
Dim xlApp As Excel.Application = New Excel.Application()
Dim xlBook As Excel.Workbook = xlApp.Workbooks.Open("C:\work\myBook1.xls")
Dim xlSheet As Excel.Worksheet = xlBook.Worksheets("Sheet1")
-------------------------------------------------------------
方法①
'クリップボードにコピーする
Dim xlRange As Excel.Range = xlSheet.Cells.Range("A1:B9")
xlRange.Copy()
'指定位置にペーストする
Dim xlPasteRange As Excel.Range = xlSheet.Range("D2")
xlSheet.Paste(xlPasteRange)
'注意以下のように1行で指定すると解放できなくなります
'xlSheet.Paste(xlSheet.Range("D2"))
-------------------------------------------------------------
方法②
Dim xlRange As Excel.Range = xlSheet.Cells.Range("A1:B9")
Dim xlPasteRange As Excel.Range = xlSheet.Range("D2")
xlRange.Copy(xlPasteRange)
-------------------------------------------------------------
xlSheet.Activate()
xlApp.Visible = True
System.Threading.Thread.Sleep(3000)
xlApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlPasteRange)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
・別ブックおよび別シートのセル範囲をクリップボードにコピーして、指定ブックの指定シートに張り付けることもできます。
・エクセルのコピーは、クリップボードを経由させてコピーすることになります。その間クリップボードは他のプログラムでは使用できませんので注意。また方法②のほうが方法①より他のプログラムへの影響が少ない様です。
シートのコピー
Dim xlApp As Excel.Application = New Excel.Application()
Dim xlBook As Excel.Workbook = xlApp.Workbooks.Open("C:\work\myBook1.xls")
Dim xlSheet As Excel.Worksheet = xlBook.Worksheets("Sheet1")
'シートを別の新規ブックにコピーします。
xlSheet.Copy()
'シートをSheet1の後にシートを新規作成してコピーします。
xlSheet.Copy(After:=xlSheet)
'シートをSheet1の後にシートを新規作成してコピーします。
xlSheet.Copy(Before:=xlSheet)
xlApp.Visible = True
System.Threading.Thread.Sleep(3000)
xlApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)