7

我做了一些谷歌搜索,但找不到任何东西,但也许我只是在寻找错误的地方。我也不太擅长 VBA,但我相信我可以用正确的指针来解决它:)

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

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

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

例如,请参阅以下列表:

A, D, G, Y, Z

D Y存在时,我想删除。

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

4

7 回答 7

5

尝试:

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

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

于 2008-11-04T20:36:58.807 回答
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

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

于 2008-11-04T20:06:28.027 回答
1

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

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

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

希望这可以帮助。

于 2008-11-06T07:00:08.783 回答
0

从末尾开始可能更容易,在字符串的开头添加,并且仅在 Y 不存在时才添加 D。

于 2008-11-04T20:04:24.333 回答
0

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

If InStr(strString, "Y") > 0 Then
   strString = Replace(strString, "d", "")
   strString = Replace(strString, "  ", "")
   strString = Replace(strString, " ,", "")
   strString = Replace(strString, ",,", ",")
End If
于 2008-11-04T20:15:30.987 回答
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的答案比较相似。

有更好的解决方案吗?

于 2008-11-04T20:48:12.573 回答
0

如果要删除的这些组合不多,可以使用 =IF(FIND("D"; A2)> 0; REPLACE(A2;1;3;"");A2)。

于 2008-11-04T21:37:20.573 回答