很多时候,我需要删除特定字符之前的所有文本。例如,在“原告诉被告”形式的法律案件列表中,我可能希望删除“诉”之前的所有内容,以获取被告列表。
FIND
通过使用、RIGHT
和函数的组合,可以轻松实现这一点,LEN
如下所示(使用A1
作为文本来源的单元格):
=RIGHT(A1,LEN(A1)-FIND("text",A1)-1)
但它总是给我一种笨重且容易出错的感觉(更不用说我经常忘记减 1。有没有更优雅的方法来实现相同的结果?
答案1
使用 VBA 是一种合法的策略!隐藏了这些细节以及回忆它们的负担。还允许您使用更简单的字符串函数(例如,VBA 版本的 Mid() 不需要子字符串计数 - 默认情况下它将提供到字符串的末尾。)[注 1]
您编写的函数可轻松应用于 Excel 函数的 Excel 下拉列表中。
Alt-F11 进入 VBA(Alt-F11 切换回)。
从当前工作簿的 VBAProject,插入 > 模块(右侧菜单操作)。这样,整个工作簿中都可以轻松访问该功能。
粘贴此:
函数 RightOfToken(sSource 作为字符串,sToken 作为字符串) 作为字符串 Dim sTarget 作为字符串 Dim iPos 作为整数 ' 返回 sSource 中第一次出现 sToken 后的字符 iPos = InStr(sSource,sToken) 如果 iPos > 0 则 sTarget = Mid(sSource,Len(sToken) + iPos) 别的 目标 = “” 万一 RightOfToken = sTarget 结束函数
Alt-F11 返回。在任何单元格中,=RightofToken("ABC v. DEF","v.") 将得出“DEF”。(您可以在 VBA 中使用 LTrim() 删除前导空格,或者如果合适,在 Excel 中执行 TRIM)
[注 1] 如果在 VBA 中您需要某个函数的 Excel 版本,或者特定于 Excel 的工作表函数,则可以在其前面加上 Application.WorksheetFunction。
答案2
查找和替换可能对你有用。这是最快的。对于你的示例“想要删除所有内容,包括“v.”以获取被告名单”,我会将信息复制到新列中,然后仅突出显示这些列。然后使用查找和替换或 CTRL H。
在查找框中输入“*v。”或“星号v. "。在替换框中,将其留空。(星号 * 是通配符,因此它将选择 V 之前的所有内容。)单击确定运行,它将删除“v. ”之前的所有内容。
如果您首先突出显示了所有想要更改的内容,那么您应该能够非常快速地完成所有操作。
希望这是有意义的。