在特定字符后删除单元格中的数据

10

我有一个包含在单元格A1:A1000中的数据,它是一个名字列表后面跟着一个小注释,像这样:

  • sam" fast
  • nick" long
  • tom" quick

所有这些都有"和空格,在名字后面,然后是注释。我正在尝试的是删除名字后面的所有内容。

我尝试使用宏来做这个操作,但什么都没能做到。你有什么想法吗?

6个回答

26

这里是一个很不错的技巧,而不需要使用宏:

选择正确的范围(甚至只需点击A以选择整个列),然后按Ctrl+F,点击替换,在查找内容中写入"*并将替换为框留空。现在点击全部替换,完成!

它使用*作为通配符,并将替换框保留为空,因此它会用空白替换引号后面(包括引号本身)的所有内容。

编辑:如建议所示,以下是VBA代码:

Columns("A:A").Replace What:="""*", Replacement:="", LookAt:=xlPart

1
+1 对于快速简便的方法,无需经过“文本分列”...或许值得向 OP 展示如何在 VBA 中编写 .Replace 方法,以防他需要将其作为更大程序的一部分。 - Scott Holtzman
2
很棒的答案。始终备份您的数据。 - Dick Kusleika

5
很简单!我不知道您使用的是Excel哪个版本,但简单来说,您需要做一个“将文本转换为列”操作,然后使用分隔符"来拆分单元格。这将使您得到两列,一列是您想要的数据,而另一列可以直接删除。
以下是在Office 2010中的操作步骤:
  1. 高亮显示列A
  2. 找到“数据”菜单
  3. 找到“将文本转换为列”菜单
  4. 选择“分隔符”,然后点击“下一步”
  5. 在“其他”框中输入"
  6. 点击“完成”
完成!现在您已经把所有的名称都放在了A列中,您只需删除B列即可。
总之,执行“将文本转换为列”操作,然后使用分隔符"来拆分单元格。非常简单快捷。

1
另外,当您到达显示要导入的数据的部分时,请选择第二列,并将其更改为“不导入列(跳过)”,您无需担心删除B列。 - SeanC

4
几个选项: 替换
Range("A1:A1000").Replace """*", vbNullString

如果您需要进一步操作值,则以下内容更为适用:
使用正则表达式:
Dim str As String, strClean As String
Dim cell As Range

For Each cell In Range("A1:A1000")

    With CreateObject("vbscript.regexp")
        .Pattern = "\""(.*)"
        .Global = True
        cell = .Replace(cell, vbNullString)
    End With

Next cell

没有正则表达式,分割字符串:

Dim strSplit() As String
Dim cell As Range

For Each cell In Range("A1:A1000")

    If (cell.Value <> vbNullString) Then

        cell.Value = Split(cell.Value, """")(0)

    End If

Next cell

1
真的吗?在这种情况下,为什么要进行那么多循环和调用“RegEx”,而使用“查找”和“替换”如此容易呢? - Scott Holtzman
添加了Replace作为另一个选项,在这种情况下更有效,除非用户需要在处理后对每个值进行操作。 - InContext

2

如果您想保留源数据,您可以使用下一列中的简单Excel公式来实现。假设您的数据在A列中,下面的公式将仅返回名称:=LEFT(A1,SEARCH("""",A1)-1)


1
Sub Macro1()
    For Row = 1 To 1000
       S = Range("A" & Row).Cells.Value
       Pos = InStr(S, Chr(34))
       If Pos > 0 Then Range("A" & Row).Cells.Value = Left(S, Pos - 1)
    Next
End Sub

真的吗?在这种情况下,为什么要进行那么多循环,当查找替换功能如此容易使用呢? - Scott Holtzman
1
Scott,我同意其他方法更快、更容易。 (我不知道Alexandre发布的Find中的通配符,这个我会记在我的脑袋工具箱里。)OP谈论了宏,所以我用宏来实现。如果他们遇到更复杂的问题无法想出正则表达式,这可能对他们有用。 - Ernie

0

按下 ctrl + f,点击 替换选项卡,在 查找内容 框中键入 *,然后点击 全部替换。无需在 替换为 框中输入任何内容。这样你就可以替换掉 . 后面的所有内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接