エクセルで文書を作成し上司や客先に提出する際に、全てのシートで拡大率を100%にし最初のセルA1を選択し、先頭のシートを表示した状態にするというある種のお作法というかマナーのようなものが存在します(以下、提出状態にすると言います)。
シート数が少なければ手作業でもいいのですが、10シート以上になってくると流石に手作業では時間がかかる上に作業が不正確となります。
こういった単純作業はマクロ(VBA)に任せてしまうのが一番です。
今回は、クイックアクセスツールバーを活用し表示中のエクセルファイルを1クリックで提出状態にする方法と、フォルダを指定して全てのエクセルファイルを一括で提出状態にする方法の二つをご紹介します。
前者は作業中のエクセルファイルの保存をする前に手軽に提出状態にするのに向いていて、後者は複数のエクセルファイルを一気に提出状態にするのに向いています。
マクロを作成するにあたり、下準備としてエクセルに「開発」タブを追加してください。
方法はMicrosoftの公式ドキュメント(日本語)の[開発] タブを表示するを参考にしてください。
目次
クイックアクセスツールバーを活用し表示中のエクセルファイルを1クリックで処理
クイックアクセスツールバーとは、エクセルの上部にある小さなボタン群のことです。
マクロを作成し、ここにボタンを配置することでそのエクセルファイルでもクリック1回でマクロを実行することができます。
この機能を活用して表示中のエクセルファイルを提出状態にしてしまいましょう。
マクロの作成
「開発」→「マクロ」でダイアログを開き、「マクロ名」に任意のマクロ名を設定して「作成」をクリックします。
「Sub <マクロ名>」と「End Sub」の間に以下のようなマクロを記述します。
Dim sheet As Object 'ループ中に処理対象となるシートの変数
'一番先頭のシートから順にループ処理を行う
For Each sheet In ActiveWorkbook.Sheets
sheet.Activate '対象のシートをアクティブにする
ActiveSheet.Range("A1").Select 'シートのA1を選択する
ActiveWindow.Zoom = 100 '拡大倍率を100に設定する
'次のシートを処理対象にする
Next sheet
'一番先頭のシートをアクティブにする
Sheets(1).Select
マクロをクイックアクセスツールバーから起動できるようにする
①クイックアクセスツールバーの下向き三角形を開きます。
②「その他のコマンド」を選択します。
③「コマンドの選択」から「マクロ」を選択します。
④作成したマクロを選択します。
⑤「追加」をクリックします。
⑥作成したマクロが追加されます。
⑦アイコンを変更したい場合は「変更」をクリックすると選べるようになります。
以上でOKをクリックすると、クイックアクセスツールバーに作成したマクロが登録されます。
これでいつでも作業中のエクセルを提出状態にすることができます。
特定のフォルダ下の複数のエクセルファイルを一気に処理
提出状態にしたいエクセルファイルが複数ある場合、全てのファイルをいちいち開いてクイックアクセスツールバーのボタンを押して…というのは大変煩わしいですよね。
そこで、ボタンクリック一回でフォルダ下のエクセルファイル全てを一気に提出状態にしてしまうマクロを作成します。
部品の配置とマクロの作成
新しいエクセルファイルを作成し、フォルダのパスの入力欄とボタンを配置します。
ボタンは「開発」→「挿入」から、フォームコントロールのリストにあります。
ボタンを配置したら、そのままマクロの作成ダイアログが表示されます。
ダイアログが表示されない場合はボタンを右クリックで「マクロの登録」を選択してダイアログを表示できます。
「マクロ名」に任意のマクロ名を設定して「作成」をクリックします。
「Sub <マクロ名>」と「End Sub」の間に以下のようなマクロを記述します。
Path = Cells(3, 2).Value 'パス名を記入したセルの取得
Const cnsTitle = "フォルダ内のエクセルファイル提出状態化" 'ダイアログのタイトル
Const cnsDIR = "\*.*"
Dim strFileName As String '処理中のファイル名を格納する変数
Dim fileAndPath As String '処理中のファイル名(パス含む)を格納する変数
Dim pos As Long
Dim Workbook As Workbook
Dim sheet As Object
' フォルダの存在確認
If Dir(Path, vbDirectory) = "" Then
MsgBox "指定のフォルダは存在しません。", vbExclamation, cnsTitle
Exit Sub
End If
' 先頭のファイル名の取得
strFileName = Dir(Path & cnsDIR, vbNormal)
' ファイルが見つからなくなるまで繰り返す
Do While strFileName <> ""
' エクセルファイルのみを処理対象とする
pos = InStrRev(strFileName, ".")
If Not LCase(Mid(strFileName, pos + 1)) Like "xls*" Then
' 次のファイル名を取得
GoTo Continue
End If
' エクセルファイルを開く
fileAndPath = Path + "\" + strFileName
Set Workbook = Workbooks.Open(fileAndPath)
'一番先頭のシートから順にループ処理を行う
For Each sheet In ActiveWorkbook.Sheets
sheet.Activate '対象のシートをアクティブにする
ActiveSheet.Range("A1").Select 'シートのA1を選択する
ActiveWindow.Zoom = 100 '拡大倍率を100に設定する
Next sheet
Sheets(1).Select
' エクセルファイルを保存して閉じる
Workbook.Save
Workbook.Close
Continue:
' 次のファイル名を取得
strFileName = Dir()
Loop
マクロの実行
マクロを保存したら、後はボタンをクリックするだけで指定したフォルダ下のエクセルファイルをすべて提出状態にすることができます。
子フォルダ・孫フォルダには処理が及びませんので、都度ファイルのパスを書き換えるか、このマクロを改造してみるのもいいかもしれません。
※ 2019/11/25 追記
ログログ様がサブフォルダのファイルにも処理が走るようにするコードを作成してくださいました。
ExcelをA1で拡大率100%にするツール(サブフォルダ全て)
まとめ
シート数が多いエクセルファイルや膨大な数のエクセルファイルを手作業で提出状態にするのは大変な労力がいる上、作業の漏れや間違いが起きやすくなります。
そんなことを避けるためにも、マクロを活用してみるといいと思います。