前回前々回とセルを指定する VBA とシートを指定する VBA を解説する記事を書きました。
Excelのデータ構造としては、 どのブックのどのシートのどのセルという指定が必要でその最上位に当たるブックの指定を今回は解説したいと思います。
WorkBooks
ブックすべてを表すのがWorkbooksです。
Workbooks(“売上.xlsx”)で売上.xlsxという1つのブックを指します。ブック名には拡張子を含めて指定します。
Workbooks.Countで開いているブックの数を表します。
会計.xlsxブックの売上シートのセルC5からE100までを表すのは、Workbooks(“売上.xlsx”).Sheets(“売上”).Range(“C5:E100”)ということになります。
Item(添え字)
Workbooks(1)で現在開いているブックの1つ目のブックを表します。これは正式にはWorkbooks.Item(1)と記述します。
ActiveWorkbook
現在操作しているブックを指します。アクティブセルがあるブックと捉えると良いでしょう。
ActiveWorkbook.ActiveSheetで現在のアクティブセルのあるブックの現在のアクティブセルのあるシートという指定ができますが、結局はActiveSheetだけの指定と同じことになります。
ThisWorkbook
ActiveWorkbookでは、現在のアクティブセルがあるブックを指定しましたが、ThisWorkbookは、その実行しているマクロが格納されているブックを指します。
マクロ動作中に様々なブックを指定することになりますが、どの状態でもマクロが格納されているブックは1つだけなので常に同じブックを指します。
Name
Nameはブック名を取得します。つまりファイル名を取得するということになります。
ActiveWorkbook.Nameで現在アクティブセルがあるブックの名前を取得できます。ActiveWorkbook.Name=”ABC”のように名前を設定することはファイル名が変更されるということと同じ意味になるのでできません。
Path
Pathはファイルの場所を文字列で表します。ThisWorkbookが保存されているのがDドライブのTESTフォルダで、ThisWorkbook.Pathの示すものは「D:¥TEST」です。後ろにフォルダの階層を表す「¥」がついていないので注意しましょう。
Add
WorkBooks.Addで新規ブックを作成します。 ActiveWorkbook.AddやThisWorkbook.Addでは今あるブックを新規追加するというわからない日本語になるのでできません。
Open
Openはブックを開きます。
WorkBooks.Open “ABC.xlsx”でブックを開きます。
Save
Saveはブックを上書き保存します。ActiveWorkbook.Saveで現在セルのあるブックを上書き保存します
SaveAs
SaveAsはブックに名前を付けて保存します。ファイルの種類を変更することもできます。ActiveWorkbook.SaveAs “ABC.xlsx”で現在アクティブセルがあるブックをABC.xlsxという名前で保存します。
ActiveWorkbook.SaveAs “ABC.csv”,xlCSVで、CSV形式でファイルを保存します。
ActiveWorkbook.SaveAs “D¥:TEST¥ABC.xlsx”はDドライブのTEXTフォルダにABC.xlsxという名前でファイルを保存します。
ThisWorkbook.SaveAs ThisWorkbook.Path & “¥ABC.xlsx”は現在動作しているマクロが記録されているブックと同じ場所にABC.xlsxという名前でファイルを保存します。Pathは最後のフォルダの切れ目を表す「¥」を付けてこないのでファイル名の頭で指定する必要があります。
Workbooks.Add.SaveAs “ABC.xlsx”のように新規作成しすぐに名前を付けて保存することもできます。
Close
Closeはファイルを閉じます。
Workbooks(“売上.xlsx”).Closeで売上.xlsxを閉じます。閉じる前に変更があり変更後に保存されていなければ警告表示が出ます。 それを出さないためには保存したことにするSavedを設定します。Workbooks(“売上.xlsx”).Saved=Trueと設定後にWorkbooks(“売上.xlsx”).Closeで警告なく保存されていない状態で閉じることができます。
組み合わせる
次のVBAはExl1からExl5までの5つのブックを現在マクロが記録されているブックと同じ場所に新規に作成し、すべてのブックでシートをexとwdの2枚にし、それぞれのシートのセルA1に受講生と入力します。
Sub 成績ブック作成() Dim bk As Workbook Dim sh As Worksheet Dim i As Integer For i = 1 To 5 Set bk = Workbooks.Add bk.Worksheets.Add bk.Worksheets(1).Name = "wd" bk.Worksheets(2).Name = "ex" bk.Worksheets(1).Range("A1").Value = "受講生" bk.Worksheets(2).Range("A1").Value = "受講生" bk.SaveAs (ThisWorkbook.Path & "\Exl" & i & ".xlsx") bk.Close bk Next End Sub
ファイル自体を削除する
ファイル自体を削除するには、ブックの操作ではできません。ブックの操作はあくまで開いているブックに対して行うもので、開いているブックに対して画面上に表示しながら実体であるファイルを削除するということができないからです。
もし削除するのであればKillを使って削除します。警告なしで消えてしまうので注意しましょう。
Kill "D:¥TEST¥ABC.xls"
コメント