ブックを開く
- ブックの操作をするときは、「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").ActivateBook2.xslxを表示する。
ワークシートを挿入する
Sheets.Addシートを追加する
シートを開く
SelectまたはActivateを使うWorksheets("Sheet1").ActivateSheet1を開く- 現在表示されていないブックのワークシートを開く場合には
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").DeleteSheet7を削除するApplication.DisplayAlerts = False削除確認メッセージを表示させたくないときに利用