/ / Excel VBA code: Запобігання дублікатам у стовпці, незалежно від чутливого випадку запису - excel, vba, excel-vba, duplicates

Excel VBA code: Запобігання дублікатам у стовпчику, незалежно від чутливого випадку запису - excel, vba, excel-vba, duplicates

Я ввожу дані в таблицю за допомогою коду VBA, я ввожу 3 записи в певні комірки [A2, B2, C2], і я запускаю код, щоб прийняти ці дані до першого порожнього рядка у таблиці.

код також запобігає дублікатам даних на основівведене значення в клітинці В2 якщо він вже існує в діапазоні (B2: B5000), це запобігає дублікатам. але проблема полягає в тому, що він не ігнорує чутливий випадок, наприклад: я ввів значення "оцтова кислота" через деякий час я хочу додати інший елемент іншим, хто набирає його так (оцтова кислота) або змінити будь-яку букву листа, код додати його нормально, не заважаючи. тому будь-які пропозиції, будь ласка, ігноруйте справу листа? використаний код:

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

Відповіді:

1 для відповіді № 1

Щоб змінити регістр у VBA, у вас є LCase і UCase, який відповідно змінить весь ваш рядок на нижче справа або верхній справа

Ось ваш код із зміною і отримав їзду про марність (і ресурс-жадний) вибрати в кінці:

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

2 для відповіді № 2

Спасибі за всі ваші відповіді, і я спробую це і дам вам відгук.

я міг це зрозуміти, додавши цю лінію у верхній частині мого модуля.

Option Compare Text

і це вирішило мою проблему.

Дякую


1 для відповіді № 3

Ви можете замінити цикл, який порівнює існуючі значення з нечутливим до регістру, змушуючи обидві значення вгорі або в нижньому регістрі.

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