Background:

公司的经营是不断变化的,通常我们在月初会收到一份FC,但是在这之后,FC会不停的变化:增加,取消,减少数量,所以系统之外的Forecast也需要快速更新。

Logic:

1,BOM需要使用包含全部设备的BOM,使用单层BOM,如何获得单层BOM,请参考之前的思路的代码(有时间我会把数组和字典版本的也更新一下)。

2,增加:我们把BOM对应的数量,每个月份和数量都存放在一个二维数组中

>如果是已有的Item,那么就累加到“物料FC”中

>如果是没有的Item,那么就新增“物料FC”的最后

3,取消/减少数量:我们使用负数来表示删除或者取消,直接在FG的时候就区分出来,然后在“物料FC"中逐行读取,找到之后,也是用累加负数方式更新”物料FC“

测试:

1,我们先挑选两个SKU,在7月和8月的时候各增加50台,把FC这个Sheet的标题,直接Copy到Update sheet(每次更新在这个表格中填写),这里不用数组了,使用下文代码就可以了。

Sheets("FC").Rows(1).Copy Sheets("Update").Rows(1)

(图一:FC和Update的title一致)

2,建立以下几个worksheet

3,代码如下:

Sub FC_update()Dim arr, brr, crr(), drr, da(), fn
Dim i, j, k, m, n, sSheets("FC").Rows(1).Copy Sheets("Update").Rows(1)'首先检查是否有BOMSet d = CreateObject("scripting.dictionary")
arr = Sheets("BOM").UsedRange
brr = Sheets("Update").UsedRangeFor i = 2 To UBound(arr)s = arr(i, 1)d(s) = i
NextFor i = 2 To UBound(brr)If Not d.exists(brr(i, 1)) ThenMsgBox "这个SKU没有BOM,请检查BOM或者SKU书写!" & vbLf & vbLf & "第" & i & "行", vbOKCancelExit SubEnd If
NextDebug.Print UBound(brr), UBound(brr, 2)d.RemoveAll
'先把Update的东西存在数组中
m = 0
For i = 1 To UBound(brr)s = brr(i, 1)If d(s) = "" Thenm = m + 1d(s) = mFor j = 1 To UBound(brr, 2)ReDim Preserve crr(1 To UBound(brr, 2), 1 To m)crr(j, m) = brr(i, j)NextElseFor j = 2 To UBound(brr, 2)crr(j, d(s)) = crr(j, d(s)) + Val(brr(i, j))NextEnd IfNextdrr = Application.Transpose(crr)Debug.Print UBound(drr), UBound(drr, 2)'On Error Resume Next
d.RemoveAll
Erase arr, brr
'从BOM中找到所有对应的BOM
'先看看transpose后的drr的开始上下标,坐标以brr(1,1)开始
'Debug.Print drr(2, 1)
arr = Sheets("BOM").UsedRange
m = 0For i = 1 To UBound(drr)For j = 2 To UBound(arr)If drr(i, 1) = arr(j, 1) Thens = CStr(arr(j, 2))If d(s) = "" Thenm = m + 1d(s) = mReDim Preserve brr(1 To UBound(drr, 2), 1 To m)brr(1, m) = sFor k = 2 To UBound(drr, 2)brr(k, m) = drr(i, k) * arr(j, 3)NextElseFor k = 2 To UBound(drr, 2)brr(k, d(s)) = brr(k, d(s)) + drr(i, k) * arr(j, 3)NextEnd IfEnd IfNextNextSheets("sheet2").Cells.Clear
Sheets("sheet2").[a:a].NumberFormatLocal = "@"
drr = Application.Transpose(brr)
Sheets("Sheet2").[a2].Resize(m, UBound(brr)) = drr
Sheets("Update").Rows(1).Copy Sheets("sheet2").Rows(1)'接下来我们开始往Material Forecast中Update对应物料的数量
'Material Forecast中的物料都是唯一的fn = Sheets("Update").Range("B1:H1")
'Debug.Print UBound(fn), UBound(fn, 2)Erase arr
'drr = Application.Transpose(brr)
arr = Sheets("Material").UsedRange
'找到和Update每月相同的列号
n = 0
For i = 1 To UBound(fn, 2)For j = 1 To UBound(arr, 2)If fn(1, i) = arr(1, j) Thenn = n + 1ReDim Preserve da(1 To n)da(n) = jExit ForEnd IfNext
Nextd.RemoveAll
For i = 2 To UBound(arr)s = arr(i, 1)d(s) = ""
Next
'Debug.Print n
'For i = 1 To n
'Debug.Print da(i)
'Next
'接下来我们把brr的数据更新到Material:存放着需要新增的,或者减少的物料数量
m = 0
For i = 1 To UBound(drr)For j = 2 To UBound(arr)If drr(i, 1) = arr(j, 1) ThenFor k = 1 To UBound(da)Sheets("Material").Cells(j, da(k)) = Sheets("Material").Cells(j, da(k)) + drr(i, k + 1)'这是数据,不是单元格,所以无法直接显示出来'Debug.Print "allen"NextElseIf Not d.exists(drr(i, 1)) Thenm = m + 1Sheets("Material").Cells(UBound(arr) + m, 1) = drr(i, 1)For k = 1 To UBound(da)Sheets("Material").Cells(UBound(arr) + m, da(k)) = drr(i, k + 1)NextGoTo AllenEnd IfNext
Allen:
NextDebug.Print jEnd Sub

VBA:新增某个月的FC至Excel版物料Forecast相关推荐

  1. 《超级女声》新增 9月4日 娱乐无极限 回顾超女专辑(都是超女) [共39G的精品]

    喜欢的就赶紧去吧! 下面是用户共享的文件列表,安装eMule后,您可以点击这些文件名进行搜索 [个人剪辑][周笔畅]超级女声周笔畅普通朋友(50进20).rmvb 2.8MB [个人剪辑][周笔畅]超 ...

  2. VBA综合应用——解压并剔除Excel敏感数据

    VBA综合应用--解压并剔除Excel敏感数据 作者:AntoniotheFuture 关键词:VBA,Excel自动化,办公自动化 开发平台:Excel2010 平台版本上限:2010 平台版本下限 ...

  3. python打不开xls文件,wps下用vba实现合并文件夹中所有excel文件

    python打不开xls文件,用wps下vba解决问题 用了常用的三种python读写xls文件的方法都报错 xlrd openpyxl pandas 原因 解决方法 用vba实现合并文件夹中所有ex ...

  4. VBA把txt文件内容放入excel

    VBA把txt文件内容放入excel,代码如下: Sub bb() Dim a, k%, i% Dim abc As String '---------------cycle to open the ...

  5. EXCEL自定义函数无法运行的原因:可以在VBA里运行的函数,在EXCEL用自定义函数为什么报错?

    目录 1目标问题: 为什么VBA里,function可以运行的代码,在EXCEL用自定义函数,会返回错误值? 2 先说结论 2.1 最容易发生的原因 2.2 其他原因梳理 3  自定义函数返回值的情况 ...

  6. 新版小O地图EXCEL版0.6.5.0--专业地图EXCEL插件

    前言 小O地图EXCEL版软件是什么,干什么用的? EXCEL与地图结合,效果对比PowerBI.Tableau专业软件,小O地图的表现如何......,有什么脱颖而出功能,带着问题请往下阅读文章. ...

  7. 新版 | 小O地图EXCEL版全新升级

    [小 O 地图 ]是一款基于EXCEL表格进行地理数据挖掘.坐标转换.地图绘制等功能的工具软件.具有易用.高效.稳定的特点,能够满足地理数据应用及处理的基本需求,也可提供个性化定制开发服务. [获取软 ...

  8. EXCEL地图可视化功能概览--小O地图EXCEL版0.6.3.0版

    前言 小O地图EXCEL版软件能干什么? 总结起来,在EXCEL中实现 地图浏览.地图任务(处理地理数据).地图可视化.地图标注.地图快照. 本文是对小O地图EXCEL版软件功能的简介,通过本文,能够 ...

  9. 小O地图EXCEL版地图可视化 -- 让EXCEL插上国产地图的翅膀

    前言 谷歌地图和Bing等国外地图存在信安问题,应拒绝使用问题地图. 小O历时一个(ao)月(ye),将国产优秀的地图资源集成至EXCEL软件中,开发出基于EXCEL表格的地图可视化功能,能将EXCE ...

最新文章

  1. Java:包的使用Pack
  2. Struts2 访问web元素
  3. numpy 矩阵的用法
  4. c++指针引用导出文件
  5. linux中nslookup命令功能,nslookup
  6. 站点公司亚马逊砸了10亿也没能做成智能手机,技术是须要沉淀和积累的
  7. python保存数据db_python存储数据到mongodb
  8. axure插件怎么用_CAD插件不会用怎么行?CAD插件大全合集,超实用绘图软件,高效...
  9. c语言c程序由函数构成 每个函数完成相对独立的功能,17秋学期(1709)《C语言程序设计》在线作业  满分...
  10. 超好用的开源 IP 地址管理系统,告别传统 Excel 统计方式!
  11. Python-ZFJObsLib完美生成iOS垃圾代码
  12. 2022Vue经典面试题及答案汇总(持续更新)
  13. c#仿qq好友列表控件
  14. python实现诗词接龙
  15. 手写一个C语言编译器
  16. centos7.x 查看端口占用情况方法
  17. SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式...
  18. Apache Geode/GemFire 数据分区和路由机制浅析
  19. 五只猴子分桃。第1只猴子把这堆桃子凭据分为五份, 多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只到第五只猴子都如此分,五轮后,原来桃子总共有多少个
  20. Linux下硬盘安装fedora,Fedora硬盘安装

热门文章

  1. 【青龙面板+诺兰2.0 网页短信验证登录+bot查询】
  2. Android GMS (谷歌移动服务)
  3. 微信小程序scroll-view实现滚动卡片
  4. java 统计子字符串个数_Leecode统计子串个数(java)
  5. bitnami redmine 4 windows一键式版本安装企业微信插件方法
  6. SQL执行报错The MySQL server is running with the read-only
  7. 上海迪士尼乐园将于6月30日恢复运营,乐园门票6月29日起重新发售 | 美通社头条...
  8. Linux ls 命令学习和简单使用
  9. Javascript 新历转旧历|阳历转阴历|公历转农历算法代码
  10. adg的archive出现gap,使用增量恢复的方式进行恢复adg,RMAN-06094: datafile 1 must be restored