0 / 0 / 0
Регистрация: 15.01.2017
Сообщений: 13
1
Excel

Добавление элементов в словарь

17.04.2018, 14:01. Показов 5462. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго всем времени суток. И снова нужна помощь мастеров в освоении VBA. есть два столбца в одном столбце название улицы в другом номер дома по этой улице. выглядит примерно так:
Ленина | 1
Ленина | 2
Ленина | 3
Комсомольска |45
Комсомольская | 98
И т.д. задача сделать сделать так: Ленина 1, 2, 3 Комсомольская 45, 98
Пытаюсь написать макрос где использую словарь. в качестве ключа использую улицу в качестве значения номер дома. Но не могу проверить ключь на совпадение и присвоить ему второе значение. Код прилагаю. Буду благодарен если кто чего подскажет. Цель сделать макрос рабочим и получить опыт в VBA. Спасибо всем за участие.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub Собрать()
  Dim dicAdres 'переменная для словоря
  Dim keyStrit As Variant 'переменная для ключа улицы
  Dim itmHouse As Variant 'переменная для номера дома
  a = ActiveSheet.UsedRange
  'b = ActiveSheet.UsedRange.Columns(1)
  Set dicAdres = CreateObject("Scripting.Dictionary")
  With Sheets("Set")
    For i = 2 To UBound(a)
      keyStrit = CStr(.Cells(i, 1).Value) 'получаем ключ с названием улицы
      itmHouse = CStr(.Cells(i, 2).Value) 'получаем значение с номером дома
      If dicAdres.Exists(keyStrit) Then 'Вот тут по идее нужно проверить словарь на наличие полученного ключа и если есть добавить туда_
      'значение с номером дома. Проблема в том что я не знабю как это описать програмно
      
    Next i
  End With
  
 
End Sub
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2018, 14:01
Ответы с готовыми решениями:

Добавление уникальных данных в словарь через запятую
Добрый день! Прошу помощи в исправлении кода - у меня чего-то не получается. Суть макроса: если в...

Добавление элементов в словарь
#!/usr/bin/env python3 s=dict(ast='kiss', ac='c++', sd='flower') s='Ass' print(s) выводит...

Добавление элементов в словарь внутри словаря
Dictionary<int,Dictionary<char,in>> dict=new Dictionary<int,Dictionary<char,int>>();...

Добавление элементов в словарь рекурсивным методом
Добрый день! Пишу словарь на основе префиксного динамического дерева) На данный момент пытаюсь...

7
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
17.04.2018, 14:27 2
Лучший ответ Сообщение было отмечено Shado-troll как решение

Решение

Shado-troll, словарь сам позаботится о том, чтобы создать элемент, если его нет:
Visual Basic
1
2
3
4
For i = 2 To UBound(a)
  keyStrit = CStr(.Cells(i, 1).Value) 'получаем ключ с названием улицы
  dicAdres(keyStrit) = dicAdres(keyStrit) & ", " & CStr(.Cells(i, 2).Value) 'добавляем значение с номером дома
Next i
Перед текстом будет разделитель, который можно убрать при выгрузке из словаря: ... = mid(dicAdres(x), 3)
Вообще, тем со словарем на форуме множество - сделайте поиск по Scripting.Dictionary и изучайте.
1
0 / 0 / 0
Регистрация: 15.01.2017
Сообщений: 13
17.04.2018, 14:34  [ТС] 3
Казанский, Да я понимаю что много, спасибо за ответ. Тут в другом проблема. В моем случае ключ(улица) хранит несколько значений(номер домов). И вот при проверке следущей строки, находя такую же улицу что уже есть в словаре он ругается. Вот и пытаюсь понять как это работает.

Добавлено через 3 минуты
Казанский, Пытаюсь освоить VBA, пол дня гугла, но на форум всеравно пришлось писать.
0
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
17.04.2018, 14:47 4
Shado-troll, приложите пример файла: что есть - как надо. Будет проще.
0
0 / 0 / 0
Регистрация: 15.01.2017
Сообщений: 13
17.04.2018, 15:22  [ТС] 5
Казанский, Сбоственно все работает, единственное что я сейчас пытаюсь освоить это вывод данного словаря или в ячейку или в диалоговое окно откуда его можно будет скопипастить
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
17.04.2018, 23:19 6
Можно выводить сразу в буфер. Правда
Цитата Сообщение от Shado-troll Посмотреть сообщение
вывод данного словаря или в ячейку или в диалоговое окно
я не представляю как можно запихнуть, и в буфер тоже. В смысле вот именно так как написано в цитате.
0
0 / 0 / 0
Регистрация: 15.01.2017
Сообщений: 13
18.04.2018, 13:56  [ТС] 7
Hugo121, Я уже решил данный вопрос.
Visual Basic
1
2
3
4
5
6
7
Z = dicAdres.Count 'Определяем количесвто шагов
Z = Z - 1
For n = 0 To Z 'циклом перебираем словаря вставляя сначала ключ затем его значения
m = dicAdres.Keys()(n)
g = dicAdres.Item(m)
Range("C2") = Range("C2") & ", " & m & " " & g
Next n
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
18.04.2018, 19:10 8
Ну если словарь небольшой, и значения в нём лежат по одному на ключ, а не многие через запятую - тогда конечно пойдёт.
А если так, как в примере Казанского, да на например даже десяток улиц - не представляю зачем эта каша? Но хозяин барин...
0
18.04.2018, 19:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2018, 19:10
Помогаю со студенческими работами здесь

Словарь в Python добавление и удаление элементов
Дан составной словарь ludi = {'Иван': {'phone': '23-44-6', 'age' : '20'}, 'Игорь':...

Добавление словаря в словарь
for block in blocks: liga = block.find('a', class_='c-events__liga').get('title') ...

Добавление элемента из 2-x списков в словарь
Способ добавления элементов - need: naprmer: a= b = ----> bac = Через...

Добавление ключа и значения в словарь
Здравствуйте, нужно добавить в словарь ключ и значение этого ключа, при этом не стирая данные...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru