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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2022, 15:25   #1
andreysuperman42
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 43
Восклицание Создание отчета с помощью словаря

Добрый день.
Создаю отчет по разным товарам с разными ценами. Надо вычислить остаток товаров и разнести остаток в столбец. Создал отчет с помощью массива на VBA, но скорость не устраивает, так как идет обращение к ячейкам EXCEL.
Может кто подскажет, как сделать обработку без обращения к ячейкам EXCEL, чтобы потом выгрузить в виде массива на лист?
Вложения
Тип файла: xls Проба1.xls (46.0 Кб, 7 просмотров)
andreysuperman42 вне форума Ответить с цитированием
Старый 26.01.2022, 17:35   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub CheckStokSum()
  Dim a, b, c, d, k, r&, tm
  tm = Timer
  Set d = CreateObject("Scripting.Dictionary"): a = [a1].CurrentRegion
  For r = 2 To UBound(a)
    If d.Exists(a(r, 4)) Then b = d(a(r, 4)) Else ReDim b(0 To 2)
    If a(r, 7) = "ÑêëÎáù" Then b(0) = r: b(1) = a(r, 5) Else b(2) = b(2) + a(r, 5)
    d(a(r, 4)) = b
  Next
  k = d.Keys: ReDim c(1 To UBound(a), 1 To 1): c(1, 1) = a(1, 8)
  For r = 0 To UBound(k)
    b = d(k(r))
    If b(0) > 0 Then
      c(b(0), 1) = b(1) - b(2): If c(b(0), 1) = 0 Then c(b(0), 1) = "Ok"
    End If
  Next
  Cells(1, 10).Resize(UBound(c), 1) = c: MsgBox Timer - tm & " ctr"
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 26.01.2022, 20:07   #3
andreysuperman42
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 43
По умолчанию Две ошибки

До конца в алгоритме не разобрался, но пока видны 2 ошибки.
Изображения
Тип файла: jpg 2022-01-26_20-00-12.jpg (118.2 Кб, 4 просмотров)
andreysuperman42 вне форума Ответить с цитированием
Старый 26.01.2022, 20:29   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

да, в данных ошибка Товар 2 на общем складе 2 раза один раз 10, второй 4
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 26.01.2022, 20:49   #5
andreysuperman42
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 43
По умолчанию

Наименования товаров могут повторятся.
Первым пунктом было:
1. Ищем совпадения по товару и цене

Если товар и цена совпадают, могут даты приходов отличатся.
Перед созданием отчета производится сортировка сначала по дате, потом по цене, потом по наименованию.
andreysuperman42 вне форума Ответить с цитированием
Старый 26.01.2022, 21:09   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

значит я не понял вашего первого пункта (и все еще не понимаю) и мне от этого ни холодно, ни жарко
а у вас решения как не было так и нет (потому что облом обьяснить нюансы задачи)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 26.01.2022, 21:27   #7
andreysuperman42
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 43
По умолчанию

У вас в коде наименования товаров являются ключами.
Было бы логичным сделать ключом товар и цену, тогда бы искало совпадения товара вместе с ценой.
andreysuperman42 вне форума Ответить с цитированием
Старый 26.01.2022, 21:53   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

для меня это очередная абстракная задача, которую я как понял так и решил
для вас возможно задача вполне реальная, поэтому вам предстоит или обьяснить кому-то коротко и понятно как решать эту задачу или ничего ни кому не обьяснять, а решать все самостоятельно
с каждым постом, который никак не приближает меня к пониманию задачи эта задача становится для меня все менее и менее интересной (на самом деле она мне уже не интересна)
удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 26.01.2022, 22:02   #9
andreysuperman42
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 43
По умолчанию

Ок, спасибо. Дальше буду сам разбираться.
andreysuperman42 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование данных из одной книги в другу с помощью словаря Gulnara20 Microsoft Office Excel 20 05.04.2017 23:20
создание словаря ламхакер Паскаль, Turbo Pascal, PascalABC.NET 3 14.11.2013 19:56
Создание словаря KASPEER HTML и CSS 1 05.04.2011 00:48
Создание словаря tmp_user Помощь студентам 5 24.11.2007 18:30