Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
25.04.2024, 07:22:54

Войти
Добавляйтесь в нашу группу ВКонтакте - будьте в курсе всех новых событий сайта, узнавайте первым обо всех акциях и новых статьях!
33 243 Сообщений в 5 458 Тем от 6 761 Пользователей
Последний пользователь: Halfdoor
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  КАК ПОЛУЧИТЬ СПИСОК УНИКАЛЬНЫХ(НЕ ПОВТОРЯЮЩИХСЯ) ЗНАЧЕНИЙ?
Страниц: [1]   Вниз
Печать
Автор Тема: КАК ПОЛУЧИТЬ СПИСОК УНИКАЛЬНЫХ(НЕ ПОВТОРЯЮЩИХСЯ) ЗНАЧЕНИЙ?  (Прочитано 3662 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Tow
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля E-mail
« : 21.07.2020, 13:11:25 »

Здравствуйте, пытаюсь применить для себя Ваш макрос изменив "A2:A51" на "C2:C51", но почему то при запросе данных выдает диапазон "$A:$AY"?, а если другие столбцы то работает. Что делаю не так?
Код: (vb)
Sub Extract_Unique()
    Dim x, avArr, li As Long
    Dim avVals
    Dim rVals As Range, rResultCell As Range
 
    On Error Resume Next
    'запрашиваем адрес ячеек для выбора уникальных значений
    Set rVals = Application.InputBox("Укажите диапазон ячеек для выборки уникальных значений", "Запрос данных", "A2:A51", Type:=8)
    If rVals Is Nothing Then 'если нажата кнопка Отмена
        Exit Sub
    End If
    'если указана только одна ячейка - нет смысла выбирать
    If rVals.Count = 1 Then
        MsgBox "Для отбора уникальных значений требуется указать более одной ячейки", vbInformation, "www.excel-vba.ru"
        Exit Sub
    End If
    'отсекаем пустые строки и столбцы вне рабочего диапазона
    Set rVals = Intersect(rVals, rVals.Parent.UsedRange)
    'если указаны только пустые ячейки вне рабочего диапазона
    If rVals Is Nothing Then
        MsgBox "Недостаточно данных для выбора значений", vbInformation, "www.excel-vba.ru"
        Exit Sub
    End If
    avVals = rVals.Value
    'запрашиваем ячейку для вывода результата
    Set rResultCell = Application.InputBox("Укажите ячейку для вставки отобранных уникальных значений", "Запрос данных", "E2", Type:=8)
    If rResultCell Is Nothing Then 'если нажата кнопка Отмена
        Exit Sub
    End If
    'определяем максимально возможную размерность массива для результата
    ReDim avArr(1 To Rows.Count, 1 To 1)
    'при помощи объекта Коллекции(Collection)
    'отбираем только уникальные записи,
    'т.к. Коллекции не могут содержать повторяющиеся значения
    With New Collection
        On Error Resume Next
        For Each x In avVals
            If Len(CStr(x)) Then 'пропускаем пустые ячейки
                .Add x, CStr(x) 'если добавляемый элемент уже есть в Коллекции - возникнет ошибка
                'если же ошибки нет - такое значение еще не внесено,
                'добавляем в результирующий массив
                If Err = 0 Then
                    li = li + 1
                    avArr(li, 1) = x
                Else
                    'обязательно очищаем объект Ошибки
                    Err.Clear
                End If
            End If
        Next
    End With
    'записываем результат на лист, начиная с указанной ячейки
    If li Then rResultCell.Cells(1, 1).Resize(li).Value = avArr
End Sub
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #1 : 21.07.2020, 13:35:03 »

А где Вы что вообще изменили? В коде не вижу никаких изменений.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Tow
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля E-mail
« Ответ #2 : 21.07.2020, 14:46:30 »

Код: (vb)
Sub Extract_Unique()  
    Dim x, avArr, li As Long  
    Dim avVals  
    Dim rVals As Range, rResultCell As Range  
  
    On Error Resume Next  
    'запрашиваем адрес ячеек для выбора уникальных значений  
    Set rVals = Application.InputBox("Укажите диапазон ячеек для выборки уникальных значений", "Запрос данных", "C2:C51", Type:=8)  
    If rVals Is Nothing Then 'если нажата кнопка Отмена  
        Exit Sub  
    End If  
    'если указана только одна ячейка - нет смысла выбирать  
    If rVals.Count = 1 Then  
        MsgBox "Для отбора уникальных значений требуется указать более одной ячейки", vbInformation, "www.excel-vba.ru"  
        Exit Sub  
    End If  
    'отсекаем пустые строки и столбцы вне рабочего диапазона  
    Set rVals = Intersect(rVals, rVals.Parent.UsedRange)  
    'если указаны только пустые ячейки вне рабочего диапазона  
    If rVals Is Nothing Then  
        MsgBox "Недостаточно данных для выбора значений", vbInformation, "www.excel-vba.ru"  
        Exit Sub  
    End If  
    avVals = rVals.Value  
    'запрашиваем ячейку для вывода результата  
    Set rResultCell = Application.InputBox("Укажите ячейку для вставки отобранных уникальных значений", "Запрос данных", "A2", Type:=8)  
    If rResultCell Is Nothing Then 'если нажата кнопка Отмена  
        Exit Sub  
    End If  
    'определяем максимально возможную размерность массива для результата  
    ReDim avArr(1 To Rows.Count, 1 To 1)  
    'при помощи объекта Коллекции(Collection)  
    'отбираем только уникальные записи,  
    'т.к. Коллекции не могут содержать повторяющиеся значения  
    With New Collection  
        On Error Resume Next  
        For Each x In avVals  
            If Len(CStr(x)) Then 'пропускаем пустые ячейки  
                .Add x, CStr(x) 'если добавляемый элемент уже есть в Коллекции - возникнет ошибка  
                'если же ошибки нет - такое значение еще не внесено,  
                'добавляем в результирующий массив  
                If Err = 0 Then  
                    li = li + 1  
                    avArr(li, 1) = x  
                Else  
                    'обязательно очищаем объект Ошибки  
                    Err.Clear  
                End If  
            End If  
        Next  
    End With  
    'записываем результат на лист, начиная с указанной ячейки  
    If li Then rResultCell.Cells(1, 1).Resize(li).Value = avArr  
End Sub

Комментарий администратора Коды оформляйте тегами VBCode. п.п. 4.25 Правил форума
« Последнее редактирование: 21.07.2020, 15:18:54 от Дмитрий Щербаков(The_Prist) » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #3 : 21.07.2020, 15:18:34 »

Попробуйте указать в стиле R1C1:
Код: (vb)
Set rVals = Application.InputBox("Укажите диапазон ячеек для выборки уникальных значений", "Запрос данных", "R2C3:R51C3", Type:=8)

или так:
Код: (vb)
Set rVals = Application.InputBox("Укажите диапазон ячеек для выборки уникальных значений", "Запрос данных", Range("C2:C51").Address(1, 1), Type:=8)


P.S. Коды оформляйте тегами VBCode. п.п. 4.25 Правил форума
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Tow
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля E-mail
« Ответ #4 : 21.07.2020, 15:19:56 »

Спасибо большое!!!
« Последнее редактирование: 21.07.2020, 15:42:56 от Tow » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #5 : 21.07.2020, 20:35:24 »

А зачем Вы файл приложили? Что-то все еще не получается или проблема решена?
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Tow
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля E-mail
« Ответ #6 : 22.07.2020, 02:35:34 »

Да нет я разобрался, просто пользователь parovoz, очень сильно просил Плачущий, чтобы я его выложил Улыбка.
Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru