Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как пофильтровать в памяти?  (Прочитано 10939 раз)
0 Пользователей и 1 Гость смотрят эту тему.
klaus
Участник

ua
Offline Offline

« : 16-10-2008 10:50 » 

Собственно надо взять с первой колонки все уникальные значения, но...
Есть фрагмент кода, который все что есть в этой колонке заносит в массив:
KolCells = .Cells(1, 1).End(xlDown).Row
KolID = KolCells
ReDim ID(KolCells)
For ICells = 1 To KolCells
ID(ICells) = .Cells(ICells, 1)

Но в этой колонке много повторяющихся значений, а мне надо чтобы занесло только уникальные. Кто может помочь?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 16-10-2008 11:26 » 

сортировка по возрастанию поможет ?
Записан

klaus
Участник

ua
Offline Offline

« Ответ #2 : 16-10-2008 12:07 » 

Не, менять в ячейках нельзя - поэтому все надо в памяти
Записан
klaus
Участник

ua
Offline Offline

« Ответ #3 : 16-10-2008 12:25 » 

Как-то вот так, но чтобы работало:
Цитата
    .Cells(1, 1).Select
    Selection.Insert Shift:=xlDown
    .Cells(1, 1).Select
    ActiveCell.FormulaR1C1 = Не понял?
    .Select
    .AdvancedFilter Action:=xlFilterInPlace, Unique:=True
    .Cells(1, 1).Select
    Selection.Delete Shift:=xlUp
KolCells = .Cells(1, 1).End(xlDown).Row
KolID = KolCells
ReDim ID(KolCells)
For ICells = 1 To KolCells
ID(ICells) = .Cells(ICells, 1)
    ActiveSheet.ShowAllData
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 16-10-2008 16:12 » 

klaus, а зачем менять в ячейках ? Создай массив из элементов, содержащих id и адрес ячейки. Сортируешь массив, потом сканируешь его - повторные id отметаешь, а по адресам вынимаешь данные
Записан

HandKot
Молодой специалист

ru
Offline Offline

« Ответ #5 : 17-10-2008 04:47 » 

   
Код:
Dim ws As Worksheet
    Dim r As Range
    Dim ID() As String
   
    Set ws = ThisWorkbook.Worksheets(2)
   
    kolcells = ThisWorkbook.Worksheets(2).Cells(1, 1).End(xlDown).Row
   
    'оставляем только уникальные значения
    Set r = ws.Range("A1:A" + CStr(kolcells))
    r.AdvancedFilter Action:=xlFilterInPlace, Unique:=True

    'кидаем в массив
    ICells = 1
    ReDim ID(kolcells)
    For Each rw In r.Rows
        If Not rw.Hidden Then
            Debug.Print rw.Cells(1).Text
            ID(ICells) = rw.Cells(1).Text
            ICells = ICells + 1
        End If
    Next
   
    For ICells = 1 To kolcells
        Debug.Print ID(ICells)
    Next
   
    'убираем филтр
    ws.ShowAllData
Записан

I Have Nine Lives You Have One Only
THINK!
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #6 : 17-10-2008 07:37 » 

кстати, если при накладывании фильтра указать параметр CopyToRange
то и лишних проверок можно избежать
Записан

I Have Nine Lives You Have One Only
THINK!
klaus
Участник

ua
Offline Offline

« Ответ #7 : 17-10-2008 07:40 » 

Чего-то не пошло, и даже не пойму в каком месте, говорит Run-time error '6': Overflow, а чего Overflow, не знаю. Вот собственно все вместе - исходник, куда вставить фильтр надо - там RED.txt с описанием. http://garden.gov.ua/failo/xls.rar
« Последнее редактирование: 17-10-2008 08:02 от klaus » Записан
klaus
Участник

ua
Offline Offline

« Ответ #8 : 21-10-2008 06:48 » 

Спасибо, разобрался, все работает.  Улыбаюсь)
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines