我想去除/clean() 一个除 CHAR(015) 之外的所有内容的单元格,但是 ASCII 控制字符不能 SUBSTITUTE()
I want to strip / clean() a cell of everything except CHAR(015), but ASCII Control Characters can't SUBSTITUTE() out
我正在寻找一个文本字符串并删除除回车符 returns 和普通文本(其他控制字符、空格、项目符号点和其他一些垃圾)之外的所有内容。然而
CLEAN(A1)
也剥离马车returns。
我试过一串嵌套的
SUBSTITUTE(A1, CHAR(000), "")
SUBSTITUTE(A1, CHAR(001), "")
等等
但它一直默认为
SUBSTITUTE(A1, CHAR(0), "")
SUBSTITUTE(A1, CHAR(1), "")
并给我一个错误。有帮助吗?
在 VBA 方面经验不多,但我可以通过一些谷歌搜索来收集一些基础知识。
回车return是Char(13)
,也就是八进制的015。但您可能还想要 Char(10)
行 -return.
嵌套替换确实有效,但很笨拙:
=...Substitute(Substitute(Substitute(A1,Char(1),""),Char(2),""),Char(3),"")...
您需要将 Char(1)
替换为 Char(31)
,省略 Char(10)
和 Char(13)
。
更明智的方法可能是使用 \n
换行代码和 \r
回车 return 代码:
- 用
Char(10)
代替\n
- 用
Char(13)
代替\r
Clean
还剩多少
- 用
\n
代替Char(10)
- 用
\r
代替Char(13)
如果您的输入包含 \n
或 \r
,这显然会失败。
=SUBSTITUTE(SUBSTITUTE(CLEAN(SUBSTITUTE(SUBSTITUTE(B1,CHAR(13),"\r"),CHAR(10),"\n")),"\r",CHAR(13)),"\n",CHAR(10))
那里,只有 4 个 Substitutes
而不是 29 个!
假设您要删除:
- ASCII 字符 0 到 9
- ASCII 字符 11 和 12
- ASCII 字符 14 到 32
- ASCII 字符 127 到 255
然后考虑以下用户定义函数:
Public Function JunkKiller(S As String) As String
Dim temp As String, a
ary = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255)
temp = S
For Each a In ary
temp = Replace(temp, Chr(a), "")
Next a
JunkKiller = temp
End Function
这将同时保留ASCII-10和ASCII-13,如果您还想保留space字符,只需从[=12中删除32 =]声明。
用户定义函数 (UDF) 非常易于安装和使用:
- ALT-F11 调出 VBE window
- ALT-I
ALT-M 打开一个新模块
- 粘贴内容并关闭 VBE window
如果您保存工作簿,UDF 将随之保存。
如果您使用的 Excel 版本晚于 2003,则必须保存
文件为 .xlsm 而不是 .xlsx
删除 UDF:
- 如上所述调出 VBE window
- 清除代码
- 关闭 VBE window
要使用来自 Excel 的 UDF:
=JunkKiller(A1)
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
有关 UDF 的详细信息,请参阅:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
必须启用宏才能工作!
我正在寻找一个文本字符串并删除除回车符 returns 和普通文本(其他控制字符、空格、项目符号点和其他一些垃圾)之外的所有内容。然而
CLEAN(A1)
也剥离马车returns。
我试过一串嵌套的
SUBSTITUTE(A1, CHAR(000), "")
SUBSTITUTE(A1, CHAR(001), "")
等等
但它一直默认为
SUBSTITUTE(A1, CHAR(0), "")
SUBSTITUTE(A1, CHAR(1), "")
并给我一个错误。有帮助吗?
在 VBA 方面经验不多,但我可以通过一些谷歌搜索来收集一些基础知识。
回车return是Char(13)
,也就是八进制的015。但您可能还想要 Char(10)
行 -return.
嵌套替换确实有效,但很笨拙:
=...Substitute(Substitute(Substitute(A1,Char(1),""),Char(2),""),Char(3),"")...
您需要将 Char(1)
替换为 Char(31)
,省略 Char(10)
和 Char(13)
。
更明智的方法可能是使用 \n
换行代码和 \r
回车 return 代码:
- 用
Char(10)
代替\n
- 用
Char(13)
代替\r
Clean
还剩多少- 用
\n
代替Char(10)
- 用
\r
代替Char(13)
如果您的输入包含 \n
或 \r
,这显然会失败。
=SUBSTITUTE(SUBSTITUTE(CLEAN(SUBSTITUTE(SUBSTITUTE(B1,CHAR(13),"\r"),CHAR(10),"\n")),"\r",CHAR(13)),"\n",CHAR(10))
那里,只有 4 个 Substitutes
而不是 29 个!
假设您要删除:
- ASCII 字符 0 到 9
- ASCII 字符 11 和 12
- ASCII 字符 14 到 32
- ASCII 字符 127 到 255
然后考虑以下用户定义函数:
Public Function JunkKiller(S As String) As String
Dim temp As String, a
ary = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255)
temp = S
For Each a In ary
temp = Replace(temp, Chr(a), "")
Next a
JunkKiller = temp
End Function
这将同时保留ASCII-10和ASCII-13,如果您还想保留space字符,只需从[=12中删除32 =]声明。
用户定义函数 (UDF) 非常易于安装和使用:
- ALT-F11 调出 VBE window
- ALT-I ALT-M 打开一个新模块
- 粘贴内容并关闭 VBE window
如果您保存工作簿,UDF 将随之保存。 如果您使用的 Excel 版本晚于 2003,则必须保存 文件为 .xlsm 而不是 .xlsx
删除 UDF:
- 如上所述调出 VBE window
- 清除代码
- 关闭 VBE window
要使用来自 Excel 的 UDF:
=JunkKiller(A1)
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
有关 UDF 的详细信息,请参阅:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
必须启用宏才能工作!