Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2013, 12:57   #11
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Цитата:
Во что накалякал:

Set regs_sn = CreateObject("Scripting.Dictionary" )
For i = 1 To UBound(regs_sp)
If regs_sn.Exists(regs_sp(i)) Then regs_sn.Item(regs_sp(i)) = regs_sn.Item(regs_sp(i)) & "; " & regs_sp(i) Else regs_sn.Add regs_sp(i), regs_sp(i)
Next
regs_sn - новая пустая переменная
regs_sp - откуда дёргаю данные, массив

тока как вывести теперь значения? ну типо MsgBox (Cstr(regs_sn.count(1)), так выведет?
эт ваще не та степь =))
тут будет первый столбец уникальные значения,а второй склейка всех повторов =) в эту сторону больше не смотрим

Предлагаю все-таки вариант с двумя циклами, какие значения будет содержать ваш массив?
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума Ответить с цитированием
Старый 03.10.2013, 13:30   #12
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Почему не смотрим? Просто загоняем всё в словарь, затем возвращаем ключи. Всё.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 03.10.2013, 13:35   #13
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Код:
Sub tt()
    regs_sp = Array("a", "b", "a", "c")
    With CreateObject("Scripting.Dictionary")
        For i = 0 To UBound(regs_sp)
            .Item(regs_sp(i)) = 0&
        Next
        regs_sp = .keys
    End With
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 03.10.2013 в 13:40. Причина: сам себя запутал... :) исправил пост
Hugo121 вне форума Ответить с цитированием
Старый 03.10.2013, 17:23   #14
RTFM
Пользователь
 
Регистрация: 03.10.2013
Сообщений: 22
По умолчанию

Цитата:
Сообщение от SaLoKiN Посмотреть сообщение
эт ваще не та степь =))
тут будет первый столбец уникальные значения,а второй склейка всех повторов =) в эту сторону больше не смотрим

Предлагаю все-таки вариант с двумя циклами, какие значения будет содержать ваш массив?
Текст содержит массив
RTFM вне форума Ответить с цитированием
Старый 03.10.2013, 17:45   #15
RTFM
Пользователь
 
Регистрация: 03.10.2013
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Код:
Sub tt()
    regs_sp = Array("a", "b", "a", "c")
    With CreateObject("Scripting.Dictionary")
        For i = 0 To UBound(regs_sp)
            .Item(regs_sp(i)) = 0&
        Next
        regs_sp = .keys
    End With
End Sub
Hugo121 Спасибо огромное тебе за готовый код! Все работает как надо! И SaLoKiN Спасибо, подсказал куда шагать , просто не тру кодер, всякие хитрости не знаю и функции, учусь кароче=)
RTFM вне форума Ответить с цитированием
Старый 03.10.2013, 17:50   #16
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ещё можно использовать коллекцию с ключами - но там нужно пропускать ошибки, что как-то некомильфо, и выводить собранное в массив приходится в цикле.
Но если возможно не перекладывать в массив, а использовать далее прямо эту коллекцию - то такой вариант будет даже побыстрее.

Код:
Sub tt()
    Dim col As New Collection

    regs_sp = Array("a", "b", "a", "c")
    On Error Resume Next
    For i = 0 To UBound(regs_sp)
        col.Add regs_sp(i), regs_sp(i)
    Next
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 03.10.2013 в 17:53.
Hugo121 вне форума Ответить с цитированием
Старый 03.10.2013, 18:48   #17
RTFM
Пользователь
 
Регистрация: 03.10.2013
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Ещё можно использовать коллекцию с ключами - но там нужно пропускать ошибки, что как-то некомильфо, и выводить собранное в массив приходится в цикле.
Но если возможно не перекладывать в массив, а использовать далее прямо эту коллекцию - то такой вариант будет даже побыстрее.

Код:
Sub tt()
    Dim col As New Collection

    regs_sp = Array("a", "b", "a", "c")
    On Error Resume Next
    For i = 0 To UBound(regs_sp)
        col.Add regs_sp(i), regs_sp(i)
    Next
End Sub
Есть небольшой косячок, ну как сказать косячок, недоработка, у меня одинаковые значения удаляются, а пустые ячейки остаются=) как бы их удалить с массива? =) я мож конечно и докумекаю, но за неделю, ключи ети всякие %) Иии... тут мне сказали что тут происходит работа с типом - Varian, что не особо камильфо =(

Последний раз редактировалось RTFM; 03.10.2013 в 19:03.
RTFM вне форума Ответить с цитированием
Старый 03.10.2013, 18:52   #18
RTFM
Пользователь
 
Регистрация: 03.10.2013
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Ещё можно использовать коллекцию с ключами - но там нужно пропускать ошибки, что как-то некомильфо, и выводить собранное в массив приходится в цикле.
Но если возможно не перекладывать в массив, а использовать далее прямо эту коллекцию - то такой вариант будет даже побыстрее.

Код:
Sub tt()
    Dim col As New Collection

    regs_sp = Array("a", "b", "a", "c")
    On Error Resume Next
    For i = 0 To UBound(regs_sp)
        col.Add regs_sp(i), regs_sp(i)
    Next
End Sub
как понять не перекладывать в массив? я могу в прицнипе и в другой ложить, разницы нету, в цикле все так бы и вышло, если не компоновать
RTFM вне форума Ответить с цитированием
Старый 03.10.2013, 19:31   #19
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну так в этом последнем варианте нет перегрузки из коллекции в массив.
Зачем вообще массив? Собрали коллекцию - её и пользуйте:
Код:
Sub tt()
    Dim col As New Collection, i&

    regs_sp = Array("a", "b", "a", "c")
    
    On Error Resume Next
        For i = 0 To UBound(regs_sp)
        col.Add regs_sp(i), regs_sp(i)
    Next
    On Error GoTo 0
    
    For i = 1 To col.Count
        MsgBox col(i)
    Next
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 03.10.2013, 19:59   #20
RTFM
Пользователь
 
Регистрация: 03.10.2013
Сообщений: 22
По умолчанию

А вот тут начинается некоторая запара, дело в том что не могу объявить "Dim col As New Collection", нету такого =( в списке классы софтины и формы, и при проверке ругаецо что не правильно объявлена переменная.
RTFM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление одинаковых строк из массива Алексей_2012 Общие вопросы Delphi 10 14.05.2013 09:19
Отброс одинаковых значений ZanderBlack1 Microsoft Office Excel 2 02.02.2011 20:13
Удаление одинаковых символов из массива maxflint Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 09.05.2010 13:18
Замена одинаковых значений Ярик 555 Microsoft Office Excel 6 09.02.2010 04:50
удаление одинаковых элементов из массива sauron99 Общие вопросы Delphi 6 15.04.2009 21:27