原创: 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. try-with-resources优先于try-finally

    参考资料:<Effective Java>.<Java核心技术 卷1>.https://www.cnblogs.com/flyingeagle/articles/1015292 ...

  2. nyoj 458-小光棍数 (471)

    458-小光棍数 内存限制:64MB 时间限制:1000ms 特判: No 通过数:6 提交数:6 难度:1 题目描述: 最近Topcoder的XD遇到了一个难题,倘若一个数的三次方的后三位是111, ...

  3. mysql基础之数据类型

    一.整型 分为:tinyint .smallint .mediumint .int .bigint 常用的 分为以下三项: tinyint. smallint.int 数据类型 存储范围 字节 tin ...

  4. centos 更换用户密码

    腾讯云报告了我的服务器被暴力破解了.... 因此需要更换更复杂的password, 命令为:passwd  用户名,例如下我要更换root的password [root@VM_0_4_centos ~ ...

  5. PostGIS 用Navicat工具添加自增

    1.新建查询,新增序列(从66开始,每次自增1): CREATE SEQUENCE seq_area INCREMENT 1 MINVALUE 66 MAXVALUE 999999999 START ...

  6. WPF 修改屏幕DPI,会触发控件重新加载Unload/Load

    修改屏幕DPI,会触发控件的Unloaded/Loaded 现象/重现案例 对Unloaded/Loaded的印象: FrameworkElement, 第一次加载显示时,会触发Loaded.元素被释 ...

  7. Hadoop之HDFS文件系统(二)

    HDFS客户端 通过IO流操作HDFS HDFS文件上传 @Test public void putFileToHDFS() throws Exception{ // 1 创建配置信息对象 Confi ...

  8. java8 Optional优雅非空判断

    java8 Optional优雅非空判断 import java.util.ArrayList;import java.util.List;import java.util.Optional; pub ...

  9. 【集训Day3 单调队列】【2018寒假集训Day 5更新】最大子序列和

    最大子序列和(maxsum) [问题描述] 输入一个长度为n的整数序列(A1,A2,……,An),从中找出一段连续的长度不超过M的子序列,使得这个序列的和最大. 例如: 序列 1, -3, 5, 1, ...

  10. Fortran文件读写--xdd

    1.常规读写 program FileWriteRead implicit none open(unit=,file="F:\desktop\File.txt") !open(un ...