马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
系列文章目次
前言
一、按需求计数单位格数目
1.需求
一个表中有多个范例的单位格内容,好比:笔墨、数字、特殊字符、字母+数字……
我们要计数字母+数字的单位格数目
同时提取字母+数字单位格的数字部分,判断数字部分是否雷同,然后计数差别的单位格数目
二、使用步调
1.vba源码
代码如下(示例):
- Sub CountSpecificFormatStrings()
- Dim rng As Range
- Dim cell As Range
- Dim count, countkey As Integer
- Dim regex, regex1 As Object
- Dim cellAddress As String
- Dim numbers As String
- Dim matches As Object
- Dim match As Variant
- Dim cellNumber As String
- Dim cellValue As String
- Dim myCollection As Collection
- Set myCollection = New Collection
- Dim value As Variant
- Dim lastValue As Variant
- Dim uniqueCount As Integer
- Dim ws As Worksheet
- Set ws = ActiveSheet
- Dim cellValueCollection As Collection
- Dim i, j, k As Integer
- Dim valueToAdd As String
- Dim key As Variant
- Dim dict As Object
- Dim myArray As Variant
- Dim item, ele As Variant
- Dim elements As Variant
- Dim uniquekeys As New Collection
- uniqueCount = 0
- lastValue = ""
- Set cellCollection = New Collection
- Set 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 rng
- If 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).Value
- Set matches = regex1.Execute(Cells(cell.Row, cell.Column).value)
- For Each match In matches
- myCollection.Add match
- Next match
-
- End If
- Next cell
-
-
- For Each item In myCollection
- 'Debug.Print item
- Next
-
- countkey = myCollection.count
-
- For i = myCollection.count To 1 Step -1
- For j = 1 To i - 1
- If myCollection(i) = myCollection(j) Then
- myCollection.Remove (i)
- countkey = countkey - 1
- Exit For
- End If
- Next j
- Next i
-
- For Each ele In myCollection
- Debug.Print ele
- Next ele
- ws.Cells(2, 69).value = countkey
- ' 显示计数结果
- MsgBox "有 " & countkey & " 个单元格符合指定格式。"
- End Sub
复制代码 2.整理后
代码如下(示例):
- Sub CountSpecificFormatStrings()
- Dim rng As Range
- Dim cell As Range
- Dim count, countkey As Integer
- Dim regex As Object
- Dim matches As Object
- Dim match As Variant
- Dim myCollection As Collection
- Set myCollection = New Collection
- Dim ws As Worksheet
- Set ws = ActiveSheet
- Dim i, j As Integer
- Dim key As Variant
- Dim 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 rng
- If 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).Value
- Set matches = regex1.Execute(Cells(cell.Row, cell.Column).value)
- For Each match In matches
- myCollection.Add match
- Next match
- End If
- Next cell
-
- For Each item In myCollection
- 'Debug.Print item
- Next
- countkey = myCollection.count
- For i = myCollection.count To 1 Step -1
- For j = 1 To i - 1
- If myCollection(i) = myCollection(j) Then
- myCollection.Remove (i)
- countkey = countkey - 1
- Exit For
- End If
- Next j
- Next i
- For Each ele In myCollection
- Debug.Print ele
- Next ele
- ws.Cells(2, 69).value = countkey
-
- ' 显示计数结果
- MsgBox "有 " & countkey & " 个单元格符合指定格式。"
- End Sub
复制代码 总结
分享:
读过的书是不是有许多不记得了,但是它不绝都是匿伏的,它在我们的出言有尺上,嬉闹有度上,服务有余上,语言有德上
|