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

    执行结果

  • 相关阅读:
    安装nodejs和yarn(配置淘宝源)
    适用于 Linux 的 Windows 子系统没有已安装的分发版
    selenium定位元素click时报错
    dubbo从入门到实战(转)
    SpringBoot整合JPA简单介绍
    办公自动化路上的异化
    邮箱黑名单:如何查看邮件IP是否被列入黑名单,及如何删除
    邮箱黑名单(1):
    Vmware挂载san存储_vSphere 6.x 共享存储LUN丢失分区表修复(精华)
    AD中FSMO五大角色的介绍及操作
  • 原文地址:https://www.cnblogs.com/yellowhh/p/12013839.html
Copyright © 2011-2022 走看看