全てのExcelファイルの全てのシートをA1セルに

# どうやって？
VBScriptとbatを組み合わせて頑張ります。

# ソース
元のソースはここにあります。

https://github.com/k2491p/VBScripts

## VBScript
以下がメインの処理です。

```vb:excel_format.vbs
Call Main

'----------------------------------------------------
'
'   【Excelフォーマット】
'   本ファイルがあるディレクトリと同じディレクトリにある
'   すべてのExcel(*.xlsx, *.xlsm, *.xls)に対して、
'       ・A1をセルを選択
'       ・拡大率を100%
'   を全シートに行います。
'
'----------------------------------------------------
Sub Main()
    WScript.Echo "Excelフォーマット処理開始"
    'Excelインスタンス生成
    Dim objXlsx : Set objXlsx = CreateObject("Excel.Application")
    If IsNull(objXlsx) Then 
        Exit Sub
    End If

    'Excel非表示
    objXlsx.Visible = False
    
    '上書き保存のアラート非表示
    objXlsx.DisplayAlerts = False

    'FileSystemObjectインスタンス生成
    Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")

    'カレントディレクトリをセット
    Dim currentDirectory : Set currentDirectory = fso.GetFolder(".\")

    'カウント数 (カレントディレクトリにvbsとbatがある想定でマイナス2)
    Dim fileCount : fileCount = currentDirectory.Files.Count - 2
    Dim count : count = 1
    
    'ディレクトリ内を処理
    For Each file In currentDirectory.Files
        If IsExcel(fso.GetExtensionName(file)) Then
            Dim workbook : Set workbook = objXlsx.Workbooks.Open(file)
            SetAllA1(workbook)
            workbook.Saveas(file)
            workbook.Close
            Set workbook = Nothing
            WScript.Echo fileCount & "件中" & count & "件目処理終了"
            count = count + 1 
        End If
    Next
    objXlsx.Quit()
End Sub

'Excelかどうか判定
Function IsExcel (extention)
    IsExcel = False
    If extention = "xlsx" Or extention = "xls" Or extention = "xlsm" then
        IsExcel = True
    End If
End Function

'引数のブック内をすべてA1にセット
Sub SetAllA1 (workbook)
    Dim worksheet
    For Each worksheet In workbook.Worksheets
        workbook.Worksheets(worksheet.Name).Activate
        worksheet.Range("A1").Activate
        workbook.Windows(1).ScrollRow = 1
        workbook.Windows(1).ScrollColumn = 1
        workbook.Windows(1).Zoom = 100
    Next
    workbook.WorkSheets(1).Activate
End Sub
```

## bat
以下はvbsファイルを呼び出す処理です。
vbs直で叩いてもOKですが、コンソール見えていると処理内容を追いやすいので一応用意しました。

```bat:excel_format.bat
cscript .\excel_format.vbs
pause
```

# ソース解説
ざっくりほんのり解説しときます。

## IsExcel
処理対象のファイルがExcelの場合にTrue, その他の場合にFalseを返します。
```vb
'Excelかどうか判定
Function IsExcel (extention)
    IsExcel = False
    If extention = "xlsx" Or extention = "xls" Or extention = "xlsm" then
        IsExcel = True
    End If
End Function
```

## SetAllA1
ブック内のすべてのシートに対して処理を行います。

- A1セルを選択
- 画面左上に移動
- 拡大率を100%

などをやっています。
他にもやりたいことがあればここに追記すればOK。
```vb
'引数のブック内をすべてA1にセット
Sub SetAllA1 (workbook)
    Dim worksheet
    For Each worksheet In workbook.Worksheets
        workbook.Worksheets(worksheet.Name).Activate
        worksheet.Range("A1").Activate
        workbook.Windows(1).ScrollRow = 1
        workbook.Windows(1).ScrollColumn = 1
        workbook.Windows(1).Zoom = 100
    Next
    workbook.WorkSheets(1).Activate
End Sub
```

## Main
vbsファイルがあるディレクトリにある全てのファイルを取得してぐるぐる回して処理をしています。
書き方がイケてないとかは大目に見てもらえると嬉しいです。
```vb
Sub Main()
    WScript.Echo "Excelフォーマット処理開始"
    'Excelインスタンス生成
    Dim objXlsx : Set objXlsx = CreateObject("Excel.Application")
    If IsNull(objXlsx) Then 
        Exit Sub
    End If

    'Excel非表示
    objXlsx.Visible = False
    
    '上書き保存のアラート非表示
    objXlsx.DisplayAlerts = False

    'FileSystemObjectインスタンス生成
    Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")

    'カレントディレクトリをセット
    Dim currentDirectory : Set currentDirectory = fso.GetFolder(".\")

    'カウント数 (カレントディレクトリにvbsとbatがある想定でマイナス2)
    Dim fileCount : fileCount = currentDirectory.Files.Count - 2
    Dim count : count = 1
    
    'ディレクトリ内を処理
    For Each file In currentDirectory.Files
        If IsExcel(fso.GetExtensionName(file)) Then
            Dim workbook : Set workbook = objXlsx.Workbooks.Open(file)
            SetAllA1(workbook)
            workbook.Saveas(file)
            workbook.Close
            Set workbook = Nothing
            WScript.Echo fileCount & "件中" & count & "件目処理終了"
            count = count + 1 
        End If
    Next
    objXlsx.Quit()
End Sub
```

# 使い方
1. 処理したい対象のExcelたちがあるディレクトリと同じところにvbsファイルとbatファイルを置く
1. batファイルを叩くといい感じに処理してくれる

※vbsから出力するコメントはbatを叩く前提で入れてあります

# まとめ

ExcelファイルのカーソルをA1セルに揃えておくのが良いかどうかという議論もありますが、
一旦そんな話は脇において、「全てのExcelファイルの全てのシートをA1セルに」したい人のためにスクリプト組んでおきました。
そのまま使うなり、カスマタイズして使うなり、ご自由にどうぞ！
動作確認はしていますが、使用は自己責任でお願いいたします。