原创: Z 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 = '以最小数组循环,减少循环次数
If len1 >= len2 Then
cycle = len2
cycleArray = array2
findArray = array1
Else
cycle = len1
cycleArray = array1
findArray = array2
End If For i = To cycle Step
eachOne = cycleArray(i)
findStatus = Application.Match(eachOne, findArray, )
If Not IsError(findStatus) Then
resultLen = resultLen +
ReDim Preserve resultArray( To resultLen)
resultArray(resultLen) = eachOne
End If Next funIntersection = resultArray
End Function

Part 3:部分代码解读

ReDim Preserve resultArray( 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("张三", "李四", , , , , )
array2 = Array("张三", "王五", , , , )
array3 = Array(, )
array4 = Array(, , , , , )
array5 = Array(, , , , ) array12 = funIntersection(array1, array2)
array13 = funIntersection(array1, array3)
array45 = funIntersection(array4, array5) Err.Clear
On Error Resume Next
inersectionCount = UBound(array13)
If Err.Number <> Then
MsgBox "空数组"
End If
On Error GoTo
End Sub

执行结果

VBA/Excel-实例系列-04-求两个数组的交集的更多相关文章

  1. java用最少循环求两个数组的交集、差集、并集

    import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List ...

  2. java使用bitmap求两个数组的交集

    一般来说int代表一个数字,但是如果利用每一个位 ,则可以表示32个数字 ,在数据量极大的情况下可以显著的减轻内存的负担.我们就以int为例构造一个bitmap,并使用其来解决一个简单的问题:求两个数 ...

  3. leetcode-350-Intersection of Two Arrays II(求两个数组的交集)

    题目描述: Given two arrays, write a function to compute their intersection. Example:Given nums1 = [1, 2, ...

  4. (C#) 求两个数组的交集

    基本上在面试的时候,会具体到两个int数组,或string数组.具体也就是讨论算法. 首先需要的是和面试的人确认题目的含义,并非直接答题. 然后,可以提出自己的想法,首先最快的是用linq { Lis ...

  5. js求两个数组的交集|并集|差集|去重

    let a = [1,2,3], b= [2, 4, 5]; 1.差集 (a-b 差集:属于a但不属于b的集合)  a-b = [1,3] (b-a 差集:属于b但不属于a的集合)  b-a = [4 ...

  6. 用lua求两个数组的交集、并集和补集。

    -- 克隆 function Clone(object) local lookup_table = { } local function _copy(object) if type(object) ~ ...

  7. 求两个集合的交集和并集C#

    我是用hashset<T>来实现的 具体如代码所示 using System; using System.Collections.Generic; using System.Linq; u ...

  8. js取两个数组的交集|差集|并集|补集|去重示例代码

    http://www.jb51.net/article/40385.htm 代码如下: /** * each是一个集合迭代函数,它接受一个函数作为参数和一组可选的参数 * 这个迭代函数依次将集合的每一 ...

  9. LeetCode初级算法之数组:350 两个数组的交集 II

    两个数组的交集 II 题目地址:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/ 给定两个数组,编写一个函数来计算它们的交 ...

随机推荐

  1. HTML创建图像映射,布局,表单

    来源: 实验楼 创建图像映射 在这之前我们动手试验过将图片作为链接来使用,触发链接的方式就是点击图片的任何地方都可以链接到跳转地址,有时我们需要实现,点击图片的不同地方跳转到不同的地方.意思就是,一张 ...

  2. 瞎折腾实录:构建 Armel 版本的 .NET Core 教程和资料资源

    目录 首先我要说明,我失败了~ 我把我的进度和经验放出来,希望能够帮助别人完成编译工作~ 背景:最近接手一个华为某型号的嵌入式设备,需要在上面搭建 .NET Core 环境. 设备是 Armel 架构 ...

  3. python函数的基本语法<一>

    函数: 一次定义,多次调用,函数可以变相看成变量函数的阶段: 1.定义阶段 2调用阶段 形参和实参: 定义阶段的参数叫形参,调用阶段的参数叫实参 函数的几种基本用法: #多变量 def test(na ...

  4. FreeSql v0.11 几个实用功能说明

    FreeSql 开源发布快一年了,立志成为 .Net 平台方便好用的 ORM,仓库地址:https://github.com/2881099/FreeSql 随着不断的迭代更新,越来越稳定,也越来越强 ...

  5. [Verilog] 从系统时钟转换出想要的时钟

    如何50MHZ时钟转换出一个250KHZ的时钟出来? 假如系统时钟是50MHZ,然后想得到250KHZ的新时钟,那么50MHZ / 250KHZ = 200倍,然后令k=200,程序如下: ; :] ...

  6. C#:转义字符 \n 和 \r 的区别

    1.\n,换行符,作用是换行符之后的字符换到下一行: 例如:1234/n567    得出的结果是1234 567 2.而\r,回车符,作用是回车符之后的字符会回到当前行的最前面,把回车符之前的字符覆 ...

  7. nyoj 257 郁闷的C小加(一)(栈、队列)

    郁闷的C小加(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说 ...

  8. 通过C/C++,实现一元一次方程求解

    通过C/C++,实现一元一次方程求解: #include <bits/stdc++.h> using namespace std; string str, str_l, str_r; st ...

  9. Python基础教程(第3版)学习笔记

    第1章.基础 1.几个小知识点 多用 help() 帮助文档 除法运算 / 除法运算,得到结果为浮点数: // 整除运算,得到整数值(向下取整): % 取余操作 (结果符号与除数符号相同),本质上: ...

  10. 如何使用Sping Data JPA更新局部字段

    问题描述 在更新数据时,有时候我们只需要更新一部分字段,其他字段保持不变.Spring Data JPA并未提供现成的接口,直接使用save()更新会导致其他字段被Null覆盖掉. 解决办法 通常有两 ...