养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

使用VBA统计单元格相同的数据

时间:2024-09-20 22:50:18

如下表所示,单元格里边的数据已经被逗号(英文格式)分隔,统计每一列里边4个单元格存在相同的数据,然后填入第5行对应列下方的单元格。对于数据量较少时,可以通过人工判断后选出相同的数据;数据量较大时,还是使用VBA程序来处理比较快捷,也不容易出错。

使用VBA统计单元格相同的数据

工具/原料

Windows7

office2010

计算机

方法/步骤

1、解题思路解读:(1)由于是判断一列里边四稍僚敉视个单元格存在相同的数值,使用For……Next循环嵌套使用(执行一列时则获取四行的数据)。(2)单元格里边含有逗号,得先用字符所在位置的函数(剧安颌儿如:Instr)来判断逗号所在的位置,通过截取函数(如:Mid、Right)把数值截取出来,再寄存到另一个工作表上面并使用Countif函数统计相同的数据。(3)为了避免出现空白的单元格,可以使用If函数进行判断,再决定是否执行后续的程序代码,以提高运行速度。(4)有了初步的思路之后,逐步去编写程序,然后调试、校正。

2、打开Excel表格之后,按下【Alt+F11】组合键打开VBA编辑器。

使用VBA统计单元格相同的数据

3、在VBA编辑器的菜单栏上面点击【插入】、【模块】。

使用VBA统计单元格相同的数据

4、在模块的代码框里边输入以下VBA程序,然后按下【F5】键运行程序。SubInst筠续师诈rNumberCountif()Dimc,h,足毂忍珩i,j,k,k1,k3,k4OnErrorResumeNext'忽略运行过程中可能出现的错误Setmysheet1=ThisWorkbook.Worksheets("Sheet1")'定义Sheet1工作表Setmysheet2=ThisWorkbook.Worksheets("Sheet2")'定义Sheet2工作表mysheet1.Range(mysheet1.Cells(5,1),mysheet1.Cells(5,100))=""'清空单元格里边的内容Forc=1To100'从第1列到第100列Forh=1To4'从第1行到第4行Ifmysheet1.Cells(h,c)<>""Then'如果单元格不为空白,则执行k1=0'每执行1行则初始化一次j=0Doj=j+1'j是mysheet2的列,从第1列开始k=k1'k用来存放上次k1的值k1=InStr(k1+1,mysheet1.Cells(h,c),",")'k1为“,”所在的位置Ifk1<>0Thenmysheet2.Cells(h,j)=Mid(mysheet1.Cells(h,c),k+1,k1-k-1)'把截取的字符填入mysheet2相应的单元格Elsemysheet2.Cells(h,j)=Right(mysheet1.Cells(h,c),_Len(mysheet1.Cells(h,c))-k)'从右侧截取数字填入mysheet2相应的单元格ExitDo'退出Do循环EndIfLoopEndIfNextForEachk3Inmysheet2.Range(mysheet2.Cells(1,1),mysheet2.Cells(1,j))'对该单元格区域的每一个单元格执行一次k4=Application.WorksheetFunction.CountIf(mysheet2.Range(mysheet2.Cells(1,1),_mysheet2.Cells(4,j)),k3)'统计同一数字在单元格里边出现的次数Ifmysheet1.Cells(5,c)=""Andk4=4Then'如果单元格为空白且个数为4mysheet1.Cells(5,c)=k3'把k3的内容填入该单元格里边ElseIfmysheet1.Cells(5,c)<>""Andk4=4Then'如果单元格不为空白且个数为4mysheet1.Cells(5,c)=mysheet1.Cells(5,c)&","&k3'在该单元格内容之后加","和k3的内容EndIfEndIfNextmysheet2.Range(mysheet2.Cells(1,1),mysheet2.Cells(4,j))=""NextEndSub

使用VBA统计单元格相同的数据

5、回到工作表界面,将会看到程序的运行结果。

使用VBA统计单元格相同的数据

6、程序代码解析:(1)Instr是查找指定字符串所在的位置,即:Instr(查找字符串的起奘疚豫枭始位置,查找的字符串,查找的字符)。在程序里边,查找的逗号(",")个数可能紧鋈笆珀不确定,所以就使用变量(开始为1,之后在上一次基础递增1逐一去查询,在没有搜索到时则退出Do循环)。(2)Mid是字符提取函数,即:Mid(要截取的字符串,截取字符串的起始位置,截取字符个数)。Mid截取的字符首先从1开始,之后从获取的逗号(",")的位置开始,截取是字符串则是在获取逗号(",")位置之前的字符,因此需要借助后面的Right函数截取最后一组数字。(3)Right函数是从右侧开始截取字符串,即:Right(要截取的字符串,截取的字符串长度)。(4)Len函数是获取单元格里边字符串的个数。(5)Countif是用来查找存在相同元素的个数,即:Countif(查找的范围,查找的元素)。(6)由于借用了Sheet2工作表,因此,该工作表不应该存在数据,以免被清除。

© 一点知识