无论条目大小写如何,都防止列中出现重复项

Preventing duplicates in a column regardless of the case of the entry

我在特定单元格中键入三个条目 [A2,B2,C2] 和 运行 代码将此数据带到 table.

中的第一个空行

该代码还根据单元格 B2 中输入的值防止重复。如果它已经存在于范围 (B2:B5000) 中,它会防止重复。

问题是它不忽略大小写。

例如:
我输入值 "Acetic Acid"
过了一会儿,我添加 "acetic Acid" 或更改任何字母大小写。

代码正常添加,没有阻止。

如何忽略字母大小写?

Sub tarheel()
LastRow = Range("A10000").End(xlUp).Row + 1
LR = Range("b10000").End(xlUp).Row + 1
For r = 5 To LR
    If Cells(r, 2) = Range("b2") Then MsgBox "This Item Name already exist, No shift will done": Exit Sub
Next
Cells(LastRow, 1).Value = Range("A2").Value
Cells(LastRow, 2).Value = Range("B2").Value
Cells(LastRow, 3).Value = Range("C2").Value
Range("A2:C2").Select
Selection.ClearContents
Range("A2").Select

End Sub

要更改 VBA 中的大小写,您有 LCaseUCase,它们将分别将您的所有字符串更改为 小写 大小写或 大写 大小写。

这是你的代码,在结尾处进行了更改并利用了无用的(和资源贪婪的)select:

Sub tarheel()

    LastRow = Range("A10000").End(xlUp).Row + 1
    LR = Range("b10000").End(xlUp).Row + 1

    IsIn = False

    For r = 5 To LR
        If LCase(Cells(r, 2)) = LCase(Range("b2")) Then _
            MsgBox "This Item Name already exist, No shift will done": Exit Sub
    Next

    Cells(LastRow, 1).Value = Range("A2").Value
    Cells(LastRow, 2).Value = Range("B2").Value
    Cells(LastRow, 3).Value = Range("C2").Value

    Range("A2:C2").ClearContents
    'Range("A2").Select

End Sub

您可以将比较现有值的循环替换为不区分大小写的循环,方法是将两个值都强制为大写或小写。

For r = 5 To LR
    If lcase(Cells(r, 2)) = lcase(Range("b2")) Then
        MsgBox "This Item Name already exist, No shift will done"
        Exit Sub
    end if
Next

使用不区分大小写的工作表函数一次检查整个范围可能更有效。

If cbool(application.countif(Range("B5:B" & LR), Cells(r, 2))) Then
    MsgBox "This Item Name already exist, No shift will done"
    Exit Sub
end if

另一种可能:

If not iserror(application.match(Cells(r, 2), Range("B5:B" & LR), 0)) Then
    MsgBox "This Item Name already exist, No shift will done"
    Exit Sub
end if

感谢您的所有回复,我也会尝试并给您反馈。

我可以通过在我的模块顶部添加这一行来解决这个问题。

Option Compare Text

它解决了我的问题。

谢谢

Sub tarheel()

    LastRow = Range("A10000").End(xlUp).Row + 1
    LR = Range("b10000").End(xlUp).Row + 1

    IsIn = False

    For r = 5 To LR
        If LCase(Cells(r, 2)) = LCase(Range("b2")) Then _
            MsgBox "This Item Name already exist, No shift will done": Exit Sub
    Next

    Cells(LastRow, 1).Value = Range("A2").Value
    Cells(LastRow, 2).Value = Range("B2").Value
    Cells(LastRow, 3).Value = Range("C2").Value

    Range("A2:C2").ClearContents
    'Range("A2").Select

End Sub