Повторяющиеся значения - VBA (48724)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Нужна Ваша помощь. Имеется файл, на двух разных листах содержатся записи и надо найти повторяющиеся элементы, выставить пометки да/нет. Да, если запись повторяется, нет, если запись не повторяется. В файле повторяющиеся элементы 3 и 5 записи, а пометки выставляются для всех как нет.
Листинг программы
  1. 'Собираем "слово" из 4 ячеек
  2. asd1 = Sheets("Лист1").Cells(i, 1) & Sheets("Лист1").Cells(i, 2) & Sheets("Лист1").Cells(i, 3) & Sheets("Лист1").Cells(i, 4)
  3. asd2 = Sheets("Лист2").Cells(j, 1) & Sheets("Лист2").Cells(j, 2) & Sheets("Лист2").Cells(j, 3) & Sheets("Лист2").Cells(j, 4)
  4. If asd1 = asd2 Then 'Сравниваем полученные слова
  5. If Sheets("Лист1").Cells(i, 5) = "" Then Sheets("Лист1").Cells(i, 5) = "Да"
  6. If Sheets("Лист2").Cells(j, 5) = "" Then Sheets("Лист2").Cells(j, 5) = "Да"
  7. Exit For
  8. End If
  9. Next j
  10. Next i
  11. ' Цикл простановки нет
  12. For i = 2 To List1RowsCount
  13. If Sheets("Лист1").Cells(i, 5) = "" Then Sheets("Лист1").Cells(i, 5) = "нет"
  14. Next i
  15. For j = 2 To List2RowsCount
  16. If Sheets("Лист2").Cells(j, 5) = "" Then Sheets("Лист2").Cells(j, 5) = "нет"
  17. Next j
Пример_1.xlsx

Решение задачи: «Повторяющиеся значения»

textual
Листинг программы
  1. Sub CompareRows()
  2. Dim S1 As String, S2 As String, Iz1 As Integer, Iz2 As Integer
  3. Dim LastRow As Long, I As Long, J As Integer, TF As Boolean
  4. Sheets(1).Activate
  5. LastRow = ActiveSheet.UsedRange.Row + _
  6.           ActiveSheet.UsedRange.Rows.Count - 1
  7. For I = 1 To LastRow
  8.   If Cells(I, 1) <> "" Then 'пропускаем пустые строки
  9.    TF = True
  10.     For J = 1 To 4
  11.       S1 = Trim(Cells(I, J)): S2 = Trim(Sheets(2).Cells(I, J))
  12.       Iz1 = InStr(S1, "*"): Iz2 = InStr(S2, "*")
  13.       If Iz1 + Iz2 = 0 Then 'нет звёзд
  14.        If S1 <> S2 Then
  15.           TF = False: Exit For
  16.         End If
  17.       Else
  18.         If Iz1 = 0 Or (Iz2 > 0 And Iz2 < Iz1) Then Iz1 = Iz2
  19.         Iz1 = Iz1 - 1
  20.         If Iz1 > 0 Then 'есть текст + звезда
  21.          If Left(S1, Iz1) <> Left(S2, Iz1) Then
  22.             TF = False: Exit For
  23.           End If
  24.         End If
  25.       End If
  26.     Next
  27.     Cells(I, 6) = IIf(TF, "Да", "Нет")
  28.   End If
  29. Next
  30. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.571 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы