使用Excel进行字符串操作 - 如果有其他部分,如何删除部分字符串?

时间:2008-11-04 19:57:58

标签: excel vba string worksheet-function

我做了一些谷歌搜索,找不到任何东西,虽然也许我只是在找错了地方。我也不是很擅长VBA,但我确信我能用正确的指针弄明白:)

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

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

我想要做的是返回我的连锁列表,如果取代者在列表中,则删除被取代的值。

例如,请参阅以下列表:

A, D, G, Y, Z

如果 D存在,我想删除Y

我该怎么做? (VBA或in-cell,虽然我更喜欢in-cell)

7 个答案:

答案 0 :(得分:5)

尝试:

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

但是假设你总是在D之后有逗号和空格。

答案 1 :(得分:2)

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

否则,您将使用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

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

答案 2 :(得分:1)

VBA :您始终可以使用regexp对象。 我认为,只要您正确构建正则表达式,就可以在脚本上测试任何内容。

退房:http://msdn.microsoft.com/en-us/library/yab2dx62(VS.85).aspx(适用于regexp参考)
以及测试正则表达式的简单工具:http://www.codehouse.com/webmaster_tools/regex/

In-cell :你可以用更加出色的方式做到这一点:
假设在A栏:A,你有值 您可以在执行检查的位置添加新列 if(indirect("A"&row()) <> indirect("A"&row()-1), indirect("G"&row()), indirect("G"&row())& indirect("H"&row()))
或者无论价值多少。但我猜想,在if语句的一个分支上,该值应为空白。之后,只连接B:B列值(如果需要,跳过空格)。

希望这有帮助。

答案 3 :(得分:0)

可能更容易从最后开始,添加到字符串的开头,只有在Y不存在时才添加D.

答案 4 :(得分:0)

我猜D可以出现在任何地方,那么怎么样:

If InStr(strString, "Y") > 0 Then
   strString = Replace(strString, "d", "")
   strString = Replace(strString, "  ", "")
   strString = Replace(strString, " ,", "")
   strString = Replace(strString, ",,", ",")
End If

答案 5 :(得分:0)

我也是通过电子邮件将此作为可能的解决方案:

=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的答案相似。

有更好的解决方案吗?

答案 6 :(得分:0)

如果您要删除的这些组合中没有太多,可以使用= IF(FIND(“D”; A2)&gt; 0; REPLACE(A2; 1; 3;“”); A2) 。