vba学习系列(9)--按需求计数单元格数量

系列文章目录

文章目录

  • 系列文章目录
  • 前言
  • 一、按需求计数单元格数量
    • 1.需求
  • 二、使用步骤
    • 1.vba源码
    • 2.整理后
  • 总结


前言

一、按需求计数单元格数量

1.需求

一个表中有多个类型的单元格内容,比如:文字、数字、特殊字符、字母+数字……
我们要计数字母+数字的单元格数量
同时提取字母+数字单元格的数字部分,判断数字部分是否相同,然后计数不同的单元格数量

二、使用步骤

1.vba源码

代码如下(示例):

Sub CountSpecificFormatStrings()Dim rng As RangeDim cell As RangeDim count, countkey As IntegerDim regex, regex1 As ObjectDim cellAddress As StringDim numbers As StringDim matches As ObjectDim match As VariantDim cellNumber As StringDim cellValue As StringDim myCollection As CollectionSet myCollection = New CollectionDim value As VariantDim lastValue As VariantDim uniqueCount As IntegerDim ws As WorksheetSet ws = ActiveSheetDim cellValueCollection As CollectionDim i, j, k As IntegerDim valueToAdd As StringDim key As VariantDim dict As ObjectDim myArray As VariantDim item, ele As VariantDim elements As VariantDim uniquekeys As New CollectionuniqueCount = 0lastValue = ""Set cellCollection = New CollectionSet dict = CreateObject("Scripting.Dictionary")' 设置要检查的范围Set rng = ws.Range("A3:DR200") ' 假设我们在Sheet1的A1:A10范围内查找count = 0' 创建正则表达式对象Set regex = CreateObject("VBScript.RegExp")' 设置正则表达式模式:一个字母后面跟随任意数量的数字' 这里的模式是 [A-Za-z][0-9]+,其中 [A-Za-z] 匹配任意一个字母,[0-9]+ 匹配一个或多个数字With regex.Global = True.IgnoreCase = True.pattern = "[A-Za-z][0-9]+"End With' 创建正则表达式对象Set regex1 = CreateObject("VBScript.RegExp")' 设置正则表达式模式:一个字母后面跟随任意数量的数字' 这里的模式是 [A-Za-z][0-9]+,其中 [A-Za-z] 匹配任意一个字母,[0-9]+ 匹配一个或多个数字With regex1.Global = True.IgnoreCase = True.pattern = "\d+"End With' 遍历单元格For Each cell In rngIf regex.Test(cell.value) Then ' 如果单元格匹配正则表达式count = count + 1 ' 增加计数Debug.Print "行:" & cell.Row & ",列:" & cell.Column & ",值:" & cell.value'Set matches = regex1.Execute(cell.Value)'For Each match In matches'outputString = outputString & match.Value'Debug.Print outputString'Next match'Debug.Print cell.Row & cell.Column'Debug.Print Cells(cell.Row, cell.Column).ValueSet matches = regex1.Execute(Cells(cell.Row, cell.Column).value)For Each match In matchesmyCollection.Add matchNext matchEnd IfNext cellFor Each item In myCollection'Debug.Print itemNextcountkey = myCollection.countFor i = myCollection.count To 1 Step -1For j = 1 To i - 1If myCollection(i) = myCollection(j) ThenmyCollection.Remove (i)countkey = countkey - 1Exit ForEnd IfNext jNext iFor Each ele In myCollectionDebug.Print eleNext elews.Cells(2, 69).value = countkey' 显示计数结果MsgBox "有 " & countkey & " 个单元格符合指定格式。"
End Sub

2.整理后

代码如下(示例):

