Excel VBA ベーシック 公式テキスト 9章 ブックとシートの操作
ブックを開く
- ブックの操作をするときは、「Workbooksコレクション内の任意のブック」と指定する必要がある。
Workbooks.Add
空の新規ブックを追加する- 挿入されるブックの名前は、「Book2」「Book3」など、Excelが自動的に連番で付ける
- 挿入されたブックが常にアクティブになる
Workbooks.Open.Filename :="C:\Work\Book1.xlsx"
ファイルを新規で開く- 開くパスはフルパスでの指定が必要。省略するとカレントフォルダのブックと見なされる
- ファイルを開く際には、ファイルの存在の有無を確認する
Dir
関数等との組み合わせで確認するべき
ファイル名とファイルの場所決め打ちパターン
If Dir("C:\fizzbuzz.xlsx") = "" Then MsgBox "File Not Found" Else Workbooks.Open Filename:="C:\fizzbuzz.xlsx" End If
Inputbox
つかって、ファイル名を入力させるパターン
Dim target As String target = InputBox("Input File Name") If target <> "" Then If Dir(target) <> "" Then Workbooks.Open Filename:=target Else MsgBox "File Not found" End If Else MsgBox "Filname is not input" End If
Application.GetOpenFilename()
「ファイルを開く」ダイアログからファイルを選択させる
Dim Target As String Target = Application.GetOpenFilename() Workbooks.Open Target
- 「ダイアログから開く」はいい方法だが、キャンセルしたかどうかの判断が無く、xlsx以外の拡張子も表示されている。この点を修正する
GetOpenFile()
でキャンセルボタンが押されると、falseが返る。それをif文で判断する。- ファイル選択画面でFileFilterオプションを使って、表示されるファイルの種類を制御する。
Dim Target As String Target = Application.GetOpenFilename("Excelブック,*.xlsx") If Target <> False Then Workbooks.Open Target Else MsgBox "Canceld" End If
ブックを保存する
ActiveWorkbook.Save
上書き保存ActiveWorkbook.SaveAs
名前をつけて保存On Error Resume Next
エラーを無視。「名前をつけて保存」のマクロを2回続けたときにキャンセルボタンを押すと、エラーダイアログが出る。これを回避する。
ブックを閉じる
ActiveWorkbook.Close
ブックを閉じるActiveWorkbook.Close SaveChanges:=True
変更を保存して閉じるActiveWorkbook.Close SaveChanges:=False
変更を保存しないで閉じる
複数ブックの操作
Activate
複数のブックを開いているときに、任意のブックを表示するWorkbooks.("Book2.xlsx").Activate
Book2.xslxを表示する。
ワークシートを挿入する
Sheets.Add
シートを追加する
シートを開く
Select
またはActivate
を使うWorksheets("Sheet1").Activate
Sheet1を開く- 現在表示されていないブックのワークシートを開く場合には
Select
は利用できない
シートの名前を変える
Worksheets("Sheet1").Name = "TEST"
Sheet1の名前をTESTに変える- しかし、ワークブック内には同一のシート名は存在できないというルールがあり、これを考慮する必要がある。
- 「変更するシート名」と、「他のシート名」を確認する。
Worksheets(シート名)
シート名を特定Worksheets.(番号)
開かれているブックのシートを左から数えて何番目に位置しているかWorksheets.Count
ワークシートの数を返す
- 「変更するシート名」と、「他のシート名」を確認する。
- 変更しようとするワークシートの名前に重複がないかチェック
Dim i As Long Dim flag As Long For i = 1 To Worksheets.Count If Worksheets(i).Name = "TEST" Then flag = 1 End If Next i If flag = 1 Then MsgBox "Already TEST sheet" Else MsgBox "TEST sheet not exist" End If
- 設定しようとしているシート名に利用できない文字が入っていた場合のチェック
- 「:(コロン)」「¥(円)」「/(スラッシュ)」「?(疑問符)」「*(アスタリスク)」「[(左角括弧)」「](右角括弧)」
- 「:(コロン)」のみチェック
Dim filename As String filename = InputBox("Input Filename") If InStr(filename, ":") = 0 Then ActiveSheet.Name = filename Else MsgBox "利用できない文字が入っています" End If
- しかし、「:(コロン)」以外にも利用できない文字はある。逐一チェックは大変だ。
- 「ファイル名を変更し、エラーが出たら利用できない文字が入っているのだろう」と考える。
On Error Resume Next
を利用する。
Dim filename As String filename = InputBox("Input Filename") On Error Resume Next ActiveSheet.Name = filename If ActiveSheet.Name = filename Then MsgBox "シート名を変更しました" Else MsgBox "利用できない文字が入っています" End If
ワークシートのコピー
Worksheets("sheet1").Copy after:=Worksheets("Sheet4")
ワークシートを対象の右にコピーWorksheets("sheet1").Copy before:=Worksheets("Sheet4")
ワークシートを対象の左にコピーWorksheets("sheet1").Move after:=Worksheets("Sheet4")
ワークシートの移動
ワークシートを表示/非表示にする
Worksheets("Sheet3").Visible = False
非表示にするWorksheets("Sheet3").Visible = True
表示する- もちろん、ブックに無いシートを変更しようとしてもエラーとなる
ワークシートを削除する
Worksheets("Sheet7").Delete
Sheet7を削除するApplication.DisplayAlerts = False
削除確認メッセージを表示させたくないときに利用