如何用公式替换列的每个现有值?

时间:2010-10-04 03:12:33

标签: excel vba excel-vba ms-office

我的工作表已有数据。不幸的是,后来我意识到E列中的所有值都应该通过调用我自己的用户定义函数并将值作为函数参数传递来验证和更改。例如,假设我在E栏中有以下数据:

E1: "This is a text in (E1)"
E2: "This is a text in (E2)"
...
E7000: "This is a text in (E7000)"

现在,我希望E列中的每个值都可以通过如下公式进行更改:

E1: = RemoveBrackets("This is a text in (E1)")
E2: = RemoveBrackets("This is a text in (E2)")
...
E7000: = RemoveBrackets("This is a text in (E7000)")

假设Excel支持Regex,我的问题可以轻松解决。但遗憾的是Excel没有。有人可以为我的问题提出可能的解决方案吗?

提前致谢

2 个答案:

答案 0 :(得分:2)

1)插入新列“F”

2)将列E复制到F

3)写入E1

 =RemoveBrackets(F1)

4)将E1值拖动到E7000

5)隐藏F列。

编辑1

您可以通过多次查找/替换功能来完成此操作:

在每次通过前选择E列。

通行证

Find:              <"This is a text in>
Replace with:      <RemoveBrackets("This is a text in>

PASS 2

Find:              <)">
Replace with:      <)")>

通过3

Find:              <RemoveBrackets(>
Replace with:      <=RemoveBrackets(>

编辑2

可以在Excel中使用VB Regex替换字符串函数 您可以下载支持REGEX.SUBSTITUTE udf的工具包,例如Morefunc,或者您可以使用THIS作为指导来执行您自己的udf。

我在这里发布第二个引用的代码,仅用于链接独立性:

Public Function SearchNReplace1(Pattern1 As String, _
  Pattern2 As String, Replacestring As String, _
  TestString As String)
    Dim reg As New RegExp
    reg.IgnoreCase = True
    reg.MultiLine = False
    reg.Pattern = Pattern1
    If reg.Test(TestString) Then
        reg.Pattern = Pattern2
        SearchNReplace1 = reg.Replace(TestString, ReplaceString)
    Else
        SearchNReplace1 = TestString
   End If
End Function  

请阅读完整文章,因为您应首先在Excel中打开Microsoft VBScript Regular Expressions 5.5选项。

HTH

答案 1 :(得分:1)

与belisarius的方法类似,但没有留下痕迹:

  1. 插入列F
  2. 将值=RemoveBrackets(F1)
  3. 插入F1
  4. 通过F7000向下复制。
  5. 复制列F
  6. 右键单击单元格E1,选择“粘贴”,选择“值”。
  7. 删除列F