Проверка на уникальные имена

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
kuznetsovSergey
Сообщения: 163
Зарегистрирован: 05 мар 2009, 11:27

Есть списки ID на 2 листах. Один лист постоянно обновляется, и сверяется со вторым. Как сделать проверку, на наличии всех ID на втором листе. если какого то ID не хватает на втором листе, что бы он выводил список, каких не достаёт.

Заранее спасибо

=ЕСЛИ(ЕОШИБКА(ВПР(G:G;masterfile!A:A;1;0));G2;0)

Такая формула, помогает мне найти все ID которые, не найдены на листе masterFile. Но мне не целый столбец нужен, а просто не большой список недостающих ID, без задвоенностей
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
делаю через встроенную функцию, на выборку уникальных имен, в сложном автофильтре, но у меня таких 3 листа. для этой проверки. А встроенная функция не позволяет сохранять эти выборки на других листах
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

К сожалению, Вы не указали куда девать найденные значения.
Пусть в столбце "A" на листе 1 находятся обновляемые данные. И пусть в столбце "A" на листе 2 находятся имеющиеся данные. Следующий макрос выведет в столбец "B" листа 2, начиная с 1-й строки, те уникальные значения, которые есть в столбце "A" на листе 1, но нет в столбце "A" на листе 2.

Код: Выделить всё

Sub Main()
    Dim i As Long, j As Long, x As New Collection, a(), b(), c()
    Application.ScreenUpdating = False: Sheets(2).Activate
    With Sheets(1)
        a = Range([A1], Cells(Rows.Count, 1).End(xlUp)).Value
        b = .Range(.[A1], .Cells(Rows.Count, 1).End(xlUp)).Value
    End With
    ReDim c(1 To UBound(a, 1), 1 To 1): On Error Resume Next
    For i = 1 To UBound(a, 1): x.Add a(i, 1), CStr(a(i, 1)): Next
    On Error GoTo 0: j = 0
    For i = 1 To UBound(b, 1)
        On Error Resume Next
        x.Add b(i, 1), CStr(b(i, 1))
        If Err = 0 Then
            j = j + 1: c(j, 1) = b(i, 1)
        Else: On Error GoTo 0
        End If
    Next
    Range([B1], Cells(UBound(c, 1), 2)).Value = c
End Sub
kuznetsovSergey
Сообщения: 163
Зарегистрирован: 05 мар 2009, 11:27

Код: Выделить всё

Sheets("Proverka").Select
Columns("A:A").Select
    Columns("A:A").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
    Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
Вот так вот я сделал, и всё отлично и быстро работает


смотрите, вопрос теперь такой, есть лист proverka, в столбце А:A находиться столбец данных, мне нужно этот столбец записнуть в лист бокс, на отдельной форме Userform2.textbox1

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

заранее спасибо
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

есть лист proverka, в столбце А:A находиться столбец данных, мне нужно этот столбец записнуть в лист бокс, на отдельной форме Userform2.textbox1

как выводить на ту форму этот столбец, количество заполненных ячеек на листе проверка может быть сколько угодно.
Смотрим Help по ListBox - видим:
RowSource Property

Specifies the source providing a list for a ComboBox or ListBox.

Syntax

object.RowSource [= String]

The RowSource property syntax has these parts:
Part Description object Required. A valid object. String Optional. The source of the list for the ComboBox or ListBox.

Remarks

The RowSource property accepts worksheet ranges from Microsoft Excel.
Андрей Энтелис,
aentelis.livejournal.com
kuznetsovSergey
Сообщения: 163
Зарегистрирован: 05 мар 2009, 11:27

тема закрыта
Ответить