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

相关文章

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元

Python实现pdf电子发票信息提取到excel表格

《Python实现pdf电子发票信息提取到excel表格》这篇文章主要为大家详细介绍了如何使用Python实现pdf电子发票信息提取并保存到excel表格,文中的示例代码讲解详细,感兴趣的小伙伴可以跟... 目录应用场景详细代码步骤总结优化应用场景电子发票信息提取系统主要应用于以下场景:企业财务部门:需

Python处理大量Excel文件的十个技巧分享

《Python处理大量Excel文件的十个技巧分享》每天被大量Excel文件折磨的你看过来!这是一份Python程序员整理的实用技巧,不说废话,直接上干货,文章通过代码示例讲解的非常详细,需要的朋友可... 目录一、批量读取多个Excel文件二、选择性读取工作表和列三、自动调整格式和样式四、智能数据清洗五、

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三