Страницы: 1
RSS
Сопоставление и счётчик значений с удалением дубликатов в Excel VBA
 
Добрый день! На Лист2 Данные, в первой и во второй колонки. В первой текст, во второй число или текстовые значения. Необходимо при вводе числа или текстового значения в колонке 1 Лист1 находило это число или значения в колонке 2 Лист2 и извлекало данные с колонки 1 Лист2 той же строки соответственно и заменяло на Лист1 колонка 1 введенное значение. Во второй колонке Лист1 необходимо вести счет введенных данных. Если значение введено впервые установить 1, если значение введено повторно прибавить счет к предыдущему - вновь введенное удалить из Лист 1 столбец 1 и 2! следующий ввод данных начинать с первой пустой ячейки под списком Лист1 столбец 1. Пример во вложении, но при повторе данные значения счета суммируются, но введенные повторы не удаляются
Изменено: Sanja - 18.05.2025 05:34:40
 
Можно ли удалять повторы, и если введеного кода нет в списке Лист2 колонка 2 выводить сообщение Код не найден
 
Цитата
Baidut написал: Код VBA
Плохое название для темы. Предложите (тут, в сообщении) название соответствующее Правилам форума. Модераторы поменяют
Согласие есть продукт при полном непротивлении сторон
 
Sanja, Прветсвую вас. Возможное название темы: "Сопоставление и счётчик значений с удалением дубликатов в Excel VBA".
Baidut, Вроде бы не первый день на форуме а название темы не можете придумать сами.
Возможно я не так понял влпрос но попробую решить её.
Код
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i           As Long
    Dim existingRow As Long

    If Target.Column <> 1 Or Target.Cells.Count > 1 Then Exit Sub
    If IsEmpty(Target.Value) Then Exit Sub

    Application.EnableEvents = False
    Application.ScreenUpdating = False

    With ThisWorkbook.Worksheets("Лист2")

        Dim matchRow As Variant
        matchRow = Application.Match(Target.Value, .Range("A:A"), 0)

        If Not IsError(matchRow) Then
            Target.Value = .Cells(matchRow, 1).Value
        Else
            Application.EnableEvents = True
            Application.ScreenUpdating = True
            Exit Sub
        End If

    End With

    Dim lastRow     As Long
    lastRow = Me.Cells(Me.Rows.Count, 1).End(xlUp).Row

    For i = 1 To lastRow

        If i <> Target.Row Then

            If Me.Cells(i, 1).Value = Target.Value Then
                existingRow = i
                Exit For
            End If

        End If

    Next i

    If existingRow > 0 Then

        Dim countVal As Long
        countVal = Me.Cells(existingRow, 2).Value

        Me.Cells(existingRow, 2).Value = countVal + 1
        Me.Rows(Target.Row).Delete
    Else
        Target.Offset(0, 1).Value = 1
    End If

    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
 
Добрый день! Спасибо
Страницы: 1
Читают тему
Наверх