我做了一些谷歌搜索,找不到任何东西,虽然也许我只是在找错了地方。我也不是很擅长VBA,但我确信我能用正确的指针弄明白:)
我正在构建一个字符串,它是各种单元格的串联,基于各种条件。我按顺序打了这些。
=IF(A405<>A404,G405,G405&H404)
我想要做的是返回我的连锁列表,如果取代者在列表中,则删除被取代的值。
例如,请参阅以下列表:
A, D, G, Y, Z
如果 D
存在,我想删除Y
和 。
我该怎么做? (VBA或in-cell,虽然我更喜欢in-cell)
答案 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) 。