Sub CountSpecificFormatStrings()Dim rng As RangeDim cell As RangeDim count, countkey As IntegerDim regex As ObjectDim matches As ObjectDim match As VariantDim myCollection As CollectionSet myCollection = New CollectionDim ws As WorksheetSet ws = ActiveSheetDim i, j As IntegerDim key As VariantDim item, ele As Variant' 设置要检查的范围Set rng = ws.Range("A3:DR200") ' 假设我们在Sheet1的A1:A10范围内查找count = 0' 创建正则表达式对象Set regex = CreateObject("VBScript.RegExp")' 设置正则表达式模式:一个字母后面跟随任意数量的数字' 这里的模式是 [A-Za-z][0-9]+,其中 [A-Za-z] 匹配任意一个字母,[0-9]+ 匹配一个或多个数字With regex.Global = True.IgnoreCase = True.pattern = "[A-Za-z][0-9]+"End With' 创建正则表达式对象Set regex1 = CreateObject("VBScript.RegExp")' 设置正则表达式模式:一个字母后面跟随任意数量的数字' 这里的模式是 [A-Za-z][0-9]+,其中 [A-Za-z] 匹配任意一个字母,[0-9]+ 匹配一个或多个数字With regex1.Global = True.IgnoreCase = True.pattern = "\d+"End With' 遍历单元格For Each cell In rngIf regex.Test(cell.value) Then ' 如果单元格匹配正则表达式count = count + 1 ' 增加计数Debug.Print "行:" & cell.Row & ",列:" & cell.Column & ",值:" & cell.value'Set matches = regex1.Execute(cell.Value)'For Each match In matches'outputString = outputString & match.Value'Debug.Print outputString'Next match'Debug.Print cell.Row & cell.Column'Debug.Print Cells(cell.Row, cell.Column).ValueSet matches = regex1.Execute(Cells(cell.Row, cell.Column).value)For Each match In matchesmyCollection.Add matchNext matchEnd IfNext cellFor Each item In myCollection'Debug.Print itemNextcountkey = myCollection.countFor i = myCollection.count To 1 Step -1For j = 1 To i - 1If myCollection(i) = myCollection(j) ThenmyCollection.Remove (i)countkey = countkey - 1Exit ForEnd IfNext jNext iFor Each ele In myCollectionDebug.Print eleNext elews.Cells(2, 69).value = countkey' 显示计数结果MsgBox "有 " & countkey & " 个单元格符合指定格式。"
End Sub

总结

分享:
读过的书是不是有很多不记得了,但是它一直都是潜在的,它在我们的出言有尺上,嬉闹有度上,做事有余上,说话有德上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/889079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JAVAFX】普通的确认对话框使用

普通alert确认对话框 Alert alert new Alert(Alert.AlertType.CONFIRMATION, "确定要关闭窗口吗&#xff1f;", ButtonType.YES, ButtonType.NO);alert.setHeaderText(null);alert.initOwner(primaryStage);Optional<ButtonType> result alert.showAndWait()…

opencv获取摄像头的最大分辨率图像

事情是这样的&#xff0c;在拼多多花了40买了一个4k高清的摄像偷&#xff0c;确实清楚。但是我一直以为网络摄像头分辨率只有640*480,于是用python测试了一下&#xff0c;上代码 import cv2def get_max_resolution(camera_index):"""获取摄像头的最大分辨率。&…

Redis 数据结构(二)—集合和有序集合

集合&#xff08;Set&#xff09;允许用户将多个各不相同的元素&#xff08;文本或二进制数据&#xff09;存储到集合中&#xff0c;以无序的方式存储元素。 有序集合&#xff08;Sorted Set&#xff09;同时具有“有序”和“集合”两种性质。每个元素由一个成员和分值组成。成…

【HarmonyOS学习日志(13)】计算机网络之TCP/IP协议族(二)

文章目录 TCP/IP协议族ARPDNS标志字段&#xff1a;协商具体的通信方式和反馈通信状态DNS查询问题的格式资源记录&#xff08;Resource Record, RR&#xff09;格式&#xff1a;被用于应答字段、授权字段和额外信息字段 IP协议IP服务的特点无状态无连接不可靠 IP头部结构IPv4头部…

Python + Playwright:集成 Applitools 进行视觉回归测试(快速入门)

集成 Applitools 进行视觉回归测试(快速入门) 简介Applitools 的核心特点Applitools 的应用场景1. 准备工作2. 获取示例项目2.1 下载示例代码2.2 安装依赖2.3 选择测试运行方式3. 代码解析3.1 测试用例示例4. 运行测试4.1 设置 Applitools API 变量4.2 设置 Applitools Eyes …

javaScript交互补充

1、元素的三大系列 1.1、offset系列 1.1.1、offset初相识 使用offset系列相关属性可以动态的得到该元素的位置&#xff08;偏移&#xff09;、大小等 ●获得元素距离带有定位祖先元素的位置 ●获得元素自身的大小&#xff08;宽度高度&#xff09; ●注意&#xff1a;返回的…

【Linux】-学习笔记09

