Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 26.09.2016
Сообщений: 164

Добавление уникальных данных в словарь через запятую

17.09.2019, 13:11. Показов 1121. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Прошу помощи в исправлении кода - у меня чего-то не получается.
Суть макроса: если в ячейках первого столбика одинаковые номера, то значения из второго столбика добавляются в словарь через запятую. Эта часть у меня работает. Но надо чтобы данные добавлялись уникальные - т.е. если такое же название добавлялось ранее, то ничего добавлять больше не нужно.
Вот код, который есть на данный момент:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dim dicDom 'ïåðåìåííàÿ ñëîâàðÿ
Dim keyNum As Variant 'ïåðåìåííàÿ äëÿ äîãîâîðà
Dim a(), i&
  Set dicDom = CreateObject("Scripting.Dictionary")
  a = ActiveSheet.UsedRange.Value
  For i = 1 To UBound(a)
      keyNum = CStr(a(i, 1)) 'ïîëó÷àåì êëþ÷
      If Not keyNum Like dicDom(keyNum) Then
      dicDom(keyNum) = dicDom(keyNum) & ", " & a(i, 2) 'äîáàâëÿåì çíà÷åíèå ýëåìåíòà
      End If
  Next i
  ReDim b$(1 To UBound(a), 1 To 1)
  For i = 1 To UBound(a) 'âûãðóæàåì ýëåìåíòû èç ñëîâàðÿ ïî óñëîâèþ
    b(i, 1) = Mid$(dicDom(CStr(a(i, 1))), 2)
  Next i
  Range("C1").Resize(UBound(b)).Value = b
Пыталась добавить сравнение обрабатываемой ячейки с тем, что уже находится в словаре(через Like и InStr), но как-то не получается.
Вложения
Тип файла: zip primer_170919_111.zip (14.5 Кб, 4 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.09.2019, 13:11
Ответы с готовыми решениями:

Добавление чисел в Static Text через запятую
Здравтсвуйте! Имеется цикл, внутри него проверяется условие, если условие выполнено, то в static text нужно добавить число, отделив его...

Обобщение данных через запятую
Добрый день. Подскажите, как решить данную задачу. Есть таблица из двух колонок, первая колонка - "кадастровый номер" (могут...

Запись данных через запятую
Всем привет! Ребята подскажите в таком вопросе... В общем суть: я получаю данные со сканера штрихкодов, записываю их в textfield. И...

4
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
17.09.2019, 13:40
Возможно так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub В_одну_ячейку()
Dim dicDom 'переменная словаря
Dim keyNum As Variant 'переменная для договора
Dim a(), i&
  Set dicDom = CreateObject("Scripting.Dictionary")
  a = ActiveSheet.UsedRange.Value
  For i = 1 To UBound(a)
      keyNum = CStr(a(i, 1)) 'получаем ключ
      If InStr(1, dicDom(keyNum), a(i, 2)) = 0 Then dicDom(keyNum) = dicDom(keyNum) & ", " & a(i, 2)   'добавляем значение элемента
  Next i
  ReDim b$(1 To UBound(a), 1 To 1)
  For i = 1 To UBound(a) 'выгружаем элементы из словаря по условию
    b(i, 1) = Mid$(dicDom(CStr(a(i, 1))), 2)
  Next i
  Range("C1").Resize(UBound(b)).Value = b
End Sub
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
17.09.2019, 13:40
Добавляйте в словарь не строку, а коллекцию. А уже в неё свои значения, с ключём если нужно убить дубли.
Ну и затем в финале можно уже переложить из коллекции в строку хоть через запятую.
0
0 / 0 / 0
Регистрация: 26.09.2016
Сообщений: 164
17.09.2019, 14:25  [ТС]
toiai, спасибо, заработало.

Hugo121, не совсем поняла как это будет работать.
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
17.09.2019, 14:47
По наличию в строке проверять значение можно, но смотря какие значения. Например номера кредитных карт можно, или какие-то длинные персональные коды... Файл не смотрел, может там и сработает без сбоев.
А как будет работать "коллекция в словаре" - я тут где-то на форуме показывал, можно поискать.

Добавлено через 7 минут
Если проверять на наличие в строке - как минимум стОит проверять с учётом разделителя.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.09.2019, 14:47
Помогаю со студенческими работами здесь

Составить словарь уникальных элементов
Дан текст не более 255 символов. Составитьс ловарь уникальных элементов.

Ввод данных через запятую, заполнение массива
Сколько ищу, никак не могу найти. Как можно сделать так, чтобы при вводе чисел в консоль (!через запятую!) заполнялся массив из 8 значений...

Определить количество уникальных слов и создать словарь
Дана длинная строка. Без знаков препинания, слова разделяются пробелами. Определить количество уникальных слов и создать словарь, где...

Контроль вводимых с клавиатуры данных, через точку/запятую
При ошибочном вводе вещественных чисел через запятую, вместо точки, оператор read записывает в переменную число с отбросом дробной части....

PHP и БД. Отправка данных из checkbox в бд (желательно через запятую)
Подскажите, где ошибка, пожалуйста.. . Данные вообще не заносятся в бд из checkbox. И как сделать , чтобы через запятую заносились в бд? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru