Здраствуйте эксперты Помогите пожалуйста с кодом Имеются две таблицы ода по приходу продуктов а другая по расходу Необходимо чтобы в третьей таблице производился расчет по остаткам продуктов на складах Чтобы код сам циркулировал по строкам и рассчитывал остатки
Заранее благодарю
Здраствуйте эксперты Помогите пожалуйста с кодом Имеются две таблицы ода по приходу продуктов а другая по расходу Необходимо чтобы в третьей таблице производился расчет по остаткам продуктов на складах Чтобы код сам циркулировал по строкам и рассчитывал остатки
Добрый вечер. Извините, но ваш вариант вывода остатков для реальной работы мало пригоден. Если имеется 5 позиций и 5 складов, ещё как то можно сориентироваться, а когда их будет намного больше, то работать с этим будет полная беда для оператора. Я набросал вам пример расчета остатков с распределением по продуктам и складам. Кликните на кнопочку, результат на листе Sheet2.
Добрый вечер. Извините, но ваш вариант вывода остатков для реальной работы мало пригоден. Если имеется 5 позиций и 5 складов, ещё как то можно сориентироваться, а когда их будет намного больше, то работать с этим будет полная беда для оператора. Я набросал вам пример расчета остатков с распределением по продуктам и складам. Кликните на кнопочку, результат на листе Sheet2.i691198
DAUR, использовал Вашу задачу в качестве разминки в Таблицах Google. Создал формулу для ячейки O4. После ввода ее в эту ячейку в Таблице Google в диапазоне O4:P8 возникнет ровно картина Вашего примера: [vba]
Код
Prod1 2 x WH1 Prod2 2 x WH1, 59 x WH4 Prod3 54 x WH1 Prod6 20 x WH3, 8 x WH5 Prod8 21 x WH2
[/vba] Перед ее вводом в O4 нужно очистить диапазон O4:P8, чтобы формула смогла "развернуться" в нём.
Понимаю, что всё это не совсем VBA, точнее, совсем не VBA, но, может быть, формула в целом подскажет логические шаги при решении этой задачи процедурным способом (т.е. программой на VBA). А то вдруг Вам и Гугл Таблицы понравятся и Вы захотите задержаться в них для решения своей проблемы формульным путем.
DAUR, использовал Вашу задачу в качестве разминки в Таблицах Google. Создал формулу для ячейки O4. После ввода ее в эту ячейку в Таблице Google в диапазоне O4:P8 возникнет ровно картина Вашего примера: [vba]
Код
Prod1 2 x WH1 Prod2 2 x WH1, 59 x WH4 Prod3 54 x WH1 Prod6 20 x WH3, 8 x WH5 Prod8 21 x WH2
[/vba] Перед ее вводом в O4 нужно очистить диапазон O4:P8, чтобы формула смогла "развернуться" в нём.
Понимаю, что всё это не совсем VBA, точнее, совсем не VBA, но, может быть, формула в целом подскажет логические шаги при решении этой задачи процедурным способом (т.е. программой на VBA). А то вдруг Вам и Гугл Таблицы понравятся и Вы захотите задержаться в них для решения своей проблемы формульным путем.Gustav
Sub Spr() Dim Dic As Object, arr1, arr2, arr3, y, n As Long, m As Long Set Dic = CreateObject("Scripting.Dictionary") m = 0 arr1 = ActiveSheet.ListObjects("Table1").DataBodyRange For n = 1 To UBound(arr1) If Not Dic.Exists(arr1(n, 1) & "|" & arr1(n, 4)) Then Dic.Add arr1(n, 1) & "|" & arr1(n, 4), arr1(n, 3) m = m + 1 Else Dic(arr1(n, 1) & "|" & arr1(n, 4)) = Dic(arr1(n, 1) & "|" & arr1(n, 4)) + arr1(n, 3) End If Next arr2 = ActiveSheet.ListObjects("Table2").DataBodyRange For n = 1 To UBound(arr2) If Dic.Exists(arr2(n, 1) & "|" & arr2(n, 4)) Then Dic(arr2(n, 1) & "|" & arr2(n, 4)) = Dic(arr2(n, 1) & "|" & arr2(n, 4)) - arr2(n, 3) Else Dic.Add arr2(n, 1) & "|" & arr2(n, 4), -arr2(n, 3) m = m + 1 End If Next ReDim arr3(1 To m, 1 To 3) n = 1 For Each y In Dic arr3(n, 1) = Split(y, "|")(0) arr3(n, 2) = Split(y, "|")(1) arr3(n, 3) = Dic(y) n = n + 1 Next With Sheets("Sheet2") .Cells.Clear .Range("B2").Resize(UBound(arr3), UBound(arr3, 2)) = arr3 End With End Sub
[/vba]
Вариант VBA [vba]
Код
Sub Spr() Dim Dic As Object, arr1, arr2, arr3, y, n As Long, m As Long Set Dic = CreateObject("Scripting.Dictionary") m = 0 arr1 = ActiveSheet.ListObjects("Table1").DataBodyRange For n = 1 To UBound(arr1) If Not Dic.Exists(arr1(n, 1) & "|" & arr1(n, 4)) Then Dic.Add arr1(n, 1) & "|" & arr1(n, 4), arr1(n, 3) m = m + 1 Else Dic(arr1(n, 1) & "|" & arr1(n, 4)) = Dic(arr1(n, 1) & "|" & arr1(n, 4)) + arr1(n, 3) End If Next arr2 = ActiveSheet.ListObjects("Table2").DataBodyRange For n = 1 To UBound(arr2) If Dic.Exists(arr2(n, 1) & "|" & arr2(n, 4)) Then Dic(arr2(n, 1) & "|" & arr2(n, 4)) = Dic(arr2(n, 1) & "|" & arr2(n, 4)) - arr2(n, 3) Else Dic.Add arr2(n, 1) & "|" & arr2(n, 4), -arr2(n, 3) m = m + 1 End If Next ReDim arr3(1 To m, 1 To 3) n = 1 For Each y In Dic arr3(n, 1) = Split(y, "|")(0) arr3(n, 2) = Split(y, "|")(1) arr3(n, 3) = Dic(y) n = n + 1 Next With Sheets("Sheet2") .Cells.Clear .Range("B2").Resize(UBound(arr3), UBound(arr3, 2)) = arr3 End With End Sub