Excelで入力規則に違反するセルを一覧表示するVBAマクロの作成方法
Excelのデータ整合性を保つためには、データの入力規則が重要な役割を果たします。しかし、大規模なシートでは、これらの規則に違反するセルを見つけるのが難しい場合があります。この記事では、入力規則に違反するセルを効率的に見つけ出し、新しいシートに一覧表示するVBAマクロの作成方法を紹介します。
マクロの特徴
このマクロは、ワークブック内の全シートを走査し、入力規則に違反しているセルの情報(シート名、セルアドレス、セルの値)を新しいシートに一覧表示します。さらに、違反セルへのハイパーリンクを含めることで、直接そのセルにジャンプできる便利さを提供します。また、同名のシートが存在する場合は自動で新しいシート名を生成し、エラーを防ぎます。
コードの挿入方法
以下のコードをExcelのVBAエディタに挿入します。具体的な手順は後述します。
Sub ListInvalidDataWithHyperlinks() Dim ws As Worksheet, newSheet As Worksheet Dim cell As Range, r As Long Dim sheetName As String, cellAddress As String, cellValue As String Dim newSheetName As String Dim hyperlinkAddress As String ' 新しいシート名を決定 newSheetName = "Invalid Data List" If SheetExists(newSheetName) Then newSheetName = GetUniqueName(newSheetName) End If ' 新しいシートを作成し、タイトル行を設定 Set newSheet = ThisWorkbook.Sheets.Add(Before:=ThisWorkbook.Sheets(1)) newSheet.Name = newSheetName newSheet.Cells(1, 1).Value = "Sheet Name" newSheet.Cells(1, 2).Value = "Cell Address" newSheet.Cells(1, 3).Value = "Cell Value" newSheet.Cells(1, 4).Value = "Hyperlink" r = 2 ' データの開始行 ' ワークブックの各シートをループ For Each ws In ThisWorkbook.Sheets If ws.Name <> newSheet.Name Then For Each cell In ws.UsedRange ' セルが入力規則に違反しているかチェック If Not cell.Validation.Value Then sheetName = ws.Name cellAddress = cell.Address cellValue = cell.Value hyperlinkAddress = "'" & sheetName & "'!" & cellAddress ' 新しいシートにデータを書き込む newSheet.Cells(r, 1).Value = sheetName newSheet.Cells(r, 2).Value = cellAddress newSheet.Cells(r, 3).Value = cellValue newSheet.Hyperlinks.Add _ Anchor:=newSheet.Cells(r, 4), _ Address:="", _ SubAddress:=hyperlinkAddress, _ TextToDisplay:="Go to Cell" r = r + 1 ' 次の行へ End If Next cell End If Next ws ' 結果シートのフォーマットを整える With newSheet.Rows(1) .Font.Bold = True .HorizontalAlignment = xlCenter End With newSheet.Columns("A:D").AutoFit End Sub ' シートが存在するかどうかを確認 Function SheetExists(sheetName As String) As Boolean Dim sht As Worksheet On Error Resume Next Set sht = ThisWorkbook.Sheets(sheetName) On Error GoTo 0 SheetExists = Not sht Is Nothing End Function ' 一意のシート名を生成 Function GetUniqueName(baseName As String) As String Dim count As Integer count = 1 Do While SheetExists(baseName & " " & count) count = count + 1 Loop GetUniqueName = baseName & " " & count End Function
マクロの実行手順
マクロを実行するには、まずExcelを開き、対象のワークブックを開きます。次に、Alt + F11
キーを押してVBAエディタを開き、新しい標準モジュールを挿入します(挿入→標準モジュール)。そして、提供したコードを貼り付けて、VBAエディタを閉じます。
マクロの実行にはAlt + F8キー
を使ってください。
マクロ実行後の結果
マクロを実行すると、新しいシートがワークブックの最初に追加されます。このシートには、入力規則に違反するセルのシート名、アドレス、値がリストアップされます。各行の「ハイパーリンク」列をクリックすると、対象のセルに直接ジャンプできるようになっています。
使用時の注意点
マクロを実行する前に、ワークブックのバックアップを取ることをお勧めします。また、大規模なワークシートでは実行時間が長くなる可能性があるため、時間に余裕を持って実行してください。さらに、Excelのマクロ設定が「すべてのマクロを有効にする」または「マクロの有効化に警告する」に設定されている必要があります。
コメント