无论条目大小写如何,都防止列中出现重复项
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 中的大小写,您有 LCase
和 UCase
,它们将分别将您的所有字符串更改为 小写 大小写或 大写 大小写。
这是你的代码,在结尾处进行了更改并利用了无用的(和资源贪婪的)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
我在特定单元格中键入三个条目 [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 中的大小写,您有 LCase
和 UCase
,它们将分别将您的所有字符串更改为 小写 大小写或 大写 大小写。
这是你的代码,在结尾处进行了更改并利用了无用的(和资源贪婪的)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