zoukankan      html  css  js  c++  java
  • VBA/Excel-实例系列-04-求两个数组的交集

    原创: Excel高效办公之VBA 2017-03-10

    Part 1:逻辑过程

    1. 已有两个数组,要求单个数组中信息无重复

    2. 以最短的数组作为循环,分别判断该数组中的元素是否在另一个数组中

    3. 如果某一元素在另外一个数组中,则将其保存到结果数组中

    Part 2:代码

    Function funIntersection(array1, array2)
        Rem>>求两个集合的交集
        Rem>>要求原数组无重复信息
    
        Dim len1
        Dim len2
        Dim cycle
        Dim cycleArray
        Dim findArray
        Dim resultArray()
        Dim eachOne
        Dim i
        Dim findStatus
        Dim resultLen
    
        len1 = UBound(array1)
        len2 = UBound(array2)
    
        resultLen = 0
    
        '以最小数组循环,减少循环次数
        If len1 >= len2 Then
            cycle = len2
            cycleArray = array2
            findArray = array1
        Else
            cycle = len1
            cycleArray = array1
            findArray = array2
        End If
    
        For i = 0 To cycle Step 1
            eachOne = cycleArray(i)
            findStatus = Application.Match(eachOne, findArray, 0)
            If Not IsError(findStatus) Then
                resultLen = resultLen + 1
                ReDim Preserve resultArray(1 To resultLen)
                resultArray(resultLen) = eachOne
            End If
    
        Next
    
        funIntersection = resultArray
    End Function

    Part 3:部分代码解读

    ReDim Preserve resultArray(1 To resultLen)改变数组resultArray的大小
      • 同时保存数组已有的信息

      • 数组下标从1开始,数组下标默认从0开始,可以人为修改

    Part 4:调用该函数

    Sub test()
        Rem>>
        Rem>>
        Dim array1()
        Dim array2()
        Dim array3()
        Dim array4()
        Dim array5()
        Dim array12()
        Dim array13()
        Dim array45()
        Dim inersectionCount
    
        array1 = Array("张三", "李四", 1, 2, 3, 4, 5)
        array2 = Array("张三", "王五", 3, 4, 5, 6)
        array3 = Array(11, 12)
        array4 = Array(1, 2, 3, 4, 5, 6)
        array5 = Array(4, 5, 6, 7, 8)
    
    
        array12 = funIntersection(array1, array2)
        array13 = funIntersection(array1, array3)
        array45 = funIntersection(array4, array5)
    
        Err.Clear
        On Error Resume Next
        inersectionCount = UBound(array13)
        If Err.Number <> 0 Then
            MsgBox "空数组"
        End If
        On Error GoTo 0
    End Sub

    执行结果

  • 相关阅读:
    oracle“记录被另一个用户锁住”
    Oracle CASE WHEN 用法介绍
    拥有机器人的人生会是怎样的体验?
    需求那么多,核心需求都从哪里来?
    一文读懂互联网及电商逻辑
    读书:《敏捷产品--不确定性的思维革命》
    读书:《超越感觉:批判性思考指南》一
    618啦,你的钱包又被盯上啦!
    产品经理如何开启上帝视角?
    我的产品经理价值观
  • 原文地址:https://www.cnblogs.com/yellowhh/p/12013839.html
Copyright © 2011-2022 走看看