Advertisement
RobertPolsen

oos

Jul 16th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.35 KB | None | 0 0
  1. Attribute VB_Name = "oos_days_count"
  2. Option Explicit
  3. Sub count_days()
  4.  
  5. Dim all_days As Integer
  6. Dim oos_days As Integer
  7. Dim rng_days As Range
  8. Dim x_day As Range
  9. Dim r As Long
  10. Dim x_offs As Long
  11. Dim str_zavod As String
  12. Dim zavod_name As String
  13. Dim pos_id As Long
  14. Dim pos_name As String
  15. Dim ozm4sum As Long
  16. Dim total_rng As Range
  17. Dim rng_search As Range
  18. '-------------------------
  19. Dim i As Variant
  20. Dim k As Variant
  21. Dim d As Integer
  22. '-------------------------
  23. Dim arrDates() As Date
  24. Dim ar_dmnsn As Integer
  25. Dim oos_start() As String
  26. Dim oos_end() As String
  27. Dim dt_split As Boolean
  28. Dim ar_data() As Variant
  29. '--------------------------
  30. Dim t As Variant
  31.  
  32. Set rng_search = oos_ws_sales.Range(oos_ws_sales.Range("A4"), oos_ws_sales.Range("A4").End(xlDown))
  33.  
  34. oos_ws_total.Range(oos_ws_total.Range("A2"), oos_ws_total.Range("A2").End(xlDown)).EntireRow.Delete
  35.  
  36. all_days = oos_ws_ost_jti.Range(oos_ws_ost_jti.Range("G2"), oos_ws_ost_jti.Range("G2").End(xlToRight)).Columns.Count
  37. r = oos_ws_ost_jti.Range(oos_ws_ost_jti.Range("D3"), oos_ws_ost_jti.Range("D3").End(xlDown)).rows.Count
  38. Set rng_days = oos_ws_ost_jti.Range(oos_ws_ost_jti.Range("G2"), oos_ws_ost_jti.Range("G2").End(xlToRight))
  39.  
  40. For x_offs = 1 To r Step 1
  41. ar_dmnsn = 0
  42. oos_days = 0
  43. Set rng_days = rng_days.Offset(1, 0)
  44.  
  45. For Each x_day In rng_days
  46. If Application.WorksheetFunction.SumIfs _
  47. (x_day.EntireColumn, _
  48. x_day.End(xlToLeft).Offset(0, 1).EntireColumn, x_day.End(xlToLeft).Offset(0, 1), _
  49. x_day.End(xlToLeft).Offset(0, 5).EntireColumn, x_day.End(xlToLeft).Offset(0, 5)) = 0 Then
  50. oos_days = oos_days + 1
  51. ReDim Preserve arrDates(1 To oos_days)
  52. arrDates(oos_days) = x_day.End(xlUp).Offset(1, 0).Value
  53. End If
  54. Next x_day
  55. '----------------------------------------------------------------------------------------------------------
  56.  
  57. If oos_days > 0 Then
  58.  
  59. ar_dmnsn = 1
  60.  
  61. For i = 1 To UBound(arrDates)
  62.  
  63. 'Первая дата обрабатывается как отдельный случай.
  64. 'Определяется начальная размерность для массивов с начальной и конечной датами.
  65.  
  66. If i = 1 Then
  67.  
  68. ReDim oos_start(1 To ar_dmnsn)
  69. ReDim oos_end(1 To ar_dmnsn)
  70.  
  71. oos_start(ar_dmnsn) = arrDates(i)
  72.  
  73. End If
  74.  
  75. 'Если между датами промежуток более 1 дня - то делим на 2 промежутка.
  76. 'Увеличивая размер массивов с начальной и конечной датами.
  77.  
  78. If dt_split Then
  79.  
  80. ReDim Preserve oos_start(1 To ar_dmnsn)
  81. oos_start(ar_dmnsn) = arrDates(i)
  82. ReDim Preserve oos_end(1 To ar_dmnsn)
  83.  
  84. dt_split = False
  85.  
  86. End If
  87.  
  88. 'Если период состоит из одной даты.
  89.  
  90. If UBound(arrDates) = 1 Then
  91. ReDim oos_end(1 To ar_dmnsn)
  92. oos_end(ar_dmnsn) = arrDates(i) + 1
  93. End If
  94.  
  95. 'Последняя дата в периоде.
  96.  
  97. If i = UBound(arrDates) Then
  98. ReDim Preserve oos_end(1 To ar_dmnsn)
  99. oos_end(ar_dmnsn) = arrDates(i) + 1
  100. Exit For
  101. End If
  102.  
  103. 'Сравниваем даты, если они не являются соседними, то увеличиваем переменную отвечающую за размер массивов с датами.
  104. 'И ставим метку для разделение периода в следующей итерации цикла.
  105.  
  106. If arrDates(i) + 1 = arrDates(i + 1) Then
  107.  
  108. oos_end(ar_dmnsn) = arrDates(i + 1)
  109.  
  110. Else
  111.  
  112. oos_end(ar_dmnsn) = arrDates(i)
  113. ar_dmnsn = ar_dmnsn + 1
  114. dt_split = True
  115.  
  116. End If
  117.  
  118. Next i
  119.  
  120. End If
  121.  
  122. If ar_dmnsn > 0 Then
  123.  
  124. For k = 1 To ar_dmnsn
  125.  
  126. If oos_days > 0 Then
  127. str_zavod = rng_days.End(xlToLeft).Offset(0, 1).Value
  128. zavod_name = rng_days.End(xlToLeft).Offset(0, 2).Value
  129. pos_id = rng_days.End(xlToLeft).Offset(0, 3).Value
  130. pos_name = rng_days.End(xlToLeft).Offset(0, 4).Value
  131. ozm4sum = rng_days.End(xlToLeft).Offset(0, 5).Value
  132.  
  133. If is_exception(pos_id) Then
  134. GoTo skip
  135. End If
  136. Set total_rng = oos_ws_total.Cells(oos_ws_total.Cells.rows.Count, 1).End(xlUp).Offset(1, 0) 'Первая пустая ячейка
  137. total_rng.Value = str_zavod 'Проставляем номер завода
  138. total_rng.Offset(0, 1).Value = zavod_name
  139. total_rng.Offset(0, 2).Value = pos_id 'МАТЕРИАЛ
  140. total_rng.Offset(0, 3).Value = pos_name 'Pos Name
  141.  
  142. total_rng.Offset(0, 4).Value = DateDiff("d", oos_start(k), oos_end(k)) 'days with OOS
  143. total_rng.Offset(0, 5).Value = double_vpr(str_zavod, 2, pos_id, rng_search, 8) 'Sales p\day
  144. total_rng.Offset(0, 6).Value = total_rng.Offset(0, 4).Value * total_rng.Offset(0, 5).Value 'OOS boxes
  145. total_rng.Offset(0, 7).Value = Application.WorksheetFunction.SumIfs _
  146. (oos_ws_plan.Cells.Find("KOL_VO_KOROBOV").EntireColumn, _
  147. oos_ws_plan.Cells.Find("MATERIAL_ID").EntireColumn, ozm4sum, _
  148. oos_ws_plan.Cells.Find("ZAVOD_ID").EntireColumn, str_zavod) 'Plan
  149. total_rng.Offset(0, 8).Value = Application.WorksheetFunction.SumIfs _
  150. (oos_ws_cursales.Cells.Find("Объем продаж").EntireColumn, _
  151. oos_ws_cursales.Cells.Find("Завод").EntireColumn, str_zavod, _
  152. oos_ws_cursales.Cells.Find("ОЗМ для суммирования").EntireColumn, ozm4sum) 'Current Sales
  153. total_rng.Offset(0, 9).Value = oos_start(k) 'Start Date
  154. total_rng.Offset(0, 10).Value = oos_end(k) 'End Date
  155.  
  156. End If
  157.  
  158. Next k
  159. End If
  160. skip:
  161. Next x_offs
  162.  
  163. End Sub
  164.  
  165. Attribute VB_Name = "oos_days_count_array"
  166. Option Explicit
  167. Sub count_days_array()
  168.  
  169. Dim all_days As Integer
  170. Dim oos_days As Integer
  171. Dim rng_days As Range
  172. Dim x_day As Range
  173. Dim r As Long
  174. Dim x_offs As Long
  175. '-------------------------------------
  176. Dim zavod_id As New Collection
  177. Dim zavod_name As New Collection
  178. Dim pos_id As New Collection
  179. Dim pos_name As New Collection
  180. Dim oosd As New Collection
  181. Dim slday As New Collection
  182. Dim oosbox As New Collection
  183. Dim plan As New Collection
  184. Dim slcur As New Collection
  185. Dim stdate As New Collection
  186. Dim enddate As New Collection
  187. '---------------------------------------
  188. Dim ozm4sum As Long
  189. Dim total_rng As Range
  190. Dim rng_search As Range
  191. '-------------------------
  192. Dim i As Variant
  193. Dim k As Variant
  194. Dim d As Integer
  195. '-------------------------
  196. Dim arrDates() As Date
  197. Dim ar_dmnsn As Integer
  198. Dim oos_start() As String
  199. Dim oos_end() As String
  200. Dim dt_split As Boolean
  201. Dim ar_data() As Variant
  202. '--------------------------
  203. Dim t As Variant
  204. 'Определяем коллекции
  205. '------------------------------------------
  206.  
  207. Call AccelerateExcel(True)
  208.  
  209. On Error GoTo fin
  210.  
  211. zavod_id.Add "Завод"
  212. zavod_name.Add "Завод Имя"
  213. pos_id.Add "Материал"
  214. pos_name.Add "Наименование"
  215. oosd.Add "Дней ООС"
  216. slday.Add "Продаж в день"
  217. oosbox.Add "ООС (КОР)"
  218. plan.Add "План"
  219. slcur.Add "Продажи"
  220. stdate.Add "Дата нач"
  221. enddate.Add "Дата оконч"
  222.  
  223. '------------------------------------------
  224.  
  225. Set rng_search = oos_ws_sales.Range(oos_ws_sales.Range("A4"), oos_ws_sales.Range("A4").End(xlDown))
  226.  
  227. oos_ws_total.Range(oos_ws_total.Range("A2"), oos_ws_total.Range("A2").End(xlDown)).EntireRow.Delete
  228.  
  229. all_days = oos_ws_ost_jti.Range(oos_ws_ost_jti.Range("G2"), oos_ws_ost_jti.Range("G2").End(xlToRight)).Columns.Count
  230. r = oos_ws_ost_jti.Range(oos_ws_ost_jti.Range("D3"), oos_ws_ost_jti.Range("D3").End(xlDown)).rows.Count
  231. Set rng_days = oos_ws_ost_jti.Range(oos_ws_ost_jti.Range("G2"), oos_ws_ost_jti.Range("G2").End(xlToRight))
  232.  
  233. For x_offs = 1 To r Step 1
  234. ar_dmnsn = 0
  235. oos_days = 0
  236. Set rng_days = rng_days.Offset(1, 0)
  237.  
  238. For Each x_day In rng_days
  239. If Application.WorksheetFunction.SumIfs _
  240. (x_day.EntireColumn, _
  241. x_day.End(xlToLeft).Offset(0, 1).EntireColumn, x_day.End(xlToLeft).Offset(0, 1), _
  242. x_day.End(xlToLeft).Offset(0, 5).EntireColumn, x_day.End(xlToLeft).Offset(0, 5)) = 0 Then
  243. oos_days = oos_days + 1
  244. ReDim Preserve arrDates(1 To oos_days)
  245. arrDates(oos_days) = x_day.End(xlUp).Offset(1, 0).Value
  246. End If
  247. Next x_day
  248. '----------------------------------------------------------------------------------------------------------
  249.  
  250. If oos_days > 0 Then
  251.  
  252. ar_dmnsn = 1
  253.  
  254. For i = 1 To UBound(arrDates)
  255.  
  256. 'Первая дата обрабатывается как отдельный случай.
  257. 'Определяется начальная размерность для массивов с начальной и конечной датами.
  258.  
  259. If i = 1 Then
  260.  
  261. ReDim oos_start(1 To ar_dmnsn)
  262. ReDim oos_end(1 To ar_dmnsn)
  263.  
  264. oos_start(ar_dmnsn) = arrDates(i)
  265.  
  266. End If
  267.  
  268. 'Если между датами промежуток более 1 дня - то делим на 2 промежутка.
  269. 'Увеличивая размер массивов с начальной и конечной датами.
  270.  
  271. If dt_split Then
  272.  
  273. ReDim Preserve oos_start(1 To ar_dmnsn)
  274. oos_start(ar_dmnsn) = arrDates(i)
  275. ReDim Preserve oos_end(1 To ar_dmnsn)
  276.  
  277. dt_split = False
  278.  
  279. End If
  280.  
  281. 'Если период состоит из одной даты.
  282.  
  283. If UBound(arrDates) = 1 Then
  284. ReDim oos_end(1 To ar_dmnsn)
  285. oos_end(ar_dmnsn) = arrDates(i) + 1
  286. End If
  287.  
  288. 'Последняя дата в периоде.
  289.  
  290. If i = UBound(arrDates) Then
  291. ReDim Preserve oos_end(1 To ar_dmnsn)
  292. oos_end(ar_dmnsn) = arrDates(i) + 1
  293. Exit For
  294. End If
  295.  
  296. 'Сравниваем даты, если они не являются соседними, то увеличиваем переменную отвечающую за размер массивов с датами.
  297. 'И ставим метку для разделение периода в следующей итерации цикла.
  298.  
  299. If arrDates(i) + 1 = arrDates(i + 1) Then
  300.  
  301. oos_end(ar_dmnsn) = arrDates(i + 1)
  302.  
  303. Else
  304.  
  305. oos_end(ar_dmnsn) = arrDates(i)
  306. ar_dmnsn = ar_dmnsn + 1
  307. dt_split = True
  308.  
  309. End If
  310.  
  311. Next i
  312.  
  313. End If
  314.  
  315. If ar_dmnsn > 0 Then
  316.  
  317. For k = 1 To ar_dmnsn
  318.  
  319. If oos_days > 0 Then
  320.  
  321. zavod_id.Add rng_days.End(xlToLeft).Offset(0, 1).Value
  322. zavod_name.Add rng_days.End(xlToLeft).Offset(0, 2).Value
  323. pos_id.Add rng_days.End(xlToLeft).Offset(0, 3).Value
  324. pos_name.Add rng_days.End(xlToLeft).Offset(0, 4).Value
  325.  
  326. ozm4sum = rng_days.End(xlToLeft).Offset(0, 5).Value
  327.  
  328. oosd.Add DateDiff("d", oos_start(k), oos_end(k))
  329. 'days with OOS
  330. slday.Add double_vpr(zavod_id(zavod_id.Count), 2, pos_id(pos_id.Count), rng_search, 8)
  331. 'Sales p\day
  332. oosbox.Add slday(slday.Count) * oosd(oosd.Count)
  333. 'OOS boxes
  334. plan.Add Application.WorksheetFunction.SumIfs _
  335. (oos_ws_plan.Cells.Find("KOL_VO_KOROBOV").EntireColumn, _
  336. oos_ws_plan.Cells.Find("MATERIAL_ID").EntireColumn, ozm4sum, _
  337. oos_ws_plan.Cells.Find("ZAVOD_ID").EntireColumn, zavod_id(zavod_id.Count))
  338. 'Plan
  339. slcur.Add Application.WorksheetFunction.SumIfs _
  340. (oos_ws_cursales.Cells.Find("Объем продаж").EntireColumn, _
  341. oos_ws_cursales.Cells.Find("Завод").EntireColumn, zavod_id(zavod_id.Count), _
  342. oos_ws_cursales.Cells.Find("ОЗМ для суммирования").EntireColumn, ozm4sum)
  343. 'Current Sales
  344. stdate.Add oos_start(k)
  345. 'Start Date
  346. enddate.Add oos_end(k)
  347. 'End Date
  348.  
  349. End If
  350.  
  351. Next k
  352. End If
  353. skip:
  354. Next x_offs
  355.  
  356.  
  357. For d = 1 To zavod_id.Count
  358. oos_ws_total.Cells(d, 1).Value = zavod_id(d)
  359. oos_ws_total.Cells(d, 2).Value = zavod_name(d)
  360. oos_ws_total.Cells(d, 3).Value = pos_id(d)
  361. oos_ws_total.Cells(d, 4).Value = pos_name(d)
  362. oos_ws_total.Cells(d, 5).Value = oosd(d)
  363. oos_ws_total.Cells(d, 6).Value = slday(d)
  364. oos_ws_total.Cells(d, 7).Value = oosbox(d)
  365. oos_ws_total.Cells(d, 8).Value = plan(d)
  366. oos_ws_total.Cells(d, 9).Value = slcur(d)
  367. oos_ws_total.Cells(d, 10).Value = stdate(d)
  368. oos_ws_total.Cells(d, 11).Value = enddate(d)
  369. Next d
  370.  
  371. fin:
  372.  
  373. Call AccelerateExcel(False)
  374.  
  375. End Sub
  376.  
  377. Sub ar_tst()
  378. Dim test_ar()
  379. Dim wer As Collection
  380. test_ar = oos_ws_total.Range("A1").CurrentRegion
  381. Debug.Print 1
  382. oos_ws_total.Range("A7:K12") = test_ar()
  383.  
  384. End Sub
  385.  
  386. Attribute VB_Name = "oos_functns"
  387. Option Explicit
  388. Function file_picker()
  389.  
  390. Dim strN As String
  391. Dim fd As FileDialog
  392.  
  393. Set fd = Application.FileDialog(msoFileDialogFilePicker)
  394.  
  395. fd.AllowMultiSelect = False
  396. fd.Filters.Clear
  397. fd.Filters.Add "Файлы Excel", "*.xlsx;*.xls;*.xlsm"
  398. fd.InitialFileName = ThisWorkbook.Path
  399.  
  400. fd.Show
  401.  
  402. If fd.SelectedItems.Count = 0 Then
  403. Exit Function
  404. End If
  405.  
  406. strN = fd.SelectedItems(1)
  407.  
  408. file_picker = strN
  409.  
  410. End Function
  411. Function double_vpr(x As String, x_ofs As Integer, x_2 As Variant, rng_where As Range, answer_ofs As Integer)
  412.  
  413. Dim single_range As Range
  414. Dim answer As Variant
  415.  
  416. answer = 0
  417.  
  418. For Each single_range In rng_where
  419.  
  420. If single_range.Value = x And single_range.Offset(0, x_ofs).Value = x_2 Then
  421. answer = single_range.Offset(0, answer_ofs).Value
  422. If answer <> 0 Then
  423. Exit For
  424. End If
  425. End If
  426.  
  427. Next single_range
  428.  
  429. double_vpr = answer
  430.  
  431. End Function
  432. Function is_exception(nom_sort As Variant) As Boolean
  433.  
  434. Dim exception_rng As Range
  435. Dim excep1 As Range
  436. Dim ex_answer As Boolean
  437.  
  438. Set exception_rng = oos_ws_exception.Range(oos_ws_exception.Range("A2"), oos_ws_exception.Range("A2").End(xlDown))
  439. ex_answer = False
  440.  
  441. For Each excep1 In exception_rng
  442. If excep1.Value = nom_sort Then
  443. ex_answer = True
  444. Exit For
  445. End If
  446. Next excep1
  447.  
  448. is_exception = ex_answer
  449.  
  450. End Function
  451. Function split_periods(dts() As Date)
  452.  
  453. Dim ar_dmnsn As Integer
  454. Dim dt_split As Boolean
  455. Dim i As Integer
  456.  
  457. If oos_days > 0 Then
  458.  
  459. ar_dmnsn = 1
  460.  
  461. For i = 1 To UBound(arrDates)
  462.  
  463. 'Первая дата обрабатывается как отдельный случай.
  464. 'Определяется начальная размерность для массивов с начальной и конечной датами.
  465.  
  466. If i = 1 Then
  467.  
  468. ReDim oos_start(1 To ar_dmnsn)
  469. ReDim oos_end(1 To ar_dmnsn)
  470.  
  471. oos_start(ar_dmnsn) = arrDates(i)
  472.  
  473. End If
  474.  
  475. 'Если между датами промежуток более 1 дня - то делим на 2 промежутка.
  476. 'Увеличивая размер массивов с начальной и конечной датами.
  477.  
  478. If dt_split Then
  479.  
  480. ReDim Preserve oos_start(1 To ar_dmnsn)
  481. oos_start(ar_dmnsn) = arrDates(i)
  482. ReDim Preserve oos_end(1 To ar_dmnsn)
  483.  
  484. dt_split = False
  485.  
  486. End If
  487.  
  488. 'Если период состоит из одной даты.
  489.  
  490. If UBound(arrDates) = 1 Then
  491. ReDim oos_end(1 To ar_dmnsn)
  492. oos_end(ar_dmnsn) = arrDates(i) + 1
  493. End If
  494.  
  495. 'Последняя дата в периоде.
  496.  
  497. If i = UBound(arrDates) Then
  498. ReDim Preserve oos_end(1 To ar_dmnsn)
  499. oos_end(ar_dmnsn) = arrDates(i) + 1
  500. Exit For
  501. End If
  502.  
  503. 'Сравниваем даты, если они не являются соседними, то увеличиваем переменную отвечающую за размер массивов с датами.
  504. 'И ставим метку для разделение периода в следующей итерации цикла.
  505.  
  506. If arrDates(i) + 1 = arrDates(i + 1) Then
  507.  
  508. oos_end(ar_dmnsn) = arrDates(i + 1)
  509.  
  510. Else
  511.  
  512. oos_end(ar_dmnsn) = arrDates(i)
  513. ar_dmnsn = ar_dmnsn + 1
  514. dt_split = True
  515.  
  516. End If
  517.  
  518. Next
  519.  
  520. End If
  521.  
  522. End Function
  523. Sub AccelerateExcel(status As Boolean)
  524.  
  525. Select Case status
  526. Case True
  527. Application.ScreenUpdating = False
  528. Application.EnableEvents = False
  529. Application.DisplayStatusBar = False
  530. Application.DisplayAlerts = False
  531. Application.Calculation = xlCalculationManual
  532. Case False
  533. Application.Calculation = xlCalculationAutomatic
  534. Application.EnableEvents = True
  535. Application.DisplayStatusBar = True
  536. Application.DisplayAlerts = True
  537. Application.ScreenUpdating = True
  538.  
  539. Case Else
  540. Exit Sub
  541. End Select
  542.  
  543. End Sub
  544.  
  545. Sub disp_status()
  546.  
  547. Application.DisplayStatusBar = True
  548. End Sub
  549.  
  550. Attribute VB_Name = "oos_risk"
  551. Option Explicit
  552. Sub count_oos_risks()
  553.  
  554. Dim all_days As Integer
  555. Dim rng_days As Range
  556. Dim x_day As Range
  557. Dim r As Long
  558. Dim x_offs As Long
  559. Dim str_zavod As String
  560. Dim pos_id As Variant
  561. Dim d_sales As Integer
  562. Dim rng_search As Range
  563. '--------------------------
  564. Dim risk_date As Date
  565. Dim risks_rng As Range
  566. Dim risk_stock As Integer
  567. '--------------------------
  568. Dim rng_sum As Range
  569. Dim rng_crit1 As Range
  570. Dim rng_crit2 As Range
  571.  
  572. 'Application.ScreenUpdating = False
  573.  
  574. ' Set rng_search = oos_ws_sales.Range(oos_ws_sales.Range("A4"), oos_ws_sales.Range("A4").End(xlDown))
  575.  
  576. Set rng_sum = oos_ws_sales.Range(oos_ws_sales.Range("G4"), oos_ws_sales.Range("G4").End(xlDown))
  577. Set rng_crit1 = oos_ws_sales.Range(oos_ws_sales.Range("A4"), oos_ws_sales.Range("A4").End(xlDown))
  578. Set rng_crit2 = oos_ws_sales.Range(oos_ws_sales.Range("C4"), oos_ws_sales.Range("C4").End(xlDown))
  579.  
  580. oos_ws_risks.Range(oos_ws_risks.Range("A2"), oos_ws_risks.Range("A2").End(xlDown)).EntireRow.Delete
  581.  
  582. all_days = oos_ws_ost_jti.Range(oos_ws_ost_jti.Range("E2"), oos_ws_ost_jti.Range("E2").End(xlToRight)).Columns.Count
  583. r = oos_ws_ost_jti.Range(oos_ws_ost_jti.Range("D3"), oos_ws_ost_jti.Range("D3").End(xlDown)).rows.Count
  584. Set rng_days = oos_ws_ost_jti.Range(oos_ws_ost_jti.Range("E2"), oos_ws_ost_jti.Range("E2").End(xlToRight))
  585.  
  586. For x_offs = 1 To r Step 1
  587.  
  588. Set rng_days = rng_days.Offset(1, 0)
  589.  
  590. str_zavod = rng_days.End(xlToLeft).Offset(0, 1).Value
  591. pos_id = rng_days.End(xlToLeft).Offset(0, 3).Value
  592. risk_date = rng_days.End(xlUp).Offset(1, 0).Value
  593. d_sales = Application.WorksheetFunction.SumIfs(rng_sum, rng_crit1, str_zavod, rng_crit2, pos_id)
  594.  
  595. For Each x_day In rng_days
  596. If d_sales = 0 Then
  597. GoTo skip
  598. End If
  599. risk_stock = x_day.Value / d_sales
  600.  
  601. If risk_stock < 3 And risk_stock > 0 Then
  602. If is_exception(pos_id) Then
  603. GoTo skip
  604. End If
  605.  
  606. risk_date = x_day.End(xlUp).Offset(1, 0).Value
  607. Set risks_rng = oos_ws_risks.Cells(oos_ws_risks.Cells.rows.Count, 1).End(xlUp).Offset(1, 0)
  608. risks_rng.Value = str_zavod
  609. risks_rng.Offset(0, 1).Value = risk_date
  610. risks_rng.Offset(0, 2).Value = pos_id
  611. risks_rng.Offset(0, 3).FormulaR1C1 = "=VLOOKUP(RC[-1],jti_brands,2,0)"
  612. risks_rng.Offset(0, 4).FormulaR1C1 = risk_stock
  613.  
  614. End If
  615. Next x_day
  616.  
  617. skip:
  618. Next x_offs
  619.  
  620.  
  621.  
  622. 'Application.ScreenUpdating = True
  623.  
  624. End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement