Excel·VBA二维数组组合函数的应用实例
看到一个问题《关于#穷举#的问题,如何解决?(语言-开发语言)》,对同一个数据存在“是/否”2种状态,判断其是否参与计算,并输出一系列数据的“是/否”状态的结果

目录
- 方法1:二维数组组合函数
- 结果
- 方法2:二进制数
- 结果
方法1:二维数组组合函数
之前的文章《Excel·VBA二维数组组合函数、组合求和》,可以对A-B列每行选择一种状态,返回所有状态的组合,对“原值”依次累加C-D列数值,判断是否符合F2:F3所需结果。以下代码调用了combin_arr2d函数,如需使用代码需复制
Sub 穷举开关状态1()Dim arr, c, d, v, v1, v2, brr, b, sum1, sum2, write_col&, i&arr = [a2:b9]: v = [f1]: v1 = [f2]: v2 = [f3]write_col = 8 '输出结果写入起始列号c = [c2].Resize(8, 1): c = WorksheetFunction.Transpose(c) '单列转一维数组d = [d2].Resize(8, 1): d = WorksheetFunction.Transpose(d): tm = Timerbrr = combin_arr2d(arr) '调用函数返回组合,一维嵌套数组For Each b In brrsum1 = v: sum2 = vFor i = 1 To UBound(b)If b(i) = "是" ThenIf Len(c(i)) Then sum1 = Application.Evaluate(sum1 & CStr(c(i)))If Len(d(i)) Then sum2 = Application.Evaluate(sum2 & CStr(d(i)))End IfNextIf Abs(Round(sum1 - v1, 6)) < (0.1 ^ 6) And Abs(Round(sum2 - v2, 6)) < (0.1 ^ 6) ThenCells(2, write_col).Resize(UBound(b), 1) = WorksheetFunction.Transpose(b)write_col = write_col + 1End IfNextDebug.Print "累计用时:" & Format(Timer - tm, "0.00") '耗时
End Sub
注意:从上到下运算累计计算结果,并非将计算式叠加后一次性计算结果
结果

方法2:二进制数
开关只有“是/否”2种状态,那么也可以用0和1表示,这与二进制数一样,之前的文章《python从数组中找出所有和为M的组合》,采用过这种方法查找组合求和的结果,那么本问题也可尝试
n个元素的全组合总数=2 ^ n,故8个元素的全组合数为256个,即0-255转化为二进制数(例如255的二进制数为“11111111”,表示8个元素全部选择)
Sub 穷举开关状态2()Dim c, d, v, v1, v2, s$, s1$, sum1, sum2, write_col&, i&, x&v = [f1]: v1 = [f2]: v2 = [f3]: Dim res(1 To 8)write_col = 8 '输出结果写入起始列号c = [c2].Resize(8, 1): c = WorksheetFunction.Transpose(c) '单列转一维数组d = [d2].Resize(8, 1): d = WorksheetFunction.Transpose(d): tm = TimerFor x = 1 To 2 ^ 8 - 1 '注意-512 < x < 511s = CStr(WorksheetFunction.Dec2Bin(x)): s = Format(s, "00000000")sum1 = v: sum2 = vFor i = 1 To Len(s)s1 = Mid(s, i, 1): res(i) = IIf(s1 = "1", "是", "否")If s1 = "1" ThenIf Len(c(i)) Then sum1 = Application.Evaluate(sum1 & CStr(c(i)))If Len(d(i)) Then sum2 = Application.Evaluate(sum2 & CStr(d(i)))End IfNextIf Abs(Round(sum1 - v1, 6)) < (0.1 ^ 6) And Abs(Round(sum2 - v2, 6)) < (0.1 ^ 6) ThenCells(2, write_col).Resize(UBound(res), 1) = WorksheetFunction.Transpose(res)write_col = write_col + 1End IfNext
End Sub
此种方法不足之处:十进制转二进制Dec2Bin函数,取值范围太小,超过511就不适用;元素个数变化时需要修改第3、5-8行的代码,较为麻烦
结果

同样的原始数据,输出结果相同,但顺序不同
相关文章:
Excel·VBA二维数组组合函数的应用实例
看到一个问题《关于#穷举#的问题,如何解决?(语言-开发语言)》,对同一个数据存在“是/否”2种状态,判断其是否参与计算,并输出一系列数据的“是/否”状态的结果 目录 方法1:二维数组组合函数结果 方法2&am…...
hive anti join 的几种写法
t_a 表的记录如下 c1 | :———— | a | b | c | 生成 SQL 如下: create table t_a(c1 string); insert into t_a values("a"),("b"),("c");t_b 表的记录如下 c1bm 生成 SQL 如下: create table t_b(c1 string); in…...
使用Android原生制作毛玻璃效果图片
毛玻璃效果,也被称为模糊效果,是许多现代应用中流行的一种视觉效果。在 Android 中,我们可以通过多种方式实现该效果。本文将探讨如何使用 Android 原生的 Bitmap 类和 RenderScript 来实现毛玻璃效果。 1. 准备工作 首先,你需要…...
软件设计的七大原则
一. 软件设计的七大原则 单一职责原则:一个类只负责一个功能领域中的饿相应职责。开闭原则:对扩展开放,对修改关闭,多使用抽象类和接口,应该尽量使这个系统能够扩展新的功能,通过扩展来实现变化࿰…...
Windows下安装配置Nginx
nginx安装 官网下载地址 https://nginx.org/en/download.html 推荐使用稳定版本 截止时间2023年9月5日稳定版本为 1.24.0 百度网盘 链接:https://pan.baidu.com/s/1cXm-jN2fMzKdVMRhbG72Fg 提取码:9hcq 下载完成以后,得到nginx压缩包; 双击启动nginx.…...
数据结构类型
1.在C和C中static关键字的用法 在C中 1.static修饰未初始化全局变量,默认结果为0 2.static修饰局部变量,延长生命周期,生命周期不是作用域,它依旧是局部变量 3.static修饰函数只能在当前文件中调用,不可用跨文件调用…...
WPF元素绑定
简单的说,数据绑定是一种关系,该关系告诉WPF从源对象提取一些信息,并用这些信息设置目标对象的属性。目标属性始终是依赖属性,通常位于WPF元素中——毕竟,WPF数据绑定的最终目标是在用户界面中显示一些信息。然而&…...
centos编译升级cmake,痛苦的Linux小白
环境 root 用户 下载 cmake官网下载地址:https://cmake.org/download/ 获取下载地址,右击cmake-3.27.4.tar.gz 命令行输入链接地址,下载 wget https://github.com/Kitware/CMake/releases/download/v3.27.4/cmake-3.27.4.tar.gz解压 tar -zx…...
Unity资源无法下载 反复提示需同意Terms of Service和EULA 同意后无效的解决方案
前言 最近在玩Unity,跟着tutorial做点项目,但是在下载免费资源时,只有从网站上点“打开Unity”,才能在本地Unity Editor的Package Manager里找到这个资源(且点一下下面的刷新就没有了),并且点击…...
记录--vue 拉伸指令
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在我们项目开发中,经常会有布局拉伸的需求,接下来 让我们一步步用 vue指令 实现这个需求 动手开发 在线体验 codesandbox.io/s/dawn-cdn-… 常规使用 解决拉伸触发时机 既然我们使用了指令的方式…...
前端缓存方法有哪些?cookie有哪些属性?
这里写目录标题 前端缓存方法有哪些:cookie有哪些属性? 前端缓存方法有哪些: Browser Cache(浏览器缓存): 当浏览器请求一个资源(例如图片、CSS、JS 文件)时,它会首先检查自己的缓存…...
在PHP8中遍历数组-PHP8知识详解
所谓遍历数组就是把数组中的变量值读取出来。遍历数组中的所有元素对程序员来说是经常使用的操作,通过遍历数组可以完成数组元素的查询工作。 这好比你去商场买东西一样,要买什么东西,就去该区域浏览一遍,以便找出适合自己的产品…...
代码随想录算法训练营之JAVA|第四十三天|139. 单词拆分
今天是第 天刷leetcode,立个flag,打卡60天。 算法挑战链接 139. 单词拆分https://leetcode.cn/problems/word-break/ 第一想法 看完之后完全没有想法。 看完代码随想录之后的想法 这是一个完全背包的问题,使用完全背包的解法。 单词就…...
解决VUE3项目部署后存在缓存页面不更新的问题
方法一: 找到项目中的index.html文件,在头部加上以下代码 <meta http-equiv"Pragma" content"no-cache"> <meta http-equiv"Cache-control" content"no-cache"> <meta http-equiv"Cache&…...
私募证券基金动态-23年8月报
成交量:8月日均8,252.00亿元 8月A股两市日均成交8,252.00亿元,环比下降12.23%、同比下降18.11%。8月整体23个交易日,仅有3个交易日单日成交金额过万亿,且成交量起伏较大,单日成交金额最低仅有6805.32亿元(…...
Qt/C++音视频开发49-推流到各种流媒体服务程序
一、前言 最近将推流程序完善了很多功能,尤其是增加了对多种流媒体服务程序的支持,目前支持mediamtx、LiveQing、EasyDarwin、nginx-rtmp、ZLMediaKit、srs、ABLMediaServer等,其中经过大量的对比测试,个人比较建议使用mediamtx和…...
深度学习学习笔记——解决过拟合问题的方法:权重衰减和暂退法,与正则化之间的关系
解决过拟合问题是机器学习和深度学习中关键的任务之一,因为它会导致模型在训练数据上表现良好,但在未见数据上表现不佳。以下是一些解决过拟合问题的常见方法: 增加训练数据: 增加更多的训练数据可以帮助模型更好地捕捉数据的真实…...
【Leetcode Sheet】Weekly Practice 5
Leetcode Test 823 带因子的二叉树(8.29) 给出一个含有不重复整数元素的数组 arr ,每个整数 arr[i] 均大于 1。 用这些整数来构建二叉树,每个整数可以使用任意次数。其中:每个非叶结点的值应等于它的两个子结点的值的乘积。 满足条件的二…...
STM32 SPI对存储芯片发送写是能命令后一直忙等待
我采用CUBE配置的SPI外设,对NSS引脚选择了硬件输出,这种方式对读取命令没有影响,但是对写命令有,当我发送写是能命令后,读取状态寄存器的值一直都是忙,我猜测这可能是硬件控制NSS引脚后,对于HAL…...
MySql学习笔记01——SQL的相关术语
SQL(相关术语) 数据库database 有组织的存储数据的容器,通常是一个文件或者一组文件 表table 存储数据的文件称为表,表是某种特定数据的结构化清单。 表可以保存顾客清单、产品目录,或者其他信息清单。 要注意的是&am…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
