我有数据集,如:
我需要的结果包含只有无法识别的字符的记录。 在我的例子中,它将是记录N 3,4,5。
我可以创建任何功能或宏来执行此操作吗?
谢谢!
答案 0 :(得分:2)
您可以使用高级过滤器
使用A6中的数据:A11和A5中添加的标题
标准范围A1:A2,您可以更改字符代码;或在同一栏中添加其他字符代码范围作为附加标准(例如A3,A4)
A1: <Leave Blank>
A2: =SUMPRODUCT(--(CODE(MID(A6,ROW(INDIRECT("1:"&LEN(A6))),1))>=128))>0
过滤器对话框:
结果:
如果您更喜欢VBA代码,这里有一个宏,用于查看是否与所需字符不匹配;您可以在代码中看到将任何所需字符添加到列表中的位置。对于初学者,我包括字母,数字,空格和逗号。但是你可以添加任何你认为可识别的角色。
=======================
Option Explicit
Sub BadChars()
Dim vSrc As Variant
Dim vRes() As Variant
Dim colRes As Collection
Dim rRes As Range
Dim I As Long
'Add allowed characters between the exclamation point and the closing bracket
Const sPat As String = "*[!A-Za-z0-9, ]*"
vSrc = Range("A1").CurrentRegion
'Process data
Set colRes = New Collection
For I = 1 To UBound(vSrc, 1)
If vSrc(I, 1) Like sPat Then _
colRes.Add vSrc(I, 1)
Next I
ReDim vRes(1 To colRes.Count, 1 To 1)
For I = 1 To colRes.Count
vRes(I, 1) = colRes(I)
Next I
Set rRes = Range("F1").Resize(rowsize:=UBound(vRes, 1))
With rRes
.EntireColumn.Clear
.Value = vRes
.EntireColumn.AutoFit
End With
End Sub
================================
要删除副本中的字符,请尝试使用与上面类似的代码,但使用正则表达式:
========================================
Option Explicit
Sub BadChars()
Dim vSrc As Variant
Dim vRes() As Variant
Dim colRes As Collection
Dim rRes As Range
Dim RE As Object
Dim I As Long
'Add allowed characters between the exclamation point and the closing bracket
Const sPat As String = "[^A-Z0-9, ]"
vSrc = Range("A1").CurrentRegion
Set RE = CreateObject("vbscript.regexp")
With RE
.ignorecase = True
.Global = True
.Pattern = sPat
End With
'Process data
Set colRes = New Collection
For I = 1 To UBound(vSrc, 1)
If RE.test(vSrc(I, 1)) = True Then _
colRes.Add RE.Replace(vSrc(I, 1), "")
Next I
ReDim vRes(1 To colRes.Count, 1 To 1)
For I = 1 To colRes.Count
vRes(I, 1) = colRes(I)
Next I
Set rRes = Range("F1").Resize(rowsize:=UBound(vRes, 1))
With rRes
.EntireColumn.Clear
.Value = vRes
.EntireColumn.AutoFit
End With
End Sub
===============================
删除结果:
答案 1 :(得分:1)
以下是基于unicode values执行此操作的简单方法。现在我只是在寻找32到122之间的代码值。您可以通过更改条件来调整此值以包含更多要包含或排除的值。
Sub findCharacters()
Dim wks As Worksheet
Set wks = Worksheets("Sheet1")
Dim rng As Range
Set rng = wks.Range("A1:A6")
For Each cell In rng
For Counter = 1 To Len(cell.Value)
unicodeValue = AscW(Left(Mid(cell.Value, Counter), 1))
If unicodeValue > 31 And unicodeValue > 123 Then
cell.Interior.ColorIndex = 37
Exit For
End If
Next
Next cell
End Sub
结果是突出显示包含此范围之外的字符的单元格:
答案 2 :(得分:0)
如果这个vba也能删除这些字符会更加精彩......