第六章、nfs网络文件系统 1.nfs网络文件系统简介 NFS(Network File system&#xff0c;网络文件系统)是由SUN公司研制的UNIX表示层协议&#xff0c;它允许网络中的计算机(不同的计算机、不同的操作系统)之间通过TCP/IP网络共享资源&#xff0c;主要在unix系列操作系统上使用。…

【C++】LeetCode:LCR 078. 合并 K 个升序链表

题干&#xff1a; 给定一个链表数组&#xff0c;每个链表都已经按升序排列。 请将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 解法&#xff1a;优先队列 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *ne…

xvisor调试记录

Xvisor是一种开源hypervisor,旨在提供完整、轻量、移植且灵活的虚拟化解决方案,属于type-1类型的虚拟机,可以直接在裸机上启动。 启动xvisor步骤: 1、搭建riscv编译环境 首先从github上下载riscv-gnu-toolchain很费劲,建议直接从国内的源下载 git clone https://gitee…

minGW安装教程

一、下载 1.通过官网WinGW官网下载 http://www.mingw-w64.org 2.通过SourceForge网站下载MinGW https://sourceforge.net/projects/mingw/files/latest/download 二、安装 右键mingw-get-setup.exe&#xff0c;以管理员身份运行 点击Install安装 点击“Change”修改安装地…

BFS入门

目录 定义二叉树层次遍历电梯问题倒可乐BFS基本思想算法 四方访问 定义 BFS 通常是指广度优先搜索&#xff08;Breadth - First Search&#xff09;&#xff0c;它是一种图形数据结构的遍历算法。从给定的起始顶点开始&#xff0c;首先访问起始顶点的所有邻接顶点&#xff0c;然…

【数据库】Oracle

文章目录 1. 批量更新 1. 批量更新 这种方式将所有更新操作放在一个事务中执行&#xff0c;减少了与数据库的交互次数&#xff0c;从而可能提高性能。此外&#xff0c;事务处理还可以确保数据的一致性和完整性。begin; update mytable set STATE 102,STATE_DATE now() …

SQL Server数据库中设置索引的策略

在 SQL Server 中&#xff0c;索引通过加快数据检索速度在优化查询性能方面发挥着关键作用。在数据库中设置索引的策略受数据库结构、表的大小和将要运行的查询类型的影响。索引策略通常涉及考虑维度表、事实数据表、大型表和小型表之间的差异。以下是如何将索引应用于这些不同…

如何将CSDN的文章保存为PDF?

目录 1、打开CSDN文章2、按F12或者鼠标右键选择检查并进入控制台3、在控制台输入以下代码4、然后回车&#xff08;Enter&#xff09;如果纵向显示不全就横向 1、打开CSDN文章 2、按F12或者鼠标右键选择检查并进入控制台 3、在控制台输入以下代码 (function(){ $("#side&q…

25考研软件工程 西南大学跟重庆大学哪个难?

需知晓&#xff0c;西南大学每年报考人数众多&#xff0c;可这不代表报考软件工程专业的人数就多呀&#xff0c;况且西南大学的优势学科并非工科&#xff0c;故而软件工程的报考热度不会如题主所言那般高呢。 其次得明白&#xff0c;软件工程专业上岸难度方面&#xff0c;重庆大…

普通算法——二维前缀和

二维前缀和 题目链接&#xff1a;https://www.acwing.com/problem/content/798/ 题目描述&#xff1a; 输入一个 n n n 行 m m m 列的整数矩阵&#xff0c;再输入 q q q 个询问&#xff0c;每个询问包含四个整数 ** x 1 , y 1 , x 2 , y 2 x1,y1,x2,y2 x1,y1,x2,y2 &…

【无标题】dom不更新 萤石云 ezuikit-js class赋值失败

原因&#xff1a;EZUIKit类赋值到dom节点后影响到dom节点更新 解决&#xff1a;外层嵌套一层节点&#xff0c;v-for外层节点如下 <div :class"item" v-for"item in videoPlay2" :key"item"> <div :id"item"></div> …

Mock神器:Easy-Mock 私有化部署及使用介绍

在现代前后端分离的开发模式中&#xff0c;后端接口的数据模拟是一个常见且必要的需求。尤其是在后端接口尚未开发完成时&#xff0c;前端开发需要依赖模拟数据进行开发与测试。Easy-Mock 是一个非常流行的开源工具&#xff08;虽然它已经停止更新好长时间了&#xff09;&#…

力扣第96题 不同的二叉搜索树

力扣第96题 - 不同的二叉搜索树 题目描述 给定一个整数 n&#xff0c;求以 1 到 n 为节点组成的所有 不同的二叉搜索树&#xff08;BST&#xff09; 的个数。 题目分析 二叉搜索树的性质 对于一个二叉搜索树&#xff0c;以 i 为根节点&#xff1a; 左子树的节点值来自 [1, i…

List与Set、数组与ArrayList、ArrayList与LinkedList的区别

List 与 Set 的区别&#xff1a; 项ListSet重复允许重复的对象&#xff08;多个null也可以&#xff09;不允许重复的对象&#xff08;null也只能有一个&#xff09;有序性有序的。 保持了每个元素的插入顺序。即输出顺序就是输入顺序。 有序和无序都有。 HashSet&#xff1a;无…