美文网首页EXCEL韩老师讲Office工具癖
Excel154 | 如何给相同姓名添加相同编号

Excel154 | 如何给相同姓名添加相同编号

作者: bitterfleabane | 来源:发表于2017-11-26 21:32 被阅读23次

    如下两个表格:

    第一种情况是按姓名排序的,第二种情况姓名未加排序。

    两种情况下,怎样给相同姓名添加相同编号?

    今天韩老师给出函数法与VBA法。

    函数方法

    相同姓名有序排列:

    1、在A2单元格输入编号1;

    2、在A3单元格输入公式:

    =IF(B3=B2,A2,A2+1)

    该公式的含义是:

    如果B3和B2姓名相同,则填写B2对应的编号A2,否则A2+1;

    相同姓名凌乱无序排列:

    其实在真正工作中,有序排列的姓名不多,更多的是无序排列。

    1、在F2中输入公式:

    =IFERROR(VLOOKUP(G2,IF({1,0},G$1:G1,F$1:F1),2,0),N(F1)+1)

    向下填充,即得结果:

    其中:

    IF({1,0},G$1:G1,F$1:F1):

    是由IF函数重新构建一动态区域,该区域有两列:

    第一列是姓名,起始单元格是G1,结束单元格随公式向下填充而扩展;

    第二列是编号,起始单元格是F1,结束单元格随公式向下填充而扩展;

    公式不管填充到哪一行,该动态区域的结束行都是当前公式所在行的上一行。

    VLOOKUP(G2,IF({1,0},G$1:G1,F$1:F1),2,0):

    在上述动态区域中精确查找姓名对应的编号。

    IFERROR(VLOOKUP(G2,IF({1,0},G$1:G1,F$1:F1),2,0),N(F1)+1):

    如果查找姓名G2对应的编号出错,则返回N(F1)+1;

    公式向下填充,如果到第12行,则:查找姓名G12对应的编号出错,则返回N(F11)+1。

    N函数:

    语法:N(VALUE);

    功能:将不是数值的值转换为数值形式;

    不同参数VALUE,对应的返回值:

    本示例中,N(F1)的返回值是0。

    注:无序排列的公式同样适合有序排列!

    VBA法

    代码为:

    Sub 编号()

    Dim a As Object, i As Long'创建字典/

    Set a = CreateObject("scripting.dictionary")

    For i = 2 To Range("b1").CurrentRegion.Rows.Count

    If Not a.exists(Cells(i, 2).Value) Then'添加编号到字典,第一个编号不存在),则

    k = k + 1'计数

    a(Cells(i, 2).Value) = k'给字典key编号,第一个编号是1,第二个编号是2......

    Cells(i, 1) = k'返回给第一列,分组

    Else'如果字典(编号)存在

    Cells(i, 1) = a(Cells(i, 2).Value)'直接在字典里查询编号

    End If

    Next

    End Sub

    用法:

    相关文章

      网友评论

        本文标题:Excel154 | 如何给相同姓名添加相同编号

        本文链接:https://www.haomeiwen.com/subject/odulbxtx.html