我有一个电子表格,我们将在以下格式的D列中输入电话号码:(253)796-0340。 我想使用VBA公式/函数自动删除粘贴到D列中单元格中的任何括号,破折号或空格。当下面的“旧值”粘贴到单元格中时,它将自动替换为“新价值”; 例如:

旧值:(253)796-0340

新值:2537960340

该电子表格的某些用户并不精通Excel。 因此,如果有一种方法可以让他们不需要访问源并运行该功能,那将是很好的。

===============>>#1 票数:1

在工作表代码区域中包含以下事件宏:

Private Sub Worksheet_Change(ByVal Target As Range)
   Dim intr As Range, t As String
   Set intr = Intersect(Range("D:D"), Target)
   If intr Is Nothing Then Exit Sub

   Application.EnableEvents = False
   For Each r In intr
      t = Replace(Replace(r.Text, "-", ""), " ", "")
      r.Value = "'" & Replace(Replace(t, ")", ""), "(", "")
   Next r
   Application.EnableEvents = True
End Sub

因为它是工作表代码,所以非常易于安装和自动使用:

  1. 右键单击Excel窗口底部附近的选项卡名称
  2. 选择查看代码-这将打开一个VBE窗口
  3. 将内容粘贴并关闭VBE窗口

如果您有任何疑问,请先在试用版工作表上尝试一下。

如果您保存工作簿,则宏将随其一起保存。 如果您在2003年以后使用Excel版本,则必须将文件另存为.xlsm而不是.xlsx

删除宏:

  1. 如上调出VBE窗口
  2. 清除代码
  3. 关闭VBE窗口

要总体上了解有关宏的更多信息,请参见:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

要了解有关事件宏(工作表代码)的更多信息,请参见:

http://www.mvps.org/dmcritchie/excel/event.htm

必须启用宏才能使其正常工作!

===============>>#2 票数:0

您将要尝试的一般想法是-

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    Target.Value = Replace(Replace(Replace(Replace(Target.Value, "(", ""), ")", ""), "-", ""), " ", "")
    Application.EnableEvents = True
End Sub

这是每次在工作表中更改值时都会触发的事件,并且会从输入的值中删除所有不必要的字符。 请注意,这将适用于此代码应用于工作表中的每个单元格。

===============>>#3 票数:0

其他方式。

  1. 您不必遍历所有单元格。 想象一个用户复制10000行数据。 在整个列上进行.Replace比在每个单元格中循环要快得多。

  2. 您可以继续添加到MyList = "(|)| |-" 您要替换的所有内容都由|分隔| 万一将来要替换| 然后在deLim = "|"设置唯一的定界符

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim MyList As String, MyAr
    Dim deLim As String
    Dim i As Long

    '~~> Keep Adding whatever you want to replace
    MyList = "(|)| |-"

    deLim = "|"

    On Error GoTo Whoa

    Application.EnableEvents = False

    If Not Intersect(Target, Columns("D:D")) Is Nothing Then
        MyAr = Split(MyList, deLim)

        For i = LBound(MyAr) To UBound(MyAr)
            With Columns("D:D")
                .NumberFormat = "@"
                .Replace What:=MyAr(i), Replacement:="", LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False
            End With
        Next i
    End If

Letscontinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume Letscontinue
End Sub

  ask by Jeremy Bedsaul translate from so

未解决问题?本站智能推荐:

2回复

自动宏:删除整列(VBA)中的特殊字符

表面上,我们要寻找的是非常简单的: 我们希望保持工作表的column(1)不含所有特殊(IE非字母数字字符),但以下划线除外:“ _”字符。 我找到了一种可以清除所有特殊字符的宏格式的解决方案,以使该宏自动化,我使用了Worksheet_Change。 但是,我更喜欢一个解决方
4回复

删除特殊字符VBA Excel

我正在使用VBA读取一些TITLES,然后将该信息复制到powerpoint演示文稿中。 我的问题是,TITLES有特殊的字符,但我也在处理的图像文件没有。 TITLE构成了将JPEG加载到图片容器中的路径的一部分。 例如“P k.jpg”,但标题称为“pk”。 我希望能够忽
3回复

VBA:删除所有特殊字符的功能

我已经做了一些寻找此问题的解决方案的尝试,但找不到能够直接使用的东西。 因此,通过尝试编辑供我自己使用的其他人的代码,我遇到了一个问题。 我正在尝试使用RemoveSpecialChars("$C$1")但出现RemoveSpecialChars("$C$1") Object requi
1回复

VB代码删除列中的特殊字符

我有一列,其中包含带有两个特殊字符“,”和“ _”的整数值。 我试图删除这些字符,例如1,10_2,2_3,3应该类似于1102233。在此先感谢您的建议。
2回复

VBA在保存工作簿之前删除特殊字符

我发现此功能可以删除特殊字符。 我想知道的是在保存工作簿之前,如何使用它自动删除某些单元格区域(B47:L47,B51:L148)中的所有特殊字符?
2回复

VBA RegExp特殊字符

当用户为我的宏的输出输入“另存为”名称时,我要检查是否会导致保存文件错误的特殊字符- [\\/:*?<>|] 我这样使用RegExp: 我收到了Compile Error: Invalid Character由于有竖线( | )字符而导致的Compile Error:
1回复

列中的文字特殊字符

我想根据其标题而不是列号一起测试各个列。 如果所选列的任何单元格都包含文本,特殊字符和字母数字值,则该宏应作为错误弹出单元格地址。 这是我的代码: 感谢您的辛勤工作。 请不要使用任何函数 ,因为我还有其他代码要运行,使用函数会有点困难。 在此,c2,c3,c4,c列的最
2回复

将特殊字符转换为字母

我有一个带有不同语言的名称列的excel文件。我需要将此名称转换为标准英语。 例: HỒNGTẤN必须转换为HO DANG TAN。 NGUYỄNĐỨCKIÊN-NGUYEN DUC KIEN ĐO´NTHỊTHANHTHẢO-DOANTHI THANH
1回复

替换字符串中的怪异或特殊字符

我正在尝试将Excel文件转换为SQL查询。 我的问题是在给我的文件中有特殊字符。 我无法替换它们CTRL + H,因为它们根本不显示在Excel文件中。 当我编写查询(使用utf8或ANSI)时,它们会显示出来。 使用Ultra-Edit,它们显示为HEX C292。使用utf8中的N
2回复

无法分割为多个特殊字符

我正在尝试将单元格A1中的字符串'C:\\ Users \\ punateng \\ Desktop \\ Pending Spec Updates.xlsx'中的单元格值拆分为最后一个“ \\”,以便单元格B1中的结果应为'C:\\ Users \\ punateng \\桌面\\' 我