我已将一些调试信息复制并粘贴到 Excel 工作表中。
但是,它在一列的某些单元格中包含一些“奇怪”的字符,否则应该只包含整数。使用 VBA 消除此类字符的最简单方法是什么?下面的列表中显示了一个示例:
1 **'␁'** <- I'm trying to get rid of the part that I have bolded
2 '␂'
3 '␃'
4 '␂'
我想将该文件用作另一个应用程序中的数据源。提前致谢。
我已将一些调试信息复制并粘贴到 Excel 工作表中。
但是,它在一列的某些单元格中包含一些“奇怪”的字符,否则应该只包含整数。使用 VBA 消除此类字符的最简单方法是什么?下面的列表中显示了一个示例:
1 **'␁'** <- I'm trying to get rid of the part that I have bolded
2 '␂'
3 '␃'
4 '␂'
我想将该文件用作另一个应用程序中的数据源。提前致谢。
试试这个(第一次在这里发布代码,所以请多多包涵;o)。我相信我对 VBA 代码的评论已经足够了,但有任何问题,请告诉我。
' Replaces all the charaters in vaFind with strReplace
Sub FindAndReplace(ByVal vaFind As Variant, ByVal strReplace As String, ByVal rngToSearch As Range)
' vaFind is an array containing all the strings you want to replace
' strReplace is what you want to replace it with
' rngToSearch is the range you want to Find & Replace your characters
Dim x As Long
For x = LBound(vaFind, 1) To UBound(vaFind, 1)
rngToSearch.Cells.Replace What:=vaFind(x), Replacement:=strReplace, _
LookAt:=xlPart, SearchOrder:=xlByRows, _
MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Next x
End Sub
' Now if you want to clean it automatically,
' Place the following code INTO any Sheets that you
' are have the debug data placed into.
' NOTE: prefix Asterick and question mark with a tilde to replace those characters "~*"
Private Sub Worksheet_Change(ByVal Target As Range)
' Calls the FindAndReplace sub, and removes all:
' astericks, apostrophes and "Whatever Else You need cleaned"'s
' In this case, in column A
If Not Intersect(Target, Me.Columns("A:A")) Is Nothing Then
Call FindAndReplace(Array("~*", "'", "Whatever Else You need cleaned"), "", Me.Columns("A:A"))
End If
' NOTE: This sub will be called whenever the sheet changes, and only process column A
' You can customize which columns, too.
End Sub
我认为正则表达式可能是最简单的。我会使用 ADO 记录集并查看它。
关于 RegEx 的一些注意事项
''http://msdn.microsoft.com/en-us/library/ms974570.aspx
Dim objRegEx As RegExp
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.IgnoreCase = True
objRegEx.Global = True
''This is a sample string, the field would go here
strText = "q@12""£c"
''Find anything not a-z, 0-9
objRegEx.Pattern = "[^a-z0-9]"
''Replace with a dash, "" is fine too.
strOut = objRegEx.Replace(strText, "-")
关于 ADO 和 Excel 的一些注意事项
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
strFile = ActiveWorkbook.FullName
strcn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
& strFile & ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';"
cn.Open strcn
rs.Open "SELECT * FROM [Sheet1$]", cn, 3 'adOpenStatic'
这是一个对我有用的解决方案,虽然它可能不是很优雅:
Sub Macro1()
' Macro1 Macro
Dim temp As String
For u = 1 To 28000
If Cells(u, 4) <> 0 Then
Cells(u, 4).Select
temp = Mid(ActiveCell.Text, 1, InStr(1, ActiveCell.Text, "'") - 1)
Cells(u, 4) = temp
End If
Next
End Sub
在调试时 - 您真的确定要删除它们吗?它们是 ASCII 控制字符。但话又说回来,我不知道你在调试什么......
您看到的字符是代表 ascii 控制字符的 unicode 字符 - 因此,无论您从哪里复制数据,都可以为您翻译它。
标准 excel 函数 Clean 被设计为删除 ASCII 控制字符,因此在这里不起作用。
但这会删除控制图片范围内的所有 unicode 字符
Sub Macro1()
' Macro1 Macro
'
For u = 9210 To 9216
a = Cells.Replace(ChrW(u), "") ' replaces values in whole Worksheet
Next
End Sub
' use this to replace the values in a single column only
' i cant test this at the moment as i don't have Excel handy...
...
a = Range("A1:A2800").Replace(ChrW(u), "") ' replaces values in Col A
...