Excel·VBA二维数组组合函数、组合求和
目录
- 1,二维数组组合函数
- 举例
- 2,组合求和
之前的文章《Excel·VBA数组组合函数、组合求和》和《Excel·VBA数组排列函数》,都是针对一维数组的组合和排列
二维数组组合:对一个m行*n列的二维数组,每行抽取1个元素进行组合,则共有n ^ m个组合
1,二维数组组合函数
代码思路,类似之前的文章“VBA排列函数”尾数循环的方式
Function combin_arr2d(arr)'arr二维数组,内含m行*n列元素,每行抽取1个进行组合,返回一维嵌套数组,每行为一个组合(数组从1开始计数)Dim i&, j&, m&, n&, kk&, result, k&, x&, r&If LBound(arr) = 0 Or LBound(arr, 2) = 0 Then '转为从1开始计数arr = WorksheetFunction.Transpose(WorksheetFunction.Transpose(arr))End Ifm = UBound(arr): n = UBound(arr, 2): ReDim b&(1 To m - 1)kk = n ^ m: ReDim result(1 To kk): ReDim res(1 To m): k = 1For i = 1 To m - 1 '非尾数部分初始值b(i) = 1NextDoFor i = k To m - 1 '非尾数部分res(i) = arr(i, b(i))NextFor j = 1 To n '仅修改尾数res(m) = arr(m, j): r = r + 1: result(r) = resNextx = m - 1: b(x) = b(x) + 1 '尾数循环结束后,m-1位进位Do While b(x) > n '循环进位,原位重新为1If x > 1 Then b(x) = 1: x = x - 1: b(x) = b(x) + 1 Else Exit DoLoopk = x '非尾数部分,需要重新赋值的开始位置If b(1) > n Then Exit Do '所有组合完成Loop Until r = kkcombin_arr2d = result
End Function
举例
组合结果为一维嵌套数组,写入表格需转为二维数组,以下代码调用了TransposeArr函数,代码详见《Excel·VBA数组行列转换函数》(如需使用代码需复制)
Sub combin_arr2d组合输出()Dim arr, brr, crrarr = [a1].CurrentRegionbrr = combin_arr2d(arr) '调用函数返回组合,一维嵌套数组crr = TransposeArr(brr, 2) '转为二维数组Cells(1, "e").Resize(UBound(crr), UBound(crr, 2)) = crr
End Sub
对表格中A1:C5区域共5行3列,每行抽取每行抽取1个元素进行组合,共有3 ^ 5 = 243个组合,如图(部分截图)

2,组合求和
Sub combin_arr2d组合求和()Dim arr, brr, b, h, h2, i&, temp_sum, write_col$, w&
'--------------------参数填写:arr二维数组,h和值下限,h2和值上限,write_col结果写入列号arr = [a1:c14]: h = 36: h2 = 43write_col = "e": w = 1: Cells(w, write_col).Resize(1, 2) = Array("和值", "组合")tm = Timer: brr = combin_arr2d(arr) '调用函数返回组合,一维嵌套数组For Each b In brrtemp_sum = WorksheetFunction.sum(b)If Abs(Round(temp_sum - h, 6)) < (0.1 ^ 6) Or Abs(Round(temp_sum - h2, 6)) < (0.1 ^ 6) _Or (temp_sum >= h And temp_sum <= h2) Thenw = w + 1: Cells(w, write_col).Resize(1, 2) = Array(temp_sum, Join(b, "+"))End IfNextDebug.Print "组合求和完成,累计用时:" & Format(Timer - tm, "0.00") '耗时
End Sub
对表格中A1:C14区域共14行3列,进行组合共有3 ^ 14 = 4,782,969个组合,求和值范围为36-43的所有组合,共有525,087个组合符合要求,如图(部分截图)

