[excel]查找相同身份证信息的不同缴费金额

需求描述

昨天媳妇给安排了个任务,excel中两个Sheet查重的问题,具体如下:

  1. 找到excel两个sheet中的同一个人的不同缴费信息。
  2. 找到Sheet1中比Sheet2中多出的人员的信息。

数据如下:

SHEET1

1玄雾阁雄霸888101199003070097200
2牛家村聂人王888101199003077395200
3牛家村绝无神888101199003071436200
4绝情谷天山童姥888101199003074135200
5绝情谷独孤求败888101199003077598200
6断岳亭东方不败888101199003074995200
7断岳亭风清扬888101199003071954200
8断岳亭任我行888101199003078793200
9南无庙灭绝师太888101199003075090300

SHEET2

村社区姓名身份证号码应缴年度缴费方式应缴类型个人缴费
冰火岛陆小凤8881351958010941232018经办机构自收正常缴费500
牛家村聂人王8881011990030773952018经办机构自收正常缴费200
八卦门花无缺8881351958070741152018经办机构自收正常缴费200
绝情谷独孤求败8881011990030775982018经办机构自收正常缴费300
绝情谷天山童姥8881011990030741352018经办机构自收正常缴费200
平安镇老实和尚8881351958081638222018经办机构自收正常缴费100
恶人谷小鱼儿8881351958082541262018经办机构自收正常缴费100
恶人谷绝无神8881011990030714362018经办机构自收正常缴费500
神仙岛风清扬8881011990030719542018经办机构自收正常缴费200
神仙岛任我行8881011990030787932018经办机构自收正常缴费200
神仙岛灭绝师太8881011990030750902018经办机构自收正常缴费300

方法一:使用excel中的函数

1.使用函数VLOOKUP来查找相同身份证信息下的个人缴费金额列

VLOOKUP语法规则如下:

VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
参数说明输入数据类型
lookup_value要查找的值数值、引用或文本字符串
table_array要查找的区域数据表区域
col_index_num返回数据在查找区域的第几列数正整数
range_lookup模糊匹配/精确匹配TRUE/FALSE

在这里插入图片描述

结果:
在这里插入图片描述

来个gif
在这里插入图片描述

2.使用函数COUNTIF来查找相同身份证信息下的不同的个人缴费金额

COUNTIF语法规则如下:

COUNTIF(range,criteria)
参数说明
range要计算其中非空单元格数目的区域
criteria以数字、表达式或文本形式定义的条件

在这里插入图片描述

结果:
在这里插入图片描述

来个gif
在这里插入图片描述

3.使用筛选功能把最终结果筛出来

对第I列进行筛选,把0筛选出来就ok了

结果:
在这里插入图片描述

说明:

  • #N/A表示的是Sheet1中比Sheet2中多出来的数据
  • 剩下的数据是个人缴费金额不同的数据

来个gif
在这里插入图片描述

方法二:使用vba实现

先来张gif的效果图
在这里插入图片描述
结果:
在这里插入图片描述

代码

'****************************************************************
'
' 20181122 write by liuxq
' version 1.0
'
' 功能:将Sheet1中姓名和Sheet2中身份证信息做对比,如果相同再比较分数,
' 如果分数不同则将结果记录到Sheet3中
'
'****************************************************************

