查找无效数据验证单元格

时间:2016-09-01 17:57:44

标签: excel vba list excel-vba validation

说明

我创建了一个自定义下拉数据验证列表,我可以在其中选择多个值。下拉列表中的这些值会根据需要更改(在工作表列X中定义)。

问题:

当我从下拉列表中选择其中一个值(假设为Y)然后通过删除最后插入的值(从列X中删除Y值)更新数据验证时,会出现问题。通过这样做,工作表中的值Y不再有效,所以我想知道是否有办法获取具有无效数据的单元格的列表(数组或字符串)。

到目前为止我做过/想过的事情:

我在几个网站上搜索并阅读了类似的问题,但我找不到任何有用的东西。我考虑循环所有单元格并检查该值是否有效,但由于我有大量数据,我认为这不是最好的方法。

由于Excel已经用红色圆圈标记这些无效数据,也许有可能获得那些标记单元格的地址? 提前致谢!

1 个答案:

答案 0 :(得分:4)

在工作表中获取无效单元格的正确方法是使用Cells.SpecialCells(xlCellTypeAllValidation)

通过使用Microsoft KB213773 (Q213773) - "How to create data validation circles for printing in Excel"中的一些信息,类似的Sub可用于循环所有无效的单元格,然后更改其值(或将其标记为将来编辑)。

Sub CorrectInvalidValues()

    Dim data_range As Range
    Dim invalid_cell As Range
    Dim count As Integer: count = 0
    Dim nr_invalid As Integer: nr_invalid = 0
    Dim new_value As String

    'If an error occurs run the error handler and end the procedure
    On Error GoTo errhandler
    Set data_range = Cells.SpecialCells(xlCellTypeAllValidation)
    On Error GoTo 0

    ' Loop through each cell that has data validation and gets the number of invalid cells
    For Each invalid_cell In data_range
        If Not invalid_cell.Validation.Value Then
            nr_invalid = nr_invalid + 1
        End If
    Next

    ' Editing each value
    For Each invalid_cell In data_range
        If Not invalid_cell.Validation.Value Then
            count = count + 1
            Application.Goto reference:=invalid_cell, Scroll:=True
            new_value = Application.InputBox("Please insert a correct value.", "Invalid Data " & count & "/" & nr_invalid)

            If Not (new_value = "False") Then
                invalid_cell.Interior.ColorIndex = 0
                invalid_cell.Value = new_value
            Else
                invalid_cell.Interior.Color = RGB(255, 0, 0)
                invalid_cell.Value = "<PLEASE EDIT>"
            End If
        End If
    Next

    Exit Sub

errhandler:
    MsgBox "There are no cells with data validation on this sheet."

End Sub