Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Обработка через массив, словари и вывод на листы - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обработка через массив, словари и вывод на листы (Макросы/Sub)
Обработка через массив, словари и вывод на листы
Raven2009 Дата: Воскресенье, 19.04.2020, 12:00 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 151
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
В процессе изучения массивов в VBA у меня возникли сложности. Вопрос в следующем:

На первом листе есть исходная таблица и 2 сводные таблицы как примеры того, что должно быть выведено на листы Вывод1 и Вывод2.

Я написал код, используя полученные знания с форумов, но 100% процентов допустил ошибки,т.к. при запуске на листе Вывод1 неверно считаются кол-ва коробов, а на листе Вывод2 кол-во штук в 2 раза больше, чем должно быть…

Подскажите пожалуйста, что поправить в коде нужно? Заранее спасибо!)
К сообщению приложен файл: test1.rar (296.1 Kb)


Сообщение отредактировал Raven2009 - Воскресенье, 19.04.2020, 12:00
 
Ответить
СообщениеВ процессе изучения массивов в VBA у меня возникли сложности. Вопрос в следующем:

На первом листе есть исходная таблица и 2 сводные таблицы как примеры того, что должно быть выведено на листы Вывод1 и Вывод2.

Я написал код, используя полученные знания с форумов, но 100% процентов допустил ошибки,т.к. при запуске на листе Вывод1 неверно считаются кол-ва коробов, а на листе Вывод2 кол-во штук в 2 раза больше, чем должно быть…

Подскажите пожалуйста, что поправить в коде нужно? Заранее спасибо!)

Автор - Raven2009
Дата добавления - 19.04.2020 в 12:00
nilem Дата: Воскресенье, 19.04.2020, 15:28 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Raven2009, привет
попробуйте как-то так:


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеRaven2009, привет
попробуйте как-то так:

Автор - nilem
Дата добавления - 19.04.2020 в 15:28
Raven2009 Дата: Воскресенье, 19.04.2020, 15:54 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 151
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Спасибо вам большое, попробую)

Мне для понимания, это ведь означает, что первый индекс не будет нулевым, верно? (если верно выразился...)



.CompareMode = 1


Сообщение отредактировал Raven2009 - Воскресенье, 19.04.2020, 15:55
 
Ответить
СообщениеСпасибо вам большое, попробую)

Мне для понимания, это ведь означает, что первый индекс не будет нулевым, верно? (если верно выразился...)



.CompareMode = 1

Автор - Raven2009
Дата добавления - 19.04.2020 в 15:54
Raven2009 Дата: Воскресенье, 19.04.2020, 15:58 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 151
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Можно еще узнать, что делает этот цикл?) (для повышения образованности...)

For r = 1 To k1
    m = Split(res(r, 4), "~")
    If Not IsArray(m) Then res(r, 4) = 1 Else res(r, 4) = UBound(m) + 1
Next r
 
Ответить
СообщениеМожно еще узнать, что делает этот цикл?) (для повышения образованности...)

For r = 1 To k1
    m = Split(res(r, 4), "~")
    If Not IsArray(m) Then res(r, 4) = 1 Else res(r, 4) = UBound(m) + 1
Next r

Автор - Raven2009
Дата добавления - 19.04.2020 в 15:58
nilem Дата: Воскресенье, 19.04.2020, 18:54 | Сообщение № 5
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
что первый индекс не будет нулевым

Нет. .CompareMode = 1 - значит словарь будет сравнивать значения, как строки (текст).
что делает этот цикл?

[vba]
Код
If InStr(res(rw, 4), m(r, 1)) = 0 Then res(rw, 4) = res(rw, 4) & "~" & m(r, 1)    'box
[/vba]
В массив res в 4-ю колонку собираются уникальные номера коробок. Собираются в строку через "~".
В цикле разбиваем этот элемент массива res(r, 4) по тильде, получаем массив m: m = Split(res(r, 4), "~")
Сколько элементов в этом массиве m, столько и коробок.


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
что первый индекс не будет нулевым

Нет. .CompareMode = 1 - значит словарь будет сравнивать значения, как строки (текст).
что делает этот цикл?

[vba]
Код
If InStr(res(rw, 4), m(r, 1)) = 0 Then res(rw, 4) = res(rw, 4) & "~" & m(r, 1)    'box
[/vba]
В массив res в 4-ю колонку собираются уникальные номера коробок. Собираются в строку через "~".
В цикле разбиваем этот элемент массива res(r, 4) по тильде, получаем массив m: m = Split(res(r, 4), "~")
Сколько элементов в этом массиве m, столько и коробок.

Автор - nilem
Дата добавления - 19.04.2020 в 18:54
Raven2009 Дата: Понедельник, 20.04.2020, 07:43 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 151
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Большое спасибо) Очень интересно получилось) беру в работу
 
Ответить
СообщениеБольшое спасибо) Очень интересно получилось) беру в работу

Автор - Raven2009
Дата добавления - 20.04.2020 в 07:43
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обработка через массив, словари и вывод на листы (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!