VBA小模板,跨表统计的2种写法
目标
- 1 统计一个excel 文件里,多个sheet里的内容
- 2 有的统计需求是,每个表只单表统计,只是进行批量操作
- 3 有的需求是,多个表得某些行列累加等
造出来得文件

2 实现方法1 (可能只适合VBA+EXCEL,不太干净的写法)
2.1 基本思路
- 双层循环
- 一层是循环各个sheet表
- 一层是在某个sheet表内取数据,从头取到尾(需要判断下取第几列,取到哪行为止)
Sub t100()
Dim sh1 As Object
Set sh1 = ThisWorkbook.Worksheets("sheet1")
sh1.Columns(6).Clear '重置输出区
sh1.Cells(1, 6) = "跨表sum"Dim j As ObjectFor Each j In ThisWorkbook.Worksheetsi = 2j.Cells(2, 4).Clear '重置输出单元格,避免污染Do While j.Cells(i, 2) <> ""sh1.Cells(i, 6) = j.Cells(i, 2) + sh1.Cells(i, 6) '跨表对应行累加统计j.Cells(2, 4) = j.Cells(i, 2) + j.Cells(2, 4) '单表多行累加i = i + 1LoopNext
End Sub
2.2 用EXCEL表的单元格,当变量来存储数据
(其实我反思,EXCEL只应用来显示可能更好)
- 如果是累加一个sheet的数据,存在一个变量/1个单元格就行
- 如果是累加多个sheet的数据,需要存在多个excel单元格/ 1行/1列等
2.3 重点1
- 方法1直接把 j当作了worksheets对象
Dim j As Object
For Each j In ThisWorkbook.Worksheets
2.4 方法1,需要重置输出区
- 为什么呢?
- 因为EXCEL不是变量,数组,是文件,是可以保存数据的
- 不像 程序里的变量,数组,程序开始运行,创建--生---------程序运行结束,销毁--灭,
- 所以有可能上次运行的数据( 可以叫脏数据吧)还存着,会和新运行的结果累积起来
- 所以就需要 先把EXCEL的输出区域重置才行
2.5 方法1得历史改进过程,没什么用,有兴趣得看看
Sub t1()
Dim sh1 As Object
Set sh1 = ThisWorkbook.Worksheets("sheet1")
Dim j As ObjectFor Each j In ThisWorkbook.WorksheetsFor i = 2 To 99 '写死99这种这个很不好,需要线判断最大行数sh1.Cells(i, 6) = j.Cells(i, 2) + sh1.Cells(i, 6)NextNext
End SubSub t11()
Dim sh1 As Object
Set sh1 = ThisWorkbook.Worksheets("sheet1")
Dim j As ObjectFor Each j In ThisWorkbook.Worksheetsi = 2Do While j.Cells(i, 2) <> ""sh1.Cells(i, 6) = j.Cells(i, 2) + sh1.Cells(i, 6)i = i + 1LoopNext
End SubSub t12()
Dim j As ObjectFor Each j In ThisWorkbook.Worksheetsi = 2Do While j.Cells(i, 2) <> ""j.Cells(2, 4) = j.Cells(i, 2) + j.Cells(2, 4)i = i + 1LoopNext
End Sub
3 方法2: 运算和存储都在程序的变量里进行,EXCEL只存储和显示最终结果
3.1 代码写法思路和方法1完全不同
- 运算和存储都在程序的变量里进行,EXCEL只存储和显示最终结果
- VBA 和像方法1那么干,还是因为是内置在EXCEL里的吧
- 一般程序还是都把过程放在程序内解决,
- EXCEL表只是存储最终结果 & 显示出来
Sub t200()'核心差异
'方法2,把j定义为 sheet的序号,而b作为worksheets对象,Set b = Worksheets(j)'
'对应方法1,直接把j当作了worksheets对象'方法1,需要重置输出区
'方法2,因为都是用变量中转的,单数据存1个变量里,多数据存在数组,因为变量做了重置,所以输出区域就不做重置了Dim i, j, h
Dim b As Object
Dim sh1 As Object
Set sh1 = ThisWorkbook.Worksheets("sheet1")
Dim arr1()For j = 1 To ThisWorkbook.Worksheets.Counth = 0 '每个表分表统计i = 2 '每个表都从第2行开始,重置i行数'数组不需要重置?因为这个数组不需要循环,就是要一次性累加'每次运行变量和数组都是消灭后重新生产的,不会像excel这种外部文件记录了数据' 重置变量和数组是为了程序连续运行期间问题,就是为了,循环,下次循环冲头再来Set b = Worksheets(j)Do While b.Cells(i, 2) <> ""ReDim Preserve arr1(2 To i) '因为i在不同的表,无法确认具体数值,有数据的行数都不同arr1(i) = b.Cells(i, 2) + arr1(i) '跨表对应行累加统计,因为是多个数据,需要用数组h = h + b.Cells(i, 2) '单表多行累加i = i + 1Loopb.Cells(2, 4) = h 'h本身做了重置,因此输出单元格Cells(2, 4) 不需要再重置NextFor i = LBound(arr1) To UBound(arr1)sh1.Cells(i, 6) = arr1(i)NextEnd Sub
3.2 定义sheet 不同
- 方法2,把j定义为 sheet的序号,而b作为worksheets对象,Set b = Worksheets(j)'
- 对应方法1,直接把j当作了worksheets对象
3.3 不需要重置EXCEL的 存储+显示区
- 方法1,需要重置输出区
- 因为方法1,把那些区域又做显示,又做存储就有了需要重置清除的问题
- '方法2,因为都是用变量中转的,单数据存1个变量里,多数据存在数组,因为变量做了重置,所以输出区域就不做重置了
可以看到代码里
EXCEL输出区域,只是从 代码里取变量 或数组内容进行显示,和EXCEL本身区域的内容没关系,输出后会直接覆盖老数据
(不过也有可能有问题,就是老数据的行数比新的多,导致这样还是有脏数据,嘿嘿)
b.Cells(2, 4) = h
For i = LBound(arr1) To UBound(arr1)
sh1.Cells(i, 6) = arr1(i)
Next
3.4 代码内部的重置, 这个主要和循环有关系
- 数组不需要重置?因为这个数组不需要循环,就是要一次性累加
- 每次运行变量和数组都是消灭后重新生产的,不会像excel这种外部文件记录了数据
- 重置变量和数组是为了程序连续运行期间问题,就是为了,循环,下次循环重头再来
3.5 方法2的历史代码,没啥用
Sub t2()
Dim i, j, h
Dim b As ObjectFor j = 1 To ThisWorkbook.Worksheets.Counth = 0 '每个表分表统计i = 2 '每个表都从第2行开始,重置i行数Set b = Worksheets(j)Do While b.Cells(i, 2) <> ""h = h + b.Cells(i, 2)i = i + 1Loopb.Cells(2, 4) = hNextEnd SubSub t21()
Dim i, j
Dim b As Object
Dim sh1 As Object
Set sh1 = ThisWorkbook.Worksheets("sheet1")For j = 1 To ThisWorkbook.Worksheets.Counti = 2 '每个表都从第2行开始,重置i行数Set b = Worksheets(j)Do While b.Cells(i, 2) <> ""sh1.Cells(i, 6) = b.Cells(i, 2) + sh1.Cells(i, 6)i = i + 1LoopNextEnd Sub
相关文章:
VBA小模板,跨表统计的2种写法
目标 1 统计一个excel 文件里,多个sheet里的内容2 有的统计需求是,每个表只单表统计,只是进行批量操作3 有的需求是,多个表得某些行列累加等造出来得文件 2 实现方法1 (可能只适合VBAEXCEL,不太干净的写法…...
部署问题 | 百度LAC安装部署清单
本项目实现基于LAC提供RESTAPI服务的最小化方案。 依赖: python-3.9.9 百度lac2.X fastAPI uvicorn 首先下载并安装python,本人选择3.9版本。 依次安装: 安装 vc vc_redist.x64.exe 64位:https://download.microsoft.com/…...
提高办公效率的免费网站有哪些
收藏一些免费好用的网站,在我们工作中需要用到的时候可以直接使用,提高我们的工作效率。小编就和大家分享10个可以提高我们办公效率的免费网站。 1.羽兔网软件下载-以设计类软件为主的免费软件下载网站 很多小白都不知道怎么下载软件,往往搜…...
前端开发者需要掌握的具体内容和步骤
第一部分:前端开发实践 前端的工作职称 下面是一个前端开发者在职业发展中各种职称的描述列表. 对于前端开发者最普遍的职称是 "前端开发者" 或者 "前端工程师", 可以根据任何包含 "前端", "客户端", "web UI", "CS…...
杨校老师课堂之基于File类的文件管理器
在日常工作中,经常会遇到批量操作系统文件的事情,通常情况下,只能手动重复的完成批量文件的操作,这样很是费时费力。 本案例要求编写一个文件管理器,实现文件的批量操作。 文件管理器具体功能要求如下: 用…...
java面试算法汇总-数组
数组 [程序一] 两数之和 :给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer,…...
Docker-Mysql主从复制
步骤 1、新建主服务器容器实例3307 docker run -d -p 3307:3306 --privileged=true -v /tmp/mysql_master/log:/var/log/mysql -v /tmp/mysql_master/data:/var/lib/mysql -v /tmp/mysql_master/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root --name mysql-master mys…...
(模拟)1241. 外卖店优先级
目录 题目链接 一些话 流程 套路 ac代码 题目链接 1241. 外卖店优先级 - AcWing题库 一些话 流程 // // 每经过 1 // 个时间单位,如果外卖店没有订单,则优先级会减少 1 // ,最低减到 0 // ;而如果外卖店有订单,则…...
Linux进程学习【进程地址】
✨个人主页: Yohifo 🎉所属专栏: Linux学习之旅 🎊每篇一句: 图片来源 🎃操作环境: CentOS 7.6 阿里云远程服务器 Perseverance is not a long race; it is many short races one after another…...
系统调用——文件操作相关函数
1.open open, creat - open and possibly create a file or device 打开一个文件,也可能创建一个文件,返回文件描述符 //头文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> //接口 int open(const char *pa…...
做互联网自媒体创业的月薪收入真的能过万吗?
搞自媒体创业有前途吗?收入月薪过万是真的吗? 自媒体创业是一种新兴的创业方法,它的远景十分广阔。自媒体创业能够让人们在自己的兴趣爱好和专业范畴上发挥自己的才能,一起也能够获得不错的收入。可是,月薪过万并不是…...
Kubernetes (k8s) 污点(Taint)、容忍介绍、示例
Kubernetes (k8s) 污点(Taint) 是一种机制,用于标记一个节点(Node)不可被调度的状态。它可以将一个污点标记添加到节点上,以防止 Pod 被调度到该节点上。污点可以用于实现各种策略,例如分离故障…...
多团队协作构建可观测性
实施 SRE 工程,守护系统的可靠性是一个⻓期的工作,需要开发、测试、运维以及 SRE 整个团队的努力。而可观测性平台天生就是为 SRE 工程服务的,它致力于实现 SLO 目标。建立可观测性不仅仅是运维团队的事情,更是整个开发、测试以及…...
100种思维模型之认知资源思维模型-030
我们常说,一个人永远也赚不到自己认知以外的钱,这话的确很有道理,被无数人所推崇。 由此,不难看出,认知在我们的生活起着多么关键的作用。 你的认知层次越高,范围越广,就意味着你这个人所处的阶…...
c/cpp - 多线程/进程 基础
c/cpp - 多线程/进程 基础1. 概念1.1 程序1.2 任务1.3 多任务1.4 进程1.5 线程1.5 线程/进程应用程序/系统资源并发/并行/同步/异步1. 概念 1.1 程序 代码、指令,静态的 1.2 任务 具体要做的实景,可以是基于进程、或基于线程 1.3 多任务 例如࿱…...
第55章 头像图片的前端渲染显示
1 WebApi.Controllers.CustomerController.GetCustomerByToken /// <param name"token">1个指定的令牌字符串。</param> /// <summary> /// 【通过令牌获取用户-无需权限】 /// </summary> /// <remarks> /// 摘要: /// …...
vue2 使用 cesium 【第二篇-相机视角移动+添加模型】
vue2 使用 cesium 【第二篇-相机视角移动添加模型】 搞了一阵子 cesium,小白入门,这东西很牛逼,但是感觉这东西好费劲啊!网上资料不多,每个人的用法又不一样,操作起来真的是绝绝子。之前写了一篇 vue2 使用…...
C/C++ 操作ini文件(SinpleIni 跨平台库)
最近在学习时,发现自己还不会操作ini文件,想着以前工作时接触到的项目或多或少都要用到ini文件去保存初始化程序的数据;所以赶紧去网上搜索以下C/C操作ini文件都有些什么库可以玩玩;搜索到有: 1. inih:这是…...
Cadence Allegro 导出Design Rules Check(DRC)Report报告详解
⏪《上一篇》 🏡《上级目录》 ⏩《下一篇》 目录 1,概述2,Design Rules Check(DRC)Report作用3,Design Rules Check(DRC)Report示例4,Design Rules Check(DRC)Report导出方法4.1,方法14.2,方法2B站关注“硬小...
Java的stream流
Java 8中引入的新特性,stream流通过与Lambda表达式结合,采用函数式编程,简化数组、集合操作,提高效率。 我们操作一个集合,就把他看作一个流,整个流依次执行,(可以类比为一个管道&a…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
