こんにちは! 健史です。
Excelで複数のシートを作成したファイル、例えば製品テストのエビデンスを膨大なテストパターンごとにシートを分けて作成したとき、
・表示倍率を100%など一定に揃えたい
ということありませんか。
多くのシートを作成したExcelファイルを客先や上司・同僚などへ提出する際、自分が受け取る側で内容を精査しなければならないときのことを考えると、受け取る側のことを考えて保存したいものです。
既存Excelファイル上でマクロを実行する
後述しますが実行後、拡張子に[xlsm]が使用できるバージョンであれば、上書き保存するときにはマクロを含めず拡張子は[xlsx]のまま保存できます。
1.以下のプログラムをコピーします。
Dim sht As Long
For sht = Sheets.Count To 1 Step -1 '最後尾のシートから前へ、最後は先頭シートで終了
Sheets(sht).Activate
Sheets(sht).Range("A1").Select
ActiveWindow.Zoom = 100
Next
2.対象のExcelファイルを開きます。拡張子は[.xlsm]でなくてもOKです。
3.Alt+F8でVBAを起動し、マクロ名には"temp"など入力し[作成(C)]をクリックします。
4.Ctrl+Vで貼り付けてF5で実行します。
実行後は、シート1がカレントになり、全てのシートがカーソルは"A1"に位置づき、表示倍率は100%になっています。
5.[上書き保存]にて「マクロなしのブックとして保存」する[はい(Y)]をクリックします。
該当Excel上にマクロを作成しましたが、拡張子に[xlsm]が使用できるバージョンであれば、マクロを一時的に実行して、マクロを除外して上書き保存できます。
マクロ専用ファイルから実行する
マクロ専用ファイルのシート1に「対象フォルダ」や「表示倍率」を指定して実行します。
「対象ファルダ」内のExcelファイル全てを対象に処理します。また「対象ファイル」を指定すれば該当ファイルだけを処理します。
1.Excelを起動し、シート1に以下を貼り付けます。
ドラッグ&コピー後にExcelに貼り付けるとき、[形式を選択して貼り付ける]-[テキスト]で貼り付けます。(セル[A1]で[右クリック]、[形式を選択して貼り付ける]-[テキスト])を指定します。
項目 設定値 備考
対象フォルダ C:\TEMP01\50.エビデンス
対象ファイル 設定時のみ対象ファイルだけ処理する
表示倍率 100 10~400、指定時のみ変更する
2.Alt+F8でVBAを起動し、マクロ名には"temp"など入力し[作成(C)]をクリックします。
'対象ファルダから読み込むファイルを指定。Excelのみにする場合は"\*.xlsx"や"\*.xls"
Const cnsDir = "\*.xls*"
'エクセルシートを複数同時に使うので変数として定義
Dim excel0 As Workbook
Dim excel1 As Workbook
'変数定義
Dim ix0_2, ix0_2_max, sht As Long
Dim strPath1, strFile1, strFilename As String
Dim numZoom As Long
'変数:excel1に起動した(この)ファイルを設定
Set excel0 = ActiveWorkbook
'起動した(この)ファイルのシートからワーク領域へ取り込み
strPath1 = excel0.Sheets(1).Cells(2, 2)
strFile1 = excel0.Sheets(1).Cells(3, 2)
numZoom = excel0.Sheets(1).Cells(4, 2)
'シート1の設定値をチェック
If Dir(strPath1, vbDirectory) = "" Then
MsgBox "対象フォルダがありません!"
Exit Sub
End If
'
If strFile1 <> "" Then
If Dir(strPath1 & "\" & strFile1, vbDirectory) = "" Then
MsgBox "対象ファイルがありません!"
Exit Sub
End If
End If
'
If excel0.Sheets(1).Cells(4, 2) = "" Then
numZoom = 0
Else
If IsNumeric(excel0.Sheets(1).Cells(4, 2)) = True Then
Select Case excel0.Sheets(1).Cells(4, 2)
Case 10 To 400
numZoom = excel0.Sheets(1).Cells(4, 2)
Case Else
MsgBox "表示倍率が設定可能な値ではありません!"
Exit Sub
End Select
Else
MsgBox "表示倍率が数字ではありません!"
Exit Sub
End If
End If
'シート2がなければ追加
If excel0.Sheets.Count = 1 Then
excel0.Sheets.Add(After:=excel0.Sheets(excel0.Sheets.Count)).Name = "ファイル一覧"
End If
'ファイル名情報をシート2へ格納
excel0.Sheets(2).Cells.Clear
excel0.Sheets(2).Cells(1, 1) = "フォルダ名"
excel0.Sheets(2).Cells(1, 2) = "ファイル名"
ix0_2 = 1
If strFile1 = "" Then
strFilename = Dir(strPath1 & cnsDir, vbNormal)
Do While strFilename <> ""
ix0_2 = ix0_2 + 1
excel0.Sheets(2).Cells(ix0_2, 1) = strPath1 & "\" & strFilename
excel0.Sheets(2).Cells(ix0_2, 2) = strFilename
strFilename = Dir()
Loop
Else
ix0_2 = ix0_2 + 1
excel0.Sheets(2).Cells(ix0_2, 1) = strPath1 & "\" & strFile1
excel0.Sheets(2).Cells(ix0_2, 2) = strFile1
End If
'シート2のファイルを読み込み処理し上書き保存
ix0_2_max = ix0_2
For ix0_2 = 2 To ix0_2_max
Set excel1 = Workbooks.Open(excel0.Sheets(2).Cells(ix0_2, 1))
For sht = Sheets.Count To 1 Step -1
excel1.Sheets(sht).Activate
excel1.Sheets(sht).Range("A1").Select
If numZoom <> 0 Then
ActiveWindow.Zoom = numZoom
End If
Next
excel1.Save
Next
'終了処理
excel0.Save
MsgBox "処理終了!"
Application.Quit
補足です。
◇留意点
・このマクロ=プログラムでは、カーソル設定、表示倍率を変更するのみで、データは更新しません。
・しかしファイルの破損など心配な場合は、実行前に対象フォルダの内容をバックアップしておきます。
◇処理概要
・表示倍率を設定すれば変更します。設定しなければ表示倍率は変更しません。
◇その他
・このマクロ=プログラムでは、当ファイルのシート2を使用します。
・そのため、当ファイルにシート2が無ければ自動で作成し、あればクリアします。
最後に
ちょっとしたことですが、ドキュメントを受け取る側が望んでなくても揃っていれば、開いたときに好印象を感じるかもしれません。
あなた自身の評価が、あなたの組織の評価が上がるかもしれせん。
シート数が少なかったり対象ファイルが少なければ手作業で調整できますが、手作業で行うと漏れがあったり「ファイルを開いて、シート一つひとつを遷移して・・・」とストレスもかかります。
参考にして頂ければと思います。
コメント