【问题标题】:VBA Excel - I need to replace this= ,""F with this= ,"F but not where it is this= ,"",VBA Excel - 我需要替换 this= ,""F 与 this= ,"F 但不是它在哪里 this= ,"",
【发布时间】:2014-08-19 01:15:56
【问题描述】:

对不起,标题似乎令人困惑。有一个包含大量数据的工作簿,我正在尝试为其编写宏。它就像查找/替换,但非常特定于我拥有的数据。

例如: 代替: ,""米老鼠公司"","唐老鸭","",

有: "米奇老鼠公司","唐老鸭","",

我需要最后一个“”,不要管它。我不确定如何准确地写这个。

我不希望为每个示例编程,因为这些专有名称会继续添加,并且不希望每次都重新编写 VBA 代码。

提前致谢!

【问题讨论】:

  • 首先将","", 替换为BROCKHAGER_KEY,然后将所有"" 替换为"。然后将BROCKHAGER_KEY 替换为","", :)
  • @SiddharthRout - 非常聪明!

标签: vba excel


【解决方案1】:

您总是可以对空引号进行初始替换,然后进行正常替换。这是最直接的方法。

Sub custFindReplace(srchRng As Range)
    Dim c As Range
    For Each c In srchRng.Cells
        c.Value = Replace(c.Value, ","""",", ","""""""",")
        c.Value = Replace(c.Value, """""", """")
    Next c
End Sub

如果您的逻辑仍然如此简单,那么更有效的方法(如 Siddarth 建议的那样)应该是使用内置的查找/替换:

Sub custFindReplace(srchRng As Range)
    srchRng.Replace What:=","""",", Replacement:=","""""""",", LookAt:=xlPart
    srchRng.Replace What:="""""", Replacement:="""", LookAt:=xlPart
End Sub

【讨论】:

  • Cells.Replace相比,循环非常慢:)
  • @SiddharthRout 是的。就看他的逻辑是不是更复杂了。
  • + 1 糟糕,抱歉,我没有看到您编辑了您的帖子。
  • @SiddharthRout 没关系。我想我只在您的答案通过前 10 秒保存了该编辑。我机器上的原始代码使用了唯一的密钥(我认为它是 或其他什么),但我消除了它,因为我认为 在这种情况下 将第二个和第三个替换组合起来更容易。
【解决方案2】:

关于我的评论,

这是你正在尝试的吗?

Sub Sample()
    Dim UniqueKey As String

    UniqueKey = "BROCKHAGER_KEY"

    With ThisWorkbook.Sheets(1).Cells
        .Replace What:=""",""""", Replacement:=UniqueKey, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

        .Replace What:="""""", Replacement:="""", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

        .Replace What:=UniqueKey, Replacement:=""",""""", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    End With
End Sub

【讨论】:

  • 我认为这可能真的有效。为了确定,我将对数据进行一些测试。此外,我想在屏幕上添加一个显示“您已替换 n 个错误”的 MsgBox,以便我可以与用户讨论其中有多少已被替换。我尝试输入“Count = Count + 1”,但显然它必须以不同的方式编写。谢谢你,我会告诉你测试是如何进行的。
  • 如果您想要计数,则必须使用.FindNext 在循环中进行替换。见THIS
  • 好的。我做了测试。有 2 个错误:260857761,","Roger McCullough","64800262", 应该是 260857761,"","Roger McCullough","64800262",它在哪里留下双引号。
  • AND 203980919,"00000000",""Frank W. Berlin & Associates L.L.C.","656", 应该是 203980919,"00000000", "Frank W. Berlin & Associates L.L.C.","656", 将 "" 取出
  • 在尝试 Mark 时,它显示“argument not optional”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多