Private Sub CommandButton1_Click()
    '关闭屏幕更新可加快宏的执行速度
    Application.ScreenUpdating = False
    
    '---------------常量集,按实际修改--------------
    '表示SHEET1数值起始行
    Const START_SHEET1_INDEX As Integer = 1

    'Sheet1中的相同信息在第几列
    Const ID_SHEET1_INDEX As Integer = 4

    '表示SHEET1分数在第几列
    Const FENSHU_SHEET1_INDEX As Integer = 6

    'Sheet1的身份证号是第几列,如果没有填-1
    Const SHEET1_ID_COUNT As Integer = 4

    'Sheet1一共几列
    Const SHEET1_COLUMNS_COUNT As Integer = 6



    '表示SHEET2数值起始行
    Const START_SHEET2_INDEX As Integer = 2

    'Sheet2中的相同信息在第几列
    Const ID_SHEET2_INDEX As Integer = 3


    '表示SHEET2分数在第几列
    Const FENSHU_SHEET2_INDEX As Integer = 7
    
    
    '最终结果保存到哪个Sheet中
    Const WRITE_SHEET_NAME As String = "Sheet3"
    
    '---------------一些记录的变量------------------
    
    Dim sheet1Array, sheet2Array, resultArray
    
    '用来保存Sheet1的数据
    sheet1Array = Sheet1.Range("A1").CurrentRegion
    
    '用来保存Sheet2的数据
    sheet2Array = Sheet2.Range("A1").CurrentRegion
    
    
    ' 用来保存最终结果集
    ReDim resultArray(1 To Application.Max(UBound(sheet1Array), UBound(sheet2Array)), 1 To SHEET1_COLUMNS_COUNT + 1)
    
    
    '--------------------逻辑处理--------------------
    '记录resultArray的下标
    Dim m As Integer
    m = 0
    
    
    ' 查找到姓名相同分数不同的数据,然后赋值给结果集
    For i = START_SHEET1_INDEX To UBound(sheet1Array)
        cell1 = sheet1Array(i, ID_SHEET1_INDEX)
        d = -1
        For j = START_SHEET2_INDEX To UBound(sheet2Array)
            cell2 = sheet2Array(j, ID_SHEET2_INDEX)
            If cell1 = cell2 Then
                Dim cell1fenshu As Double
                Dim cell2fenshu As Double
            
                cell1fenshu = sheet1Array(i, FENSHU_SHEET1_INDEX)
                cell2fenshu = sheet2Array(j, FENSHU_SHEET2_INDEX)
                If cell1fenshu <> cell2fenshu Then
                    m = m + 1
                    For k = 1 To SHEET1_COLUMNS_COUNT
                        resultArray(m, k) = sheet1Array(i, k)
                    Next
                    resultArray(m, SHEET1_COLUMNS_COUNT + 1) = sheet2Array(j, FENSHU_SHEET2_INDEX)
                End If
            Else
                    d = d + 1
            End If
        Next
        
        ‘ Sheet2中没有Sheet1中该行数据,记录到sheet1Array中
        If d = UBound(sheet2Array) - START_SHEET2_INDEX Then
            m = m + 1
            For k = 1 To SHEET1_COLUMNS_COUNT
                resultArray(m, k) = sheet1Array(i, k)
            Next
            resultArray(m, SHEET1_COLUMNS_COUNT + 1) = "未找到"
        End If
        
    Next

    '---------------保存结果到Sheet中----------------
    '清空工作表
    Worksheets(WRITE_SHEET_NAME).Cells.Clear
    
    '禁止Shee1中SHEET1_ID_COUNT列的身份证信息按科学计数法输出
    If SHEET1_ID_COUNT <> -1 Then
        Worksheets("Sheet3").Columns(SHEET1_ID_COUNT).NumberFormatLocal = "@"
    End If
    
    '将结果集写入到${WRITE_SHEET_NAME}中
    Worksheets(WRITE_SHEET_NAME).Range("A1").Resize(m, SHEET1_COLUMNS_COUNT + 1) = resultArray
    
    '字体加粗
    For i = 1 To m
'        Worksheets(WRITE_SHEET_NAME).Cells(i, SHEET1_COLUMNS_COUNT + 1).Interior.ColorIndex = 3 '设置单元格颜色
        Worksheets(WRITE_SHEET_NAME).Cells(i, SHEET1_COLUMNS_COUNT + 1).Font.Bold = True '设置文字粗体
    Next
    
    Application.ScreenUpdating = True
    MsgBox ("执行完毕!")
End Sub

具体就不细说了,注释已经写的很详细了,有兴趣的同学可以看看。

老习惯,上张流程图吧
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
| 测试用例编号 | 测试用例名称 | 测试步骤 | 预期结果 | 实际结果 | 是否通过 | | ------------ | ------------ | ------------------------------------------------------------ | -------------------------------------------------- | -------------------------------------------------- | -------- | | FT-01 | 登录 | 1. 打开生活缴费模块<br />2. 输入正确的用户名和密码<br />3. 点击“登录”按钮 | 进入生活缴费主页 | 进入生活缴费主页 | 是 | | FT-02 | 充值 | 1. 在生活缴费主页,选择需要充值的缴费项目<br />2. 输入充值金额并确认<br />3. 输入支付密码并确认<br />4. 点击“确认充值”按钮 | 充值成功,账户余额增加相应金额 | 充值成功,账户余额增加相应金额 | 是 | | FT-03 | 查询账单 | 1. 在生活缴费主页,选择需要查询账单的缴费项目<br />2. 输入查询条件,如缴费日期、账单状态<br />3. 点击“查询”按钮 | 显示符合条件的账单列表,包括账单号、缴费日期、金额等 | 显示符合条件的账单列表,包括账单号、缴费日期、金额等 | 是 | | FT-04 | 缴费 | 1. 在生活缴费主页,选择需要缴费的账单<br />2. 点击“缴费”按钮<br />3. 输入支付密码并确认 | 缴费成功,账单状态变为已缴费,账户余额减少相应金额 | 缴费成功,账单状态变为已缴费,账户余额减少相应金额 | 是 | | FT-05 | 退款 | 1. 在生活缴费主页,选择需要退款的已缴费账单<br />2. 点击“退款”按钮<br />3. 输入退款金额并确认<br />4. 输入支付密码并确认 | 退款成功,账单状态变为已退款,账户余额增加相应金额 | 退款成功,账单状态变为已退款,账户余额增加相应金额 | 是 | | FT-06 | 修改密码 | 1. 在生活缴费主页,点击“设置”按钮<br />2. 点击“修改密码”按钮<br />3. 输入旧密码、新密码并确认 | 密码修改成功,下次登录需使用新密码 | 密码修改成功,下次登录需使用新密码 | 是 |

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值