Excel宏标记在所有工作表中标记关键字(以域名为例)并将结果输出到另一张Sheet

news/2024/7/21 5:25:15 标签: excel, java, mysql

Excel宏标记在所有工作表中标记关键字(以域名为例)并将结果输出到另一张Sheet

因为我的需求是标记一组url,所以使用正则进行匹配,将匹配到的url标红,并将标记结果统计输出到新建的名为“标记结果”的Sheet中

效果如下:

在这里插入图片描述
统计页
在这里插入图片描述

代码如下

Sub MatchAllWorksheetsAndHighlightURLs()
    Dim rng As Range
    Dim regex As Object
    Dim matches As Object
    Dim match As Object
    Dim ws As Worksheet
    Dim resultSheet As String, title As String
    Dim i As Integer, j As Integer, count As Integer
    Dim url As String
    resultSheet = "标记结果"
    i = 1
    ' 创建正则表达式对象
    Set regex = CreateObject("VBScript.RegExp")
            
    ' 设置正则表达式模式
    regex.Global = True
    regex.Pattern = "(https?://)?(www\.|baijiahao\.|zh\.|en\.)?(baidu|zhihu|xueqiu|jianshu|docin|m\.doc88|mp\.sohu|new\.qq|dy\.163|wikipedia)/?(\.(com|org))?"
    
    If Not WorksheetExists(resultSheet) Then
        Dim size
        size = Sheets.count
        Sheets.Add After:=Sheets(size)
        Worksheets(size + 1).Name = resultSheet
    End If
    
   ' 遍历每个工作簿中的所有工作表
        For Each ws In ThisWorkbook.Worksheets
            ws.Activate ' 激活当前工作表
            title = ActiveSheet.Name
            j = 2
            count = 0
            ' 在每个工作表上执行匹配和标红逻辑
            For Each rng In ws.UsedRange
                ' 使用正则表达式进行匹配
                Set matches = regex.Execute(rng.Value)
                count = count + matches.count
                If matches.count > 0 Then
                    If title <> resultSheet Then
                       Sheets(resultSheet).Activate
                       Cells(1, i).Value = title
                       Cells(j, i).Value = rng.Value
                       ws.Activate
                       j = j + 1
                    End If
                End If
                ' 遍历每个匹配项
                Dim offset As Integer
                offset = 0
                
                For Each match In matches
                    ' 提取匹配到的URL
                    
                    url = match.Value
                    ' 标记匹配成功的URL部分为红色
                    Dim startPos As Integer
                    startPos = InStr(offset + 1, rng.Value, url, vbTextCompare)
                    
                    If startPos > 0 Then
                        Dim endPos As Integer
                        endPos = startPos + Len(url) - 1
                        
                        rng.Characters(Start:=startPos, Length:=Len(url)).Font.Color = RGB(255, 0, 0)
                        
                        ' 更新偏移量,以匹配下一个URL
                        offset = endPos
                    End If
                    
                    ' 输出匹配到的URL
                    Debug.Print url
                Next match
            Next rng
            If count > 0 Then
                i = i + 1
            End If
        Next ws
    MsgBox "域名标记完成,标记结果已输出到<标记结果>工作表"
End Sub

Function WorksheetExists(sheetName As String) As Boolean
    Dim ws As Worksheet
    On Error Resume Next
    Set ws = ThisWorkbook.Sheets(sheetName)
    On Error GoTo 0
    WorksheetExists = Not ws Is Nothing
End Function


高级功能

如果想实现:只编写一次宏,就能够在本地任意的excel中运行,甚至像下放图片所示直接在工具栏一键执行,可留言,要是留言多就出教程,没人看就算了
在这里插入图片描述


http://www.niftyadmin.cn/n/5159281.html

相关文章

微信小程序将后端返回的图片文件流解析显示导页面

说明 由于请求接口后端返回的图片格式不是一个完整的url,也不是其他直接能显示的图片格式&#xff0c;是一张图片 后端根据模板与二维码生成图片,返回二进制数据 返回为文件流的格式,用wx.request请求的时候&#xff0c;就自动解码成为了下面这样的数据数据格式,这样的数据没…

Vue.js中created()与activated()的区别

在Vue.js框架中&#xff0c;activated和created两个钩子函数都是在组件被创建时执行的函数&#xff0c;但它们的使用场景略有不同。 created是在组件实例被创建之后立即调用的钩子函数。created钩子函数则是在组件实例被创建之后立即调用&#xff0c;适合用于初始化一些数据或…

基于SSM的酒店客房管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

数字化转型:2023零售业的新机遇,亿发零售云系统释放无限可能

零售业的数字化转型不仅能够为顾客带来卓越的购物体验&#xff0c;同时也能为零售企业提供丰富的数据分析、销售预测和生产管理的机会。通过这些分析&#xff0c;企业能够更准确地了解市场需求和消费者的购买行为&#xff0c;进而制定更具针对性的营销策略&#xff0c;从而增强…

怎么更改文件创建日期?

怎么更改文件创建日期&#xff1f;如今科技发展日新月异&#xff0c;人们对于信息和数据的依赖程度日益加深。在这个高度信息化的时代&#xff0c;文件处理已经成为数字化办公不可或缺的环节。无论是个人还是企业&#xff0c;都需要通过数字化的方式来处理和管理大量的文档、表…

代码随想录打卡第六十三天|84.柱状图中最大的矩形

84.柱状图中最大的矩形 题目&#xff1a;给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 提示&#xff1a; 1 < heights.length <105 0 < h…

Canal同步Mysql数据到ES以及Springboot项目查询ES数据

1、环境准备 服务器&#xff1a;Centos7 Jdk版本&#xff1a;1.8 Mysql版本&#xff1a;5.7.44 Canal版本&#xff1a;1.17 Es版本&#xff1a;7.12.1 kibana版本&#xff1a;7.12.1 软件包下载地址&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1jRpCJP0-hr9aI…

项目中登录验证码怎么做才合理

唠嗑部分 今天我们来聊聊项目实战中登录验证码如何做比较合理&#xff0c;首先我们聊以下几个问题 1、登录时验证码校验是否必要&#xff1f; 答案当然是很有必要的&#xff0c;因为用户登录行为会直接影响数据库&#xff0c;如果没有某些防范措施&#xff0c;有恶意用户暴力…