代码之家  ›  专栏  ›  技术社区  ›  warren

使用Excel进行字符串操作-如果存在另一部分,如何删除字符串的一部分?

  •  7
  • warren  · 技术社区  · 17 年前

    我做了一些谷歌搜索,但什么也没找到,尽管也许我只是找错地方了。我也不太擅长VBA,但我相信我可以用正确的指针来解决这个问题:)

    我正在构建一个字符串,它是基于各种条件的各种单元格的连接。我按顺序打了这些。

    =IF(A405<>A404,G405,G405&H404)
    

    我想做的是返回我的连接列表,如果替代者在列表中,则删除一个被替代的值。

    例如,请参阅以下列表:

    A, D, G, Y, Z
    

    我想删除 D 如果 如果 Y 存在。

    我该怎么办?(VBA或单元格,但我更喜欢单元格)

    7 回复  |  直到 17 年前
        1
  •  5
  •   Luke    17 年前

    尝试:

    =IF(ISERROR(FIND("Y",A1)),A1,SUBSTITUTE(A1,"D, ",""))
    

    但前提是D后面总是有逗号和空格。

        2
  •  2
  •   BradC    17 年前

    首先,为什么不在遍历所有单元格时保留一个字符串数组,然后在最后将其连接起来呢?

    否则,您将使用INSTR和MID等字符串函数来执行以下操作:

    start1 = instr(myLongString,"Y, ")
    if start1 > 0 Then
        start2 = instr(myLongString,"D, ")
        if start2 > 0 then
            newLongString = left(myLongString, start2 - 1) & _
                            mid(myLongString, start2 + 3)
        end if
    end if
    

    但是,正如我所说的,我会保留一个易于循环的数组,然后一旦你有了所有你知道你会使用的值,就在最后将它们连接起来。

        3
  •  1
  •   da_m_n    17 年前

    振动电波加速计 :您始终可以使用正则表达式对象。 我认为,只要正确构建正则表达式,就可以在脚本上测试任何东西。

    查看: http://msdn.microsoft.com/en-us/library/yab2dx62(VS.85).aspx (供正则表达式参考)
    以及一个简单的工具来测试你的正则表达式: http://www.codehouse.com/webmaster_tools/regex/

    在单元格中 :你可以用一种更友好的方式来做:
    假设在A:A列上有值。
    您可以在执行检查的位置添加一个新列
    if(indirect("A"&row()) <> indirect("A"&row()-1), indirect("G"&row()), indirect("G"&row())& indirect("H"&row()))
    或者不管值是什么。然而,我想在if语句的一个分支上,值应该是空的。之后,您只连接B:B列值(如果需要,跳过空格)。

    希望这能有所帮助。

        4
  •  0
  •   Andru Luvisi    17 年前

    从末尾开始可能更容易,在字符串的开头添加内容,只有在Y不存在的情况下才添加D。

        5
  •  0
  •   Fionnuala    17 年前

    我想D可以出现在任何地方,那么:

    If InStr(strString, "Y") > 0 Then
       strString = Replace(strString, "d", "")
       strString = Replace(strString, "  ", "")
       strString = Replace(strString, " ,", "")
       strString = Replace(strString, ",,", ",")
    End If
    
        6
  •  0
  •   bjorsig    17 年前

    如果要删除的组合不太多,可以使用=If(FIND(“D”;A2)>0;替换(A2;1;3;“”);A2)。

        7
  •  0
  •   Community CDub    8 年前

    我也通过电子邮件收到了一个可能的解决方案:

    =IF(A15<>A14,G15,IF(OR(AND(G15="CR247, ",ISNUMBER(FIND("CR247, ",H14))),AND(G15="CR149, ",ISNUMBER(FIND("CR215, ",H14))),AND(G15="CR149, ",ISNUMBER(FIND("CR180, ",H14))),AND(G15="CR180, ",ISNUMBER(FIND("CR215, ",H14))),G15="CR113, "),H14,G15&H14))
    

    (这具有具有优先级规则的“真实”值)

    它看起来与 @Joseph 的答案。

    有更好的解决方案吗?

    推荐文章