エクセルでは、新しいワークブックを作成する時があります。
今回はVBAを使用して、新しいワークブックを作成する方法を解説します。
【マクロVBA】新しいワークブックを作成し、そこにデータを張り付ける方法
エクセルのVBAを使用して、新しいワークブックを作成し、名前を「test」とします。
そして、元のワークブックの範囲(“A1”)にあるデータを新しい「test」ワークブックの範囲(“A1”)に貼り付けるコードを作ってみました。
Sub CreateWorkbookAndCopyData()
Dim originalWorkbook As Workbook
Dim newWorkbook As Workbook
Dim originalRange As Range
Dim newRange As Range
Dim desktopPath As String
' 元のワークブックと範囲を設定
Set originalWorkbook = ThisWorkbook
Set originalRange = originalWorkbook.Worksheets(1).Range("A1")
' 新しいワークブックを作成
Set newWorkbook = Workbooks.Add
' デスクトップのパスを取得
desktopPath = CreateObject("WScript.Shell").SpecialFolders("Desktop")
' 新しいワークブックの名前を変更し、デスクトップに保存
newWorkbook.SaveAs desktopPath & "\test.xlsx"
' 新しいワークブックの範囲を設定
Set newRange = newWorkbook.Worksheets(1).Range("A1")
' 元のワークブックのデータを新しいワークブックにコピー
originalRange.Copy Destination:=newRange
' 新しいワークブックを保存して閉じる
newWorkbook.Save
newWorkbook.Close
End Sub
このコードは、新しいワークブックをデスクトップに保存し、その後ワークブックを閉じています。
詳しく解説します。
元のワークブックと範囲を設定
' 元のワークブックと範囲を設定
Set originalWorkbook = ThisWorkbook
Set originalRange = originalWorkbook.Worksheets(1).Range("A1")
この部分のコードは、元のワークブックと範囲を設定するためのものです。
それぞれの行の詳細を以下に説明します。
Set originalWorkbook = ThisWorkbook
: この行は、originalWorkbook
という変数に現在実行中のワークブック(コードが実行されているワークブック)を代入しています。ThisWorkbook
は、VBA コードが含まれている現在のワークブックを参照するためのキーワードです。Set originalRange = originalWorkbook.Worksheets(1).Range("A1")
: この行は、originalRange
という変数に、元のワークブックの最初のワークシート(Worksheets(1)
)のセル A1 の範囲を代入しています。originalWorkbook.Worksheets(1)
は、元のワークブックの最初のワークシートを参照しており、.Range("A1")
はそのワークシートの A1 セルを指定しています。
この2行のコードにより、元のワークブックおよびそのワークシートのセル A1 が適切に参照され、後続のコードでこれらのオブジェクトを使用して操作を実行することができます。
新しいワークブックを作成
' 新しいワークブックを作成
Set newWorkbook = Workbooks.Add
こコードは、新しいワークブックを作成するためのものです。
Workbooks.Add
は、新しいワークブックを作成するExcel VBAメソッドです。
このメソッドを実行すると、新しい空白のワークブックが作成されます。そして、Set newWorkbook
でこの新しいワークブックを newWorkbook
という変数に代入しています。
この結果、newWorkbook
変数を使って新しく作成されたワークブックに対して操作を行うことができます。
後続のコードでは、この新しいワークブックの名前を変更したり、データをコピーしたり、保存して閉じたりするために、newWorkbook
変数が使用されています。
setステートメントについては、以下の記事をご覧下さい。
デスクトップのパスを取得
' デスクトップのパスを取得
desktopPath = CreateObject("WScript.Shell").SpecialFolders("Desktop")
この行のコードは、デスクトップのファイルパスを取得するためのものです。
CreateObject("WScript.Shell")
:CreateObject
関数は、指定されたオブジェクトタイプの新しいインスタンスを作成するために使用されます。この場合、"WScript.Shell"
オブジェクトが作成されます。WScript.Shell
オブジェクトは、Windows スクリプトホスト環境でのシェル操作を提供します。これにより、特殊なフォルダへのアクセスやシステム設定の取得などが可能になります。.SpecialFolders("Desktop")
:SpecialFolders
プロパティは、シェルの特殊フォルダへのパスを取得するために使用されます。この場合、"Desktop"
を引数として渡しているため、デスクトップのファイルパスが取得されます。
このコードの実行結果として、desktopPath
という変数にデスクトップのファイルパスが格納されます。
後続のコードでは、このファイルパスを使用して新しいワークブックをデスクトップに保存しています。
新しいワークブックの名前を変更し、デスクトップに保存
' 新しいワークブックの名前を変更し、デスクトップに保存
newWorkbook.SaveAs desktopPath & "\test.xlsx"
この行のコードは、新しいワークブックの名前を変更してデスクトップに保存するためのものです。
newWorkbook.SaveAs
:SaveAs
メソッドは、ワークブックを新しいファイルとして保存するために使用されます。引数として、新しいファイルのフルパスを指定することで、その場所にファイルが保存されます。desktopPath & "\test.xlsx"
:desktopPath
は前述のコードで取得したデスクトップのファイルパスで、& "\test.xlsx"
はそのパスに「test.xlsx」というファイル名を追加しています。これにより、新しいワークブックがデスクトップに「test.xlsx」という名前で保存されるようになります。
ワークブックのデータを新しいワークブックへコピー
' 新しいワークブックの範囲を設定
Set newRange = newWorkbook.Worksheets(1).Range("A1")
' 元のワークブックのデータを新しいワークブックにコピー
originalRange.Copy Destination:=newRange
この部分のコードは、新しいワークブックの範囲を設定し、元のワークブックのデータを新しいワークブックにコピーするためのものです。
Set newRange = newWorkbook.Worksheets(1).Range("A1")
: この行は、newRange
という変数に新しいワークブックの最初のワークシート(Worksheets(1)
)のセル A1 の範囲を代入しています。newWorkbook.Worksheets(1)
は、新しいワークブックの最初のワークシートを参照しており、.Range("A1")
はそのワークシートの A1 セルを指定しています。originalRange.Copy Destination:=newRange
: この行は、originalRange
に格納されている元のワークブックのセル A1 のデータを、newRange
に格納されている新しいワークブックのセル A1 にコピーしています。Copy
メソッドは、範囲内のデータをコピーするために使用され、Destination
引数にコピー先の範囲を指定します。
この2行のコードにより、新しいワークブックの A1 セルに元のワークブックの A1 セルのデータがコピーされます。
コメント