Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
VisualBasic
(Модератор:
Naghual
) > Тема:
Как пофильтровать в памяти?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Как пофильтровать в памяти? (Прочитано 10939 раз)
0 Пользователей и 1 Гость смотрят эту тему.
klaus
Участник
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)
Но в этой колонке много повторяющихся значений, а мне надо чтобы занесло только уникальные. Кто может помочь?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
Re: Как пофильтровать в памяти?
«
Ответ #1 :
16-10-2008 11:26 »
сортировка по возрастанию поможет ?
Записан
>FAQ ПО ПРОГР.
>ССЫЛКИ ПО ПРОГР.
>Правила"Неотложки"
klaus
Участник
Offline
Re: Как пофильтровать в памяти?
«
Ответ #2 :
16-10-2008 12:07 »
Не, менять в ячейках нельзя - поэтому все надо в памяти
Записан
klaus
Участник
Offline
Re: Как пофильтровать в памяти?
«
Ответ #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
Записан
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
Re: Как пофильтровать в памяти?
«
Ответ #4 :
16-10-2008 16:12 »
klaus
, а зачем менять в ячейках ? Создай массив из элементов, содержащих id и адрес ячейки. Сортируешь массив, потом сканируешь его - повторные id отметаешь, а по адресам вынимаешь данные
Записан
>FAQ ПО ПРОГР.
>ССЫЛКИ ПО ПРОГР.
>Правила"Неотложки"
HandKot
Молодой специалист
Offline
Re: Как пофильтровать в памяти?
«
Ответ #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
Молодой специалист
Offline
Re: Как пофильтровать в памяти?
«
Ответ #6 :
17-10-2008 07:37 »
кстати, если при накладывании фильтра указать параметр CopyToRange
то и лишних проверок можно избежать
Записан
I Have Nine Lives You Have One Only
THINK!
klaus
Участник
Offline
Re: Как пофильтровать в памяти?
«
Ответ #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
Участник
Offline
Re: Как пофильтровать в памяти?
«
Ответ #8 :
21-10-2008 06:48 »
Спасибо, разобрался, все работает.
)
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
VisualBasic
(Модератор:
Naghual
) > Тема:
Как пофильтровать в памяти?
Загружается...