проверить столбец в каждой строке и захватить каждое уникальное значение и присвоить переменной - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть следующий код, который проходит по каждой строке и выполняет код для изменения значений. Я также хочу, чтобы он захватывал имя процессора, расположенное в столбце C для каждой строки, но я не хочу дублировать имена. Затем я буду использовать эти имена для автоматического кода электронной почты, который я подготовил. Я не знаю, как записать имена в переменную для каждой строки без дубликатов.

Dim x as Integer
Application.ScreenUpdating = False
      NumRows = Range("A2", Range("A2").End(xlDown)).Rows.Count
      Range("A2").Select
      For x = 2 To NumRows + 1
         Range("A" & x).Validation.Delete
         If ActiveSheet.Range("T" & x).Value > 1 Then ActiveSheet.Range("G" & x).Value = "YES" ' Else
         If ActiveSheet.Range("T" & x).Value < 1 Then ActiveSheet.Range("G" & x).Value = "NO" ' Else

'HERE IS WHERE I WANT TO ADD THE CODE I NEED HELP WITH

         ActiveCell.Offset(1, 0).Select
      Next
      Application.ScreenUpdating = True

enter image description here

Ответы [ 2 ]

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

Вы можете попробовать:

Option Explicit

Sub TEST()

    Dim LastRow1 As Long, i As Long
    Dim dict As New Scripting.Dictionary

    With ThisWorkbook.Worksheets("Sheet1")

        'Find Last row of sheet 1 column C
        LastRow1 = .Cells(.Rows.Count, "C").End(xlUp).Row

        'Start looping rows from row 2 to lastrow1
        For i = 2 To LastRow1

            'If item not exist in in dictionary
            If Not dict.Exists(.Range("C" & i).Value) Then

                'If dictionary is empty
                If dict.Count = 0 Then
                    dict.Add .Range("C" & i).Value, dict.Count
                Else
                    dict.Add .Range("C" & i).Value, dict.Count + 1
                End If

            End If

        Next i

    End With

End Sub
0 голосов
/ 30 апреля 2019

Коллекция очень проста в использовании для этого приложения.

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

[x] = var

Dim [collection] As New Collection, [cell] as Range, [range] as Range, [boolean] as Boolean, [item] as Variant

For Each [cell] In [range]
    [boolean] = False
    For Each [item] In [collection]
        If [item] = [cell].Value Then
            [boolean] = True
            Exit For
        End If
    Next [item]
    If [boolean] = False Then [collection].Add [cell].Value
Next [cell]

Затем вы можете снова прочитать все элементы с помощью цикла for:

For Each [item] In [collection]
    Debug.Print [item]
next [item]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...