excel中按多列进行匹配并对数量进行累加

2024-06-15 17:20

本文主要是介绍excel中按多列进行匹配并对数量进行累加,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

公司的生产计划是按订单下发,但不同订单的不同产品中可能有用到相同的配件,按单1对1时,对计算机十分友好,但对于在配件库检料的工人来说就比较麻烦,上百条产品里可能会有多条都是相同的产品,首先考虑的办法是把数据进行了排序,让相同代号、材质、名称的数据挨在一起,但这样也并不是最优的,然后考虑的办法是把所有代号+材质+名称+领料人相同的数据的请领数量累加到一起,使其只有一条。下面是生产系统导出到excel中的数据,其中黄色底纹的就是相同数据:

代码就不细说了,做个流程图出来:

下面是代码,由于vba不能像javascript那样处理JSON数据,所以在用数组处理时比较麻烦:

Option ExplicitPrivate infos() As String'汇总
Sub myTotal()Dim totalRowNumber As IntegerDim i As IntegerDim j As IntegerDim arrCount As Integer     '数组数据位置Dim id As String'数组初始位置arrCount = 2'获得总行数totalRowNumber = Sheets(1).[a1].End(xlDown).Row'调整数组大小(考虑到避免多次调整数组大小,所以直接定义一个跟数据行一样多的数组)ReDim infos(2 To totalRowNumber, 1 To 13)For i = 2 To totalRowNumberid = Sheets(1).Cells(i, 5) & "|" & Sheets(1).Cells(i, 6) & "|" & Sheets(1).Cells(i, 7) & "|" & Sheets(1).Cells(i, 8)If isExist(id) Then'判断当前行是否已存在数组中,如果存在则请领数量累加addRequireNumber id, Sheets(1).Cells(i, 9), Sheets(1).Cells(i, 2)Else'如果不存在则加入到数组中For j = 1 To 13infos(arrCount, j) = Sheets(1).Cells(i, j)Next'数组条数+1arrCount = arrCount + 1End IfNext'清除区域数据Sheets(1).Range(totalRowNumber + 1 & ":65535").ClearContents'输出数组到表格中For i = 2 To UBound(infos)'如果infos(i,1)没有内容,说明后面都是空的行,所以就结束函数了If Len(infos(i, 1)) = 0 Then Exit SubFor j = 1 To 13Sheets(1).Cells(totalRowNumber + i, j) = infos(i, j)NextNext
End Sub'判断数组是否存在
Private Function isExist(ByVal name As String) As BooleanDim i As IntegerDim id As StringFor i = 2 To UBound(infos)id = infos(i, 5) & "|" & infos(i, 6) & "|" & infos(i, 7) & "|" & infos(i, 8)If name = id ThenisExist = TrueExit FunctionEnd IfNextisExist = False
End Function'数量累加
Private Sub addRequireNumber(ByVal name As String, ByVal requireNumber As Long, ByVal order As String)Dim i As IntegerDim id As StringDim subOrder As String'去掉订单的年号subOrder = Mid(order, InStr(1, order, "-") + 1, Len(order))For i = 2 To UBound(infos)id = infos(i, 5) & "|" & infos(i, 6) & "|" & infos(i, 7) & "|" & infos(i, 8)If name = id Theninfos(i, 9) = Str(Int(infos(i, 9)) + Int(requireNumber))'如果订单号中没有包含相同的字符才添加If InStr(1, infos(i, 2), subOrder) = 0 Theninfos(i, 2) = infos(i, 2) & "/" & subOrderEnd IfExit SubEnd IfNext
End Sub

这篇关于excel中按多列进行匹配并对数量进行累加的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064094

相关文章

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

hdu 3065 AC自动机 匹配串编号以及出现次数

题意: 仍旧是天朝语题。 Input 第一行,一个整数N(1<=N<=1000),表示病毒特征码的个数。 接下来N行,每行表示一个病毒特征码,特征码字符串长度在1—50之间,并且只包含“英文大写字符”。任意两个病毒特征码,不会完全相同。 在这之后一行,表示“万恶之源”网站源码,源码字符串长度在2000000之内。字符串中字符都是ASCII码可见字符(不包括回车)。

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

POJ 3057 最大二分匹配+bfs + 二分

SampleInput35 5XXDXXX...XD...XX...DXXXXX5 12XXXXXXXXXXXXX..........DX.XXXXXXXXXXX..........XXXXXXXXXXXXX5 5XDXXXX.X.DXX.XXD.X.XXXXDXSampleOutput321impossible

遮罩,在指定元素上进行遮罩

废话不多说,直接上代码: ps:依赖 jquer.js 1.首先,定义一个 Overlay.js  代码如下: /*遮罩 Overlay js 对象*/function Overlay(options){//{targetId:'',viewHtml:'',viewWidth:'',viewHeight:''}try{this.state=false;//遮罩状态 true 激活,f

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

OmniGlue论文详解(特征匹配)

OmniGlue论文详解(特征匹配) 摘要1. 引言2. 相关工作2.1. 广义局部特征匹配2.2. 稀疏可学习匹配2.3. 半稠密可学习匹配2.4. 与其他图像表示匹配 3. OmniGlue3.1. 模型概述3.2. OmniGlue 细节3.2.1. 特征提取3.2.2. 利用DINOv2构建图形。3.2.3. 信息传播与新的指导3.2.4. 匹配层和损失函数3.2.5. 与Super

二分图的最大匹配——《啊哈!算法》

二分图 如果一个图的所有顶点可以被分为X和Y两个集合,并且所有边的两个顶点恰好一个属于X,另外一个属于Y,即每个集合内的顶点没有边相连,那么此图就是二分图。 二分图在任务调度、工作安排等方面有较多的应用。 判断二分图:首先将任意一个顶点着红色,然后将其相邻的顶点着蓝色,如果按照这样的着色方法可以将全部顶点着色的话,并且相邻的顶点着色不同,那么该图就是二分图。 java