当前位置: 首页 > news >正文

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 文件里&#xff0c;多个sheet里的内容2 有的统计需求是&#xff0c;每个表只单表统计&#xff0c;只是进行批量操作3 有的需求是&#xff0c;多个表得某些行列累加等造出来得文件 2 实现方法1 &#xff08;可能只适合VBAEXCEL&#xff0c;不太干净的写法…...

部署问题 | 百度LAC安装部署清单

本项目实现基于LAC提供RESTAPI服务的最小化方案。 依赖&#xff1a; python-3.9.9 百度lac2.X fastAPI uvicorn 首先下载并安装python&#xff0c;本人选择3.9版本。 依次安装&#xff1a; 安装 vc vc_redist.x64.exe 64位&#xff1a;https://download.microsoft.com/…...

提高办公效率的免费网站有哪些

收藏一些免费好用的网站&#xff0c;在我们工作中需要用到的时候可以直接使用&#xff0c;提高我们的工作效率。小编就和大家分享10个可以提高我们办公效率的免费网站。 1.羽兔网软件下载-以设计类软件为主的免费软件下载网站 很多小白都不知道怎么下载软件&#xff0c;往往搜…...

前端开发者需要掌握的具体内容和步骤

第一部分:前端开发实践 前端的工作职称 下面是一个前端开发者在职业发展中各种职称的描述列表. 对于前端开发者最普遍的职称是 "前端开发者" 或者 "前端工程师", 可以根据任何包含 "前端", "客户端", "web UI", "CS…...

杨校老师课堂之基于File类的文件管理器

在日常工作中&#xff0c;经常会遇到批量操作系统文件的事情&#xff0c;通常情况下&#xff0c;只能手动重复的完成批量文件的操作&#xff0c;这样很是费时费力。 本案例要求编写一个文件管理器&#xff0c;实现文件的批量操作。 文件管理器具体功能要求如下&#xff1a; 用…...

java面试算法汇总-数组

数组 [程序一] 两数之和 &#xff1a;给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 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 // 个时间单位&#xff0c;如果外卖店没有订单&#xff0c;则优先级会减少 1 // &#xff0c;最低减到 0 // &#xff1b;而如果外卖店有订单&#xff0c;则…...

Linux进程学习【进程地址】

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f38a;每篇一句&#xff1a; 图片来源 &#x1f383;操作环境&#xff1a; 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 打开一个文件&#xff0c;也可能创建一个文件&#xff0c;返回文件描述符 //头文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> //接口 int open(const char *pa…...

做互联网自媒体创业的月薪收入真的能过万吗?

搞自媒体创业有前途吗&#xff1f;收入月薪过万是真的吗&#xff1f; 自媒体创业是一种新兴的创业方法&#xff0c;它的远景十分广阔。自媒体创业能够让人们在自己的兴趣爱好和专业范畴上发挥自己的才能&#xff0c;一起也能够获得不错的收入。可是&#xff0c;月薪过万并不是…...

Kubernetes (k8s) 污点(Taint)、容忍介绍、示例

Kubernetes (k8s) 污点&#xff08;Taint&#xff09; 是一种机制&#xff0c;用于标记一个节点&#xff08;Node&#xff09;不可被调度的状态。它可以将一个污点标记添加到节点上&#xff0c;以防止 Pod 被调度到该节点上。污点可以用于实现各种策略&#xff0c;例如分离故障…...

多团队协作构建可观测性

实施 SRE 工程&#xff0c;守护系统的可靠性是一个⻓期的工作&#xff0c;需要开发、测试、运维以及 SRE 整个团队的努力。而可观测性平台天生就是为 SRE 工程服务的&#xff0c;它致力于实现 SLO 目标。建立可观测性不仅仅是运维团队的事情&#xff0c;更是整个开发、测试以及…...

100种思维模型之认知资源思维模型-030

我们常说&#xff0c;一个人永远也赚不到自己认知以外的钱&#xff0c;这话的确很有道理&#xff0c;被无数人所推崇。 由此&#xff0c;不难看出&#xff0c;认知在我们的生活起着多么关键的作用。 你的认知层次越高&#xff0c;范围越广&#xff0c;就意味着你这个人所处的阶…...

c/cpp - 多线程/进程 基础

c/cpp - 多线程/进程 基础1. 概念1.1 程序1.2 任务1.3 多任务1.4 进程1.5 线程1.5 线程/进程应用程序/系统资源并发/并行/同步/异步1. 概念 1.1 程序 代码、指令&#xff0c;静态的 1.2 任务 具体要做的实景&#xff0c;可以是基于进程、或基于线程 1.3 多任务 例如&#xff1…...

第55章 头像图片的前端渲染显示

1 WebApi.Controllers.CustomerController.GetCustomerByToken /// <param name"token">1个指定的令牌字符串。</param> /// <summary> /// 【通过令牌获取用户-无需权限】 /// </summary> /// <remarks> /// 摘要&#xff1a; /// …...

vue2 使用 cesium 【第二篇-相机视角移动+添加模型】

vue2 使用 cesium 【第二篇-相机视角移动添加模型】 搞了一阵子 cesium&#xff0c;小白入门&#xff0c;这东西很牛逼&#xff0c;但是感觉这东西好费劲啊&#xff01;网上资料不多&#xff0c;每个人的用法又不一样&#xff0c;操作起来真的是绝绝子。之前写了一篇 vue2 使用…...

C/C++ 操作ini文件(SinpleIni 跨平台库)

最近在学习时&#xff0c;发现自己还不会操作ini文件&#xff0c;想着以前工作时接触到的项目或多或少都要用到ini文件去保存初始化程序的数据&#xff1b;所以赶紧去网上搜索以下C/C操作ini文件都有些什么库可以玩玩&#xff1b;搜索到有&#xff1a; 1. inih&#xff1a;这是…...

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中引入的新特性&#xff0c;stream流通过与Lambda表达式结合&#xff0c;采用函数式编程&#xff0c;简化数组、集合操作&#xff0c;提高效率。 我们操作一个集合&#xff0c;就把他看作一个流&#xff0c;整个流依次执行&#xff0c;&#xff08;可以类比为一个管道&a…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...