广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

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

    来源:网络收集  点击:  时间:2024-03-11
    【导读】:
    如下表所示,单元格里边的数据已经被逗号(英文格式)分隔,统计每一列里边4个单元格存在相同的数据,然后填入第5行对应列下方的单元格。对于数据量较少时,可以通过人工判断后选出相同的数据;数据量较大时,还是使用VBA程序来处理比较快捷,也不容易出错。工具/原料moreWindows 7office 2010计算机方法/步骤1/6分步阅读

    解题思路解读:

    (1)由于是判断一列里边四个单元格存在相同的数值,使用For……Next循环嵌套使用(执行一列时则获取四行的数据)。

    (2)单元格里边含有逗号,得先用字符所在位置的函数(如:Instr)来判断逗号所在的位置,通过截取函数(如:Mid、Right)把数值截取出来,再寄存到另一个工作表上面并使用Countif函数统计相同的数据。

    (3)为了避免出现空白的单元格,可以使用If函数进行判断,再决定是否执行后续的程序代码,以提高运行速度。

    (4)有了初步的思路之后,逐步去编写程序,然后调试、校正。

    2/6

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

    3/6

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

    4/6

    在模块的代码框里边输入以下VBA程序,然后按下【F5】键运行程序。

    Sub InstrNumberCountif()

    Dim c, h, i, j, k, k1, k3, k4

    On Error Resume Next 忽略运行过程中可能出现的错误

    Set mysheet1 = ThisWorkbook.Worksheets(Sheet1) 定义Sheet1工作表

    Set mysheet2 = ThisWorkbook.Worksheets(Sheet2) 定义Sheet2工作表

    mysheet1.Range(mysheet1.Cells(5, 1), mysheet1.Cells(5, 100)) = 清空单元格里边的内容

    For c = 1 To 100 从第1列到第100列

    For h = 1 To 4 从第1行到第4行

    If mysheet1.Cells(h, c) Then 如果单元格不为空白,则执行

    k1 = 0 每执行1行则初始化一次

    j = 0

    Do

    j = j + 1 j是mysheet2的列,从第1列开始

    k = k1 k用来存放上次k1的值

    k1 = InStr(k1 + 1, mysheet1.Cells(h, c), ,) k1为“,”所在的位置

    If k1 0 Then

    mysheet2.Cells(h, j) = Mid(mysheet1.Cells(h, c), k + 1, k1 - k - 1)

    把截取的字符填入mysheet2相应的单元格

    Else

    mysheet2.Cells(h, j) = Right(mysheet1.Cells(h, c), _

    Len(mysheet1.Cells(h, c)) - k) 从右侧截取数字填入mysheet2相应的单元格

    Exit Do 退出Do循环

    End If

    Loop

    End If

    Next

    For Each k3 In mysheet2.Range(mysheet2.Cells(1, 1), mysheet2.Cells(1, j))

    对该单元格区域的每一个单元格执行一次

    k4 = Application.WorksheetFunction.CountIf(mysheet2.Range(mysheet2.Cells(1, 1), _

    mysheet2.Cells(4, j)), k3) 统计同一数字在单元格里边出现的次数

    If mysheet1.Cells(5, c) = And k4 = 4 Then 如果单元格为空白且个数为4

    mysheet1.Cells(5, c) = k3 把k3的内容填入该单元格里边

    Else

    If mysheet1.Cells(5, c) And k4 = 4 Then 如果单元格不为空白且个数为4

    mysheet1.Cells(5, c) = mysheet1.Cells(5, c) , k3 在该单元格内容之后加,和k3的内容

    End If

    End If

    Next

    mysheet2.Range(mysheet2.Cells(1, 1), mysheet2.Cells(4, j)) =

    Next

    End Sub

    5/6

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

    6/6

    程序代码解析:

    (1)Instr是查找指定字符串所在的位置,即:Instr(查找字符串的起始位置,查找的字符串,查找的字符)。在程序里边,查找的逗号(,)个数可能不确定,所以就使用变量(开始为1,之后在上一次基础递增1逐一去查询,在没有搜索到时则退出Do循环)。

    (2)Mid是字符提取函数,即:Mid(要截取的字符串,截取字符串的起始位置,截取字符个数)。Mid截取的字符首先从1开始,之后从获取的逗号(,)的位置开始,截取是字符串则是在获取逗号(,)位置之前的字符,因此需要借助后面的Right函数截取最后一组数字。

    (3)Right函数是从右侧开始截取字符串,即:Right(要截取的字符串,截取的字符串长度)。

    (4)Len函数是获取单元格里边字符串的个数。

    (5)Countif是用来查找存在相同元素的个数,即:Countif(查找的范围,查找的元素)。

    (6)由于借用了Sheet2工作表,因此,该工作表不应该存在数据,以免被清除。

    注意事项

    个人经验,仅供参考。

    学习EXCELVBA
    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_316459.html

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-18 12:08:28  耗时:0.029