用Excel中的string操作 – 如何删除部分string,如果另一部分?

我做了一些谷歌search,找不到任何东西,虽然也许我只是看错了地方。 我也不是很擅长VBA,但是我确信我可以用正确的方法来解决这个问题:)

我有一个string我正在build设,这是各种细胞的串联,基于各种条件。 我按顺序打这些。

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

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

例如,请参阅以下列表:

 A, D, G, Y, Z 

我想删除D Y存在。

我将如何去做这件事? (VBA或in-cell,虽然我更喜欢in-cell)

尝试:

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

但是,假定你总是在D后面留下逗号和空格。

首先,当你遍历所有单元格时,为什么不保留一个string数组,然后在最后连接它呢?

否则,您将使用像INSTR和MID这样的string函数来执行如下操作:

 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 

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

VBA :你总是可以使用正则expression式对象。 我认为,只要正确构build正则expression式,就可以在脚本上testing任何内容。

检出: http : //msdn.microsoft.com/en-us/library/yab2dx62 (VS.85) .aspx (对于正则expression式引用)
和一个简单的工具来testing你的regexps: http : //www.codehouse.com/webmaster_tools/regex/

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

希望这可以帮助。

最后开始可能比较容易,把它加到string的开头,如果Y不存在,只添加D.

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

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

如果你想删除的组合不是太多,你可以使用= IF(FIND(“D”; A2)> 0; REPLACE(A2; 1; 3;“”); A2)。

我刚刚通过电子邮件获得了这个解决scheme:

 =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)) 

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

它看起来和@约瑟夫的答案相似。

有更好的解决scheme吗?