ワークシートの比較ツール
Mainの【ワークシート比較ツール.xlsm】と、結果を書き込む【ワークシート比較結果雛形.xlsm】の
2つのブックを作成します。(Microsoft365 64bit環境推奨)
ツール内容
まず、【Main】のブックから、比較対象のブックアドレス、シート名を取得します。
次に、比較対象シートを指定します。3シートまで比較可能です。
最後に、【実行】ボタン押下で、比較結果が比較結果ブックに展開されます。
(雛形ブックを使用して、比較結果ブックを作成します。)
差異がある場合に、セルの背景色を変更するだけか、差異をコメントに書き出すかを選択できます。
また、差異のあったセルの背景色は青、黄色、緑の3色から選択できます。
実行ブックの作成
- 新規ブックを作成します。
- 最初に、【ページレイアウト】タブをクリック
- まず、左上の【テーマ】を【Office】に設定
- 次に、テーマの【フォント】→一番下の【フォントのカスタマイズ】をクリック
- 日本語の見出し、本文フォントを【Meiryo UI】に変更
- 最後に、【ホーム】タブ→【名前を付けて保存】
ブック名:ワークシート比較ツール
【Excel マクロ有効ブック(*.xlsm)】で【保存】します。
※ 上記の設定をしない場合、後続の【Main】シート作成の操作を行った際に、列幅が正しく反映されません。
マクロコードの貼り付け
作成されたMainファイルに標準モジュールを追加します。
- 【Alt】+【F11】キーを押下し、VBE画面を表示
- 【挿入】タブから【標準モジュール】を選択し、標準モジュールを作成
- 下記ボックス内をコピーし、標準モジュールに貼り付け
- モジュール名を【A01_Public】に変更
モジュール名:A01_Public
Option Explicit Public Bln_Err As Boolean Public IsCall As Boolean Public ErrProsName As String Public errMsg As String Public Twb As Workbook Public wsMain As Worksheet Public wsCtrl As Worksheet Sub SetObject() Set Twb = ThisWorkbook Set wsMain = Twb.Worksheets("Main") End Sub Sub ReSetObject() Set Twb = Nothing Set wsMain = Nothing End Sub '***************************************************** ' 画面制御セット ' Call StopUpdating '***************************************************** Sub StopUpdating() With Application .ScreenUpdating = False '画面描画停止 .EnableEvents = False 'イベント動作停止 .EnableCancelKey = xlErrorHandler '[Esc]キーでエラーをトラップする '========================= '.EnableCancelKey = xlInterrupt '[Esc]キーでVBAの実行を止める(なかなか止まらない) '.EnableCancelKey = xlErrorHandler '[Esc]キーでエラーをトラップする 'On Error GoTo ★★★_Err と使用する '.EnableCancelKey =xlDisabled '[Esc]キーを無効にする '========================= .Cursor = xlWait '自動計算/手動計算を取得 Call yourCalc("Main", "A2") .Calculation = xlCalculationAutomatic .DisplayAlerts = False .DisplayStatusBar = True End With End Sub '***************************************************** ' 画面制御セット ' Call Updating '***************************************************** Sub Updating() With Application .ScreenUpdating = True '画面描画再開 .EnableEvents = True 'イベント動作再開 .Cursor = xlDefault .DisplayAlerts = True '警告再表示 .StatusBar = False '自動計算/手動計算を元の状態に戻す Call RestoreCalc("Main", "A2") 'ステータスバーを表示 .DisplayStatusBar = True End With End Sub '+++***********************************************+++ ' 自動/手動計算設定取得 ' Call yourCalc("Main","A2") '+++***********************************************+++ Public Function yourCalc(shtName As String, strRng As String) 'エラーを無視 On Error Resume Next With ThisWorkbook.Worksheets(shtName) With .Range(strRng) .Font.Color = .Interior.Color If Application.Calculation = xlCalculationAutomatic Then .Value = 1 ElseIf Application.Calculation = xlCalculationManual Then .Value = 2 ElseIf Application.Calculation = xlCalculationSemiautomatic Then .Value = 3 End If End With End With 'エラー制御を戻す On Error GoTo 0 End Function '+++***********************************************+++ ' 自動/手動計算を最初の設定に戻す ' Call RestoreCalc("Main","A2") '+++***********************************************+++ Public Function RestoreCalc(shtName As String, strRng As String) 'エラーを無視 On Error Resume Next With ThisWorkbook.Worksheets(shtName) With .Range(strRng) .Font.Color = .Interior.Color If .Value = 1 Then Application.Calculation = xlCalculationAutomatic ElseIf .Value = 2 Then Application.Calculation = xlCalculationManual ElseIf .Value = 3 Then Application.Calculation = xlCalculationSemiautomatic End If End With End With 'エラー制御を戻す On Error GoTo 0 End Function '----------------------------------------------------- ' ステータスバーを使用する ' Call showStatus(msg) '----------------------------------------------------- Public Sub showStatus(ByVal MSG As String) 'エラーを無視 On Error Resume Next ThisWorkbook.Activate ActiveWindow.WindowState = xlMaximized Application.StatusBar = MSG DoEvents 'エラー制御を戻す On Error GoTo 0 End Sub '----------------------------------------------------- ' ステータスバーをClear ' Call clrStatus '----------------------------------------------------- Public Sub clrStatus() 'エラーを無視 On Error Resume Next DoEvents Application.StatusBar = False 'エラー制御を戻す On Error GoTo 0 End Sub '----------------------------------------------------- ' OSに制御を渡す ' Call exeBreak '----------------------------------------------------- Public Sub exeBreak() 'エラーを無視 On Error Resume Next DoEvents 'エラー制御を戻す On Error GoTo 0 End Sub ' +++*******************************************************+++ ' アクティブシートのシェイプを全削除 ' +++*******************************************************+++ Public Sub delShapes() Dim shp As Shape For Each shp In ActiveSheet.Shapes shp.Delete Next End Sub
コメント