Есть ли способ сравнить изменение столбцов в Excel и удалить дубликаты? - PullRequest
0 голосов
/ 09 апреля 2019

Поэтому я пытаюсь реализовать сканер штрих-кода в Excel.Он уже вводит штрих-код в виде числа в ячейке.В другой колонке у меня есть набор штрих-кодов.Поэтому, когда сканер предоставляет штрих-код, этот штрих-код и один дубликат в другом столбце должны быть удалены.

Я уже пробовал использовать функцию сравнения таблиц Excel, но не удаляет дублирующийся штрих-код и не можетне отмечать дубликаты в столбце штрих-кода.Это означает: если в столбце штрих-кода дважды есть код 123456 , он помечает его как дубликат.

Итак, представьте, что у меня есть штрих-коды 123,123,124,125.Затем, если я отсканирую 124, я ожидаю, что столбец будет содержать только 123,112,125, а если я отсканирую 123, я ожидаю, что он будет содержать 123,125.

Есть ли способ сделать это в Excel или мне нужно специальное программное обеспечение, если да, то какое именно использовать?

Изображение моей проблемы

1 Ответ

0 голосов
/ 10 апреля 2019

Вы можете попробовать импортировать указанный ниже код в событие смены листа, изменить его и попробовать:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim BarCode As String
    Dim LastRowA As Long, LastRowC As Long, i As Long, Times As Long
    Dim arr As Variant

    'Let us assume that:
    '1. All bar codes appears in column A
    '2. The Selected bar code are in cell B2
    '3. And the results are in column C

    With ThisWorkbook.Worksheets("Sheet1")

        If Not Intersect(Target, .Range("B2")) Is Nothing And Target.Count = 1 Then '<- Check if there is any change in cell B2

            LastRowC = .Cells(.Rows.Count, "C").End(xlUp).Row

            Application.EnableEvents = False

                If LastRowC > 1 Then

                    .Range("C2:C" & LastRowC).Clear '<- If there are data in the results field clear them

                End If

                BarCode = Target.Value '<- Get the code imported

                LastRowA = .Cells(.Rows.Count, "A").End(xlUp).Row

                arr = .Range("A2:A" & LastRowA) '<- Create an array with all the bar codes

                For i = LBound(arr) To UBound(arr) '<- Loop codes
                    Debug.Print arr(i, 1)
                    If arr(i, 1) = BarCode Then
                        Times = Times + 1
                        If Times > 1 Then
                            LastRowC = .Cells(.Rows.Count, "C").End(xlUp).Row
                            .Range("C" & LastRowC + 1).Value = arr(i, 1)
                        End If
                    Else
                        LastRowC = .Cells(.Rows.Count, "C").End(xlUp).Row
                        .Range("C" & LastRowC + 1).Value = arr(i, 1)
                    End If

            Next i

            Application.EnableEvents = True

        End If

    End With

End Sub

Результаты:

enter image description here

...