测试耗时秒数
| 组合类型 | 一维数组组合 | 二维数组组合 |
|---|---|---|
| 组合个数 | 5,242,887 | 4,782,969 |
| 耗时秒数 | 2.67 | 60.61 |
组合求和的代码运行速度较《Excel·VBA数组组合函数、组合求和》慢了很多
相关文章:
Excel·VBA二维数组组合函数、组合求和
目录 1,二维数组组合函数举例 2,组合求和 之前的文章《ExcelVBA数组组合函数、组合求和》和《ExcelVBA数组排列函数》,都是针对一维数组的组合和排列 二维数组组合:对一个m行*n列的二维数组,每行抽取1个元素进行组合&a…...
调用自实现MyGetProcAddress获得CreateFileA函数并调用创建写入文件
写文件如下 #include <iostream> #include <Windows.h>typedef HANDLE(WINAPI* CreateFileAFunc)(LPCSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE);DWORD MyGetProcAddress(_In_ HMODULE hModule,_In_ LPCSTR lpProcName ){PIMAGE_DOS_HEADE…...
Leetcode 191.位1的个数
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 1 的个数(也被称为汉明重量)。 提示: 请注意,在某些语言(如 Java)中…...
安防监控视频平台EasyCVR视频汇聚平台调用接口出现跨域现象的问题解决方案
视频监控汇聚EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视…...
Python中的一些常用操作
文章目录 一. Python操作之-- 使用Python 提取PDF文件中的表格数据!二:三: Python中的 staticmethodclassmethod方法四: 反斜杠 \五: 终端的解释器提示符号修改六: python使用json.dumps输出中文七…...
go语言调用python脚本
文章目录 代码gopython 在 go语言中调用 python 程序,你可能会用到 代码 亲测 go 测试 go 文件 func TestR(t *testing.T) {// 设置要执行的Python脚本和参数scriptPath : "../nansen.py"arg1 : "nansen"// 执行Python脚本cmd : exec.Comm…...
2.3 【MySQL】命令行和配置文件中启动选项的区别
在命令行上指定的绝大部分启动选项都可以放到配置文件中,但是有一些选项是专门为命令行设计的,比方说defaults-extra-file 、 defaults-file 这样的选项本身就是为了指定配置文件路径的,再放在配置文件中使用就没啥意义了。 如果同一个启动选…...
外部库/lib/maven依赖项 三者关系
外部库(存放项目初始配置的jar包)(它的文件夹里并没有包含lib文件夹的引的外部的依赖的jar包) lib(存放外部导入到项目的依赖的jar包) maven依赖项(管理项目所有的jar包依赖) 三者存放jar包的关系 项目所依赖的全部的jar包 maven依赖项的jar包 外部库中的jar包 lib中的…...
在线制作作息时间表
时光荏苒,岁月如梭,人们描述时光易逝的句子,多如星河。 一寸光阴一寸金,寸金难买寸光阴。 人生就是一段时间而已,所以我明白了一个道理 人生之中最大的浪费就是时间的浪费 因此我想我们教给我们孩子重要的一课应该也是…...
他们朝我扔泥巴(scratch)
前言 纯~~~属~~~虚~~~构~~~(同学看完短视频要我做,蟹蟹你) 用scratch做的,幼稚得嘞( ̄_ ̄|||)呵呵(强颜欢笑) 完成视频 视频试了好久,就是传不上来,私信我加我…...
docker部署前端项目保姆级教程
本地启动docker(有不会启动的吗?下载docker(小海豚)双击起来就行) 准备阿里云账号(免费) 没有就去注册一个,记住密码后面要用到 官网地址:阿里云登录 - 欢迎登录阿里云…...
《C和指针》笔记13: static关键字总结
这里对static关键字做一下总结,可以回顾一下前面两篇博客的文章。 《C和指针》笔记11: external和internal链接属性 《C和指针》笔记12: 存储类型(自动变量、静态变量和寄存器变量) 当它用于函数定义时,或用于代码块之外的变量声…...
Docker harbor私有仓库部署与管理
一、搭建本地私有仓库二、Harbor私有仓库部署与管理1、Harbor概述2、Harbor的特性3、Harbor的核心组件3.1 Proxy3.2 Registry3.3 Core services3.3.1 UI(harbor-ui)3.3.2 WebHook3.3.3 Token 服务 3.4 Database(harbor-db)3.5 Log…...
解锁Selenium的力量:不仅仅是Web测试
Selenium简介 Selenium,作为Web应用测试的领军者,已经成为了无数开发者和测试人员的首选工具。它不仅仅是一个自动化测试工具,更是一个强大的Web应用交互框架。 Selenium的起源与发展 Selenium的历史可以追溯到2004年,由Jason Hu…...
[SQLITE_ERROR] SQL error or missing database (near “=“: syntax error)【已解决】
这个报的错误是语法错误,但是我并没有看出来这行代码有什么错。 通过排除掉下边两个问题解决的 从增加记录方法复制的下来的代码,只删除了关闭自动提交事务,但是connection.commit忘记删除executeQuery和executeUpdate方法的用法忘记了&…...
【视觉系统】笔芯内径机器视觉测量软硬件方案-康耐德智能
检测内容 笔芯内径机器视觉测量系统 检测要求 精度0.03mm,速度120~180个/分钟 视觉可行性分析 对样品进行了光学实验,并进行图像处理,原则上可以使用机器视觉系统进行测试测量。 结果: 对所有样品进行分析,可以在不…...
将文件夹的名称写到Excel中
查看文件夹名称 os.listdir()函数会返回指定路径下的所有文件和文件夹的名称列表,包括隐藏文件和文件夹 import osfolder_path . # 文件夹路径 # . is当前路径 files os.listdir(folder_path) # 获取文件夹内所有文件的名称列表for filename in files:print(fi…...
关于Vue CLI项目 运行发生了 less-lorder错误的解决方案
Module node found :Error: Can’t resolve ‘less-loader’ 报错 文章目录 Module node found :Error: Cant resolve less-loader 报错解决方案:安装 webpack 和 less安装 less-loader 问题: 在运行vue项目的时候发生: Module not found: Er…...
【Qt学习】02:信号和槽机制
信号和槽机制 OVERVIEW 信号和槽机制一、系统自带信号与槽二、自定义信号与槽1.基本使用student.cppteacher.cppwidget.cppmain.cpp 2.信号与槽重载student.cppteacher.cppwidget.cppmain.cpp 3.信号连接信号4.Lambda表达式5.信号与槽总结 信号槽机制是 Qt 框架引以为豪的机制之…...
软件工程(十三) 设计模式之结构型设计模式(一)
前面我们记录了创建型设计模式,知道了通过各种模式去创建和管理我们的对象。但是除了对象的创建,我们还有一些结构型的模式。 1、适配器模式(Adapter) 简要说明 将一个类的接口转换为用户希望得到的另一个接口。它使原本不相同的接口得以协同工作。 速记关键字 转换接…...
PP-DocLayoutV3参数详解:text/title/table/figure等11类版面区域置信度解析
PP-DocLayoutV3参数详解:text/title/table/figure等11类版面区域置信度解析 1. 引言:为什么版面分析需要“置信度”? 想象一下,你拿到一份扫描的合同,想用OCR(文字识别)把它变成可编辑的电子版…...
ide-eval-resetter:突破JetBrains IDE试用期限制的创新方案——2026开发者必备指南
ide-eval-resetter:突破JetBrains IDE试用期限制的创新方案——2026开发者必备指南 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 问题引入:JetBrains IDE试用期限制的痛点分析 作为开发…...
智能体AI崛起:本体论如何赋能药物研发新纪元?——2026智能体年深度解析
智能体AI作为生成式AI的进化方向,赋予AI决策和行动能力,在生命科学领域应用前景广阔。本文探讨了智能体AI的定义、架构及应用,重点分析了本体论如何通过语义标准化和跨系统映射,解决智能体在处理复杂科学知识、实现跨语言和系统语…...
如何实现格式保留翻译?Hunyuan MT1.5结构化文本处理实战解析
如何实现格式保留翻译?Hunyuan MT1.5结构化文本处理实战解析 1. 引言:当翻译遇到格式难题 你有没有遇到过这样的尴尬场景?好不容易找到一款翻译工具,把英文网页翻译成了中文,结果发现所有链接都失效了,排…...
如何彻底解决ComfyUI-Manager安装难题:终极完整指南
如何彻底解决ComfyUI-Manager安装难题:终极完整指南 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various custom …...
Qwen3-ASR-1.7B效果展示:实测多语言语音识别,准确率超高
Qwen3-ASR-1.7B效果展示:实测多语言语音识别,准确率超高 1. 开篇:一款让人惊艳的语音识别模型 最近测试了Qwen3-ASR-1.7B这款语音识别模型,结果让我大吃一惊。作为一款中等规模的模型,它在多语言识别上的表现完全不输…...
AI结对编程:与快马AI对话式迭代,智能优化你的系统ER图设计
AI结对编程:与快马AI对话式迭代,智能优化你的系统ER图设计 最近在做一个员工管理系统的数据库设计,发现ER图设计是个需要反复推敲的过程。传统方式下,每次修改都要手动调整图形,效率很低。直到尝试了InsCode(快马)平台…...
避开深沟槽工艺的“坑”:从DLTS数据到TCAD仿真的硅光电二极管陷阱态优化实战
硅光电二极管陷阱态优化的工程实践:从DLTS表征到TCAD仿真 在半导体制造领域,深沟槽隔离(DTI)工艺虽然能有效解决器件间的串扰问题,但其引入的界面陷阱态却成为光电二极管性能提升的"隐形杀手"。工艺工程师们…...
webMAN-MOD终极指南:如何在PS3上安装这款强大的全能插件
webMAN-MOD终极指南:如何在PS3上安装这款强大的全能插件 【免费下载链接】webMAN-MOD Extended services for PS3 console (web server, ftp server, netiso, ntfs, ps3mapi, etc.) 项目地址: https://gitcode.com/gh_mirrors/we/webMAN-MOD 你是否还在为PS3…...
探秘HackGPT:一款强大的AI辅助开发工具
探秘HackGPT:一款强大的AI辅助开发工具 【免费下载链接】hackGPT I leverage OpenAI and ChatGPT to do hackerish things 项目地址: https://gitcode.com/GitHub_Trending/ha/hackgpt 在快速发展的科技领域,人工智能(AI)已…...
