目录
- 1. 简述
- 2. 函数功能及参数介绍
- (1)功能
- (2)参数介绍
- 3. 完整VBA代码
- 4. 宏代码使用方法
- 5. 效果图
1. 简述
当我们要处理大量行数的excel数据时候,有时某列中有些行中的单元格内容中含有我们不想要的部分(比如包含一些特殊字符、数字、字母等等),这个时候我们想把这些不想要的部分删除,目前的excel没有相关的函数可以为我们解决这个问题,我们只能自己编写宏函数,实现这个功能,下面是一个功能很完备的宏函数,可以解决这个问题,大家可以直接复制代码到自己的文件中,也可以下载包含这个宏函数的文件,进行使用,宏文件包含多个常用的宏函数,并有详细介绍,大家可以根据需要使用。
下载链接:https://download.csdn.net/download/u014541881/88036953
如有特殊功能需求,可关注私信我。
2. 函数功能及参数介绍
(1)功能
可以实现判断选中单元格是否有指定类的特殊字符,若有则删除,并返回删除后的单元格内容,并将选中的包含指定类特殊字符的单元格字体变红;没有则原样返回,不改变选中单元格字体颜色。
(2)参数介绍
rng必填参数,代表选中的单元格。
charType必填参数,代表要查询的特殊字符类型,notchin代表仅判断选中的单元格是否包含非中文汉字类的特殊字符,num代表仅判断选中的单元格是否包含数字类的特殊字符,letter代表仅判断选中的单元格是否包含字母类的特殊字符(包含大小写的字母);cus代表自己指定哪种特殊字符,仅判断选中的单元格是否包含指定的的特殊字符,指定的特殊字符在第三个参数customChars输入,如 “,;!” 代表仅判断选中的单元格是否包含逗号、封号、叹号这三个特殊,注意,第三个函数形参是可选参数,仅在第二个形参为cus的时候才需要输入第三个参数。 若包含参数定义的类型的特殊字符,则将选中的单元格中这些特殊字符逐个删除,并返回处理后的单元格内容,并将选中的包含指定类特殊字符的单元格字体变红;若不包含参数定义类型的特殊字符,则将单元格内容原样返回,不改变选中单元格字体颜色。
3. 完整VBA代码
Function CheckAndRemoveSpecialChars(ByVal rng As Range, ByVal charType As String, Optional ByVal customChars As String = "") As String
On Error Resume Next ' 忽略可能的错误
Dim cellValue As String
Dim specialChars As String
Dim i As Integer
' 检查参数是否有效
If rng.Cells.Count > 1 Then
CheckAndRemoveSpecialChars = "只能选择单个单元格作为参数。"
Exit Function
End If
cellValue = rng.Value
specialChars = ""
' 判断特殊字符类型
Select Case charType
Case "notchin"
specialChars = "!@#$%^&*()-_=+[]{}|;':,.<>/?`~"
specialChars = specialChars & GetNonChineseChars()
Case "num"
specialChars = "0123456789"
Case "letter"
specialChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
Case "cus"
specialChars = customChars
Case Else
CheckAndRemoveSpecialChars = "输入的第二个参数为无效的特殊字符类型。"
Exit Function
End Select
' 删除特殊字符并返回处理后的单元格内容
For i = 1 To Len(specialChars)
cellValue = Replace(cellValue, Mid(specialChars, i, 1), "")
Next i
If cellValue <> rng.Value Then
' 解除单元格保护
rng.Locked = False
' 设置字体为红色
On Error Resume Next ' 忽略可能的错误
rng.Font.Color = RGB(255, 0, 0)
On Error GoTo 0 ' 恢复默认错误处理
' 上锁保护单元格
rng.Locked = True
End If
CheckAndRemoveSpecialChars = cellValue
End Function
Function GetNonChineseChars() As String
Dim nonChineseChars As String
Dim i As Integer
nonChineseChars = ""
' 添加非中文字符范围
For i = 32 To 126
If Not IsChineseCharacter(ChrW(i)) Then
nonChineseChars = nonChineseChars & ChrW(i)
End If
Next i
GetNonChineseChars = nonChineseChars
End Function
Function IsChineseCharacter(ByVal character As String) As Boolean
Dim code As Long
code = AscW(character)
IsChineseCharacter = (code >= &H4E00 And code <= &H9FFF) Or (code >= &H3400 And code <= &H4DBF)
End Function
4. 宏代码使用方法
具体使用方法可仿照文章如何判断某列某个单元格是否包含特殊字符(如空格、数字、下划线等等),并返回特殊字符