zoukankan      html  css  js  c++  java
  • Excel VBA ——字典实用技巧

    最近写了一些小功能,对字典有了进一步的理解,太强大了!

    个人最近用过的字典应用有这么几个,写下来防止自己忘~同时方便大家

    一、查找重复行

    【原理】利用字典的exist方法,将数据加入字典时判断一下,如果已经存在,就说明当前数据为重复数据,应该删除

    【示例代码】

    Sub chongfu()         '查重
        Dim i As Long
        Dim endline As Long '定义工作表长度变量
        endline = Sheet3.Range("A30000").End(xlUp).Row '获取工作表Sheet3有数据的最后一行行号
        Set d = CreateObject("scripting.dictionary")    '设定字典d
        For i = endline To 2 Step -1         '从最后一行开始,依次把各个字段拼接到一起(注意,这里我的需求是这几个字段拼在一起的字符串不允许重复,因此我先拼接再判重)
            '把所有字符串拼接到数组里
            If Sheet3.Cells(i, 2) <> "" Then        '判断该行是否为空
                If IsError(Sheet3.Cells(i, 2)) = False Then  '如果关键单元格不是#N/A,则进入字典设置
                    x = Sheet3.Cells(i, 2) '******************设置赋给字典的变量,即需要去重的单元格!*******************
                    If Not d.Exists(x) Then     '判断是否重复
                        d(x) = x             '如果不重复,则把x定为item
                    Else
                        Sheet3.Rows(i & ":" & i).Delete Shift:=xlUp        '如果字典中已有对应的item,则该行重复,删除重复的行
                    End If
                End If
            End If
        Next
    End Sub

    【效果展示】

    二、查找关键字

    【原理】最常见的应用,根据key来查找对应的item

    【示例代码】

    Sub DicFind()       '查找编号对应的数据
        endline = Sheet3.Range("E100000").End(xlUp).Row '获取待匹配的数据区域长度
        Set d = CreateObject("Scripting.Dictionary")  '设置字典d
        Arr = Sheet3.Range("A2:B26975")          '获得字典数据
        For i = 1 To UBound(Arr)                 '设置sheet3 A列为字典关键字key,B列为字典关键字对应的值(item)
            If Arr(i, 1) <> "" Then              '当A列不为空时,将item装入数组
                x = Arr(i, 1)                    '想以哪一列为关键字查找结果,就把x设置成哪一列的单元格
                d(x) = Arr(i, 2)
            Else
                Exit For                         'A列为空时,退出for循环
            End If
        Next
        Brr = Sheet3.Range("$E$2:$F$" & endline)  '将待查找的数据放入数组
        For j = 1 To UBound(Brr)
            x = Brr(j, 1)               '将E列的编号设为key
            If d.Exists(x) Then         '如果字典中有对应的item,则将item写入数组brr
                Brr(j, 2) = d(x)        '把查找到的item写入brr,这里对应F列
            End If
        Next
        Sheet3.Range("$E$2:$F$" & endline) = Brr '将匹配好的数据写回单元格
    End Sub

    【效果展示】

    建设中。。。。。。之后想起来就更新~

     写了一半,发现早就有完善的教程了(汗)

    作者是ExcelHome 的ExcelVBA程序开发区的版主 蓝桥玄霜,特此注明

    http://club.excelhome.net/thread-868892-1-1.html

  • 相关阅读:
    dede图片横向滚动
    dede各种运用[转]
    PROFIBUS-DP现场总线的结构及应用
    51单片机的中断优先级及中断嵌套
    WPF里面制作圆角文本框
    【转】什么叫51单片机最小系统
    【转】(C#)OPC客户端源码
    路漫漫其修远兮,吾要上下左右前后而求索
    二叉树创建为什么用二级指针
    无向图的邻接表创建
  • 原文地址:https://www.cnblogs.com/shandongmiao/p/10767566.html
Copyright © 2011-2022 走看看