办公耗材包括哪些东西和明细

陈师傅 2027年04月19日 阅读 (5)

内容提要

  • 字符替换与分列
  • 数组

大家好,我是zhuangxiu,今天在EXCELHOME论坛上看到一个求助贴:用VBA做分配表。

办公耗材包括哪些东西和明细(1)

下了附件一看,是把字符串里面的单位名称与数量,提取到一张矩阵表里,他的原始数据是这样的,购置计划表

办公耗材包括哪些东西和明细(2)

要求结果是这样的,分配表

办公耗材包括哪些东西和明细(3)

正如他在贴子里所说“看着是一件很小的工作,但是做起来真的头大。“

好在我们有VBA,通过一段代码,再也不用烦了,分享给大家:

基本思路:

1、把原始数据读入数组arr()。

2、对第6列数据字段进行处理,把分隔符合统一替换成“|”,得到一个字符串"深圳|2|惠州|2",然后再分列,存到数组。

3、把目标数据读入数组arrResult(),循环两个数组,匹配对应记录,再把arr数组的i行,第6列数据装入一个数组arrItem,循环arrItem,把相应的记录填入数组arrResult。

4、把arrResult回写到目标工作表:分配表。

VBA代码

1、在模块1里,Assignment过程

代码解析:

(1)Line5~8,定义一批变量,数组、工作表对象等。

(2)line16,把原始数据装入数组arr。

(3)line17,设置一个数组arrStr,写入几个标点符号,这是在原始数据中用来分隔项目的字符。

(4)line18~23,把arr数组的第6列,分隔符号都替换成“|”,分列后再存到第6列,就把第6列变成一个类似“"深圳","2","惠州","2"“这样的一个数组。

(5)line30,把目标数据装入数组arrResult。

(6)line31~45,把处理过的数据写入arrResult。

(A)line35,把arr数组的第6列装入数组arrItem。

(B)line36~41,循环arrItem,利用自定义函数Pxy,把arrItem中单位名称的下一个元素,也就是数量,填入数组arrResutl中对应单位名称的位置。

(C)line42,写入合计数。

(7)line46,把arrResult数据写入工作表。

2、在模块1里,Pxy自定义函数:

FunctionPxy, FieldName As String, Optional arrType As Integer = 0)Dimk$, t$k=0t=0SelectCase arrTypeCaseIs = 0Fori = LBound To UBoundk=k + 1Ifarr(i) = FieldName Thent=1ExitForEndIfNextCaseIs = 1Fori = LBound To UBoundk=k + 1Ifarr = FieldName Thent=1ExitForEndIfNextCaseIs = 2Fori = LBound To UBoundk=k + 1Ifarr = FieldName Thent=1ExitForEndIfNextEndSelectIft = 1 ThenPxy=kElsePxy=0EndIfEndFunction

代码解析:数组字段定位

(1)Line6~13,函数参数0,表示一维数组。

(2)line14~21,函数参数1,表示二维数组,查找定位首列字段,按定位。

(3)line22~29,函数参数2,表示二维数组,查找定位首行字段,按定位。

动画演示

办公耗材包括哪些东西和明细(4)

总结

1、在实际工作中,我觉得我们只要做“分配表”就可以了,在各个单位名称下面填写计划采购数量,在“合计”进行汇总,按合计数量采购,再按这张分配表分配就可以了。

2、对于提取“单位名称”、“数量”还可以用正则表达式。

3、对于分配表的表头,也就是单位名称,也可以根据原始数据生成,这里已经写好了,那就没有必要“多此一举”啦。

~~~~~~End~~~~~~

喜欢就点个、点在看留言评论、分享一下呗!感谢支持!

郑重声明:以上内容来自网络,请酌情参考,并以实际为准。如遇到问题发送具体情况老陈联系!