【VBScript】Excelのユーザー定義スタイルをすべて削除する

Excel 2010以降で実装されているユーザー定義スタイルをすべて削除して上書き保存するVBScript

使用方法:本ソースファイルを「.vbs」にて保存。スタイルを削除したいExcelファイルを本スクリプトへドラッグ&ドロップすると自動的に開始される。

Option Explicit


Dim objExcel	' Excelアプリケーション
Dim objWB	' ワークブックオブジェクト
Dim tmpFN	' ループ変数(ファイル名)
Dim tmpSh	' ループ変数(ワークシート)
Dim tmpProtected	' ループ変数(シート保護)
Dim tmpStyle	' ループ変数(スタイル)


' 直接実行しても動作しない
If WScript.Arguments.Count = 0 Then WScript.Quit

' Excelを開く
Set objExcel = CreateObject("Excel.Application")

' Excelアプリケーションを表示する ※非表示とする場合は False とする
objExcel.Visible = True

' ドラッグアンドドロップされたファイルをひとつずつExcelで開く
For Each tmpFN In WScript.Arguments
	Set objWB = objExcel.Workbooks.Open(tmpFN)

	' 保護されたシートがあるか確認する
	tmpProtected = False
	For Each tmpSh In objWB.Sheets
		If tmpSh.ProtectContents Then
			tmpProtected = True
		End If
	Next

	' ユーザー定義スタイルを削除する
	' 破損したスタイルなどは削除できない場合もあるため、エラー処理を追加
	If Not tmpProtected And Not objWB.ReadOnly Then
		On Error Resume Next
		For Each tmpStyle In objWB.Styles
			' 組み込みスタイル以外を削除する
			If Not tmpStyle.BuiltIn Then
				tmpStyle.Delete
			End If
		Next
		On Error GoTo 0

		' 削除が終わったら上書き保存
		objWB.Save
	Else
		MsgBox "保護されたシートがあるか、ファイルが読み取り専用のため処理を中断します", vbOKOnly + vbCritical, WScript.ScriptName
	End If

	' ワークブックを閉じる
	objWB.Close
	Set objWB = Nothing
Next

' Excelを終了する
objExcel.Quit
Set objExcel = Nothing

MsgBox "ユーザー定義スタイル一括削除処理完了", vbOKOnly + vbInformation, WScript.ScriptName
  • (2019.01.18) ファイルが読み取り専用の場合、上書き保存ができないため操作除外に追加
  • (2018.12.17) 保護されたシートが存在する場合、スタイルの削除が無効となるため、チェックを追加