Работа со строками в Excel - как удалить часть строки, если есть другая часть? - PullRequest
7 голосов
/ 04 ноября 2008

Я немного погуглил и ничего не могу найти, хотя, может быть, я просто смотрю не в том месте. Я также не очень хорошо разбираюсь в VBA, но уверен, что смогу разобраться с правильными указателями:)

У меня есть строящаяся строка, которая объединяет различные ячейки в зависимости от условий. Я ударил их по порядку.

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

Что я хочу сделать, так это вернуться через мой составной список, удалив замененное значение, если заменяющее устройство присутствует в списке.

Например, см. Следующий список:

A, D, G, Y, Z

Я хочу удалить D , если и только , если присутствует Y.

Как бы я поступил по этому поводу? (VBA или внутри камеры, хотя я бы предпочел внутри камеры)

Ответы [ 7 ]

5 голосов
/ 04 ноября 2008

Попробуйте:

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

Но это предполагает, что у вас всегда есть запятая и пробел после D.

2 голосов
/ 04 ноября 2008

Во-первых, почему бы не сохранить строковый массив вместо того, чтобы пройти все ячейки, а затем объединить все в конце?

В противном случае вы будете использовать строковые функции, такие как 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

Но, как я уже сказал, я бы сохранил массив, который легко проходить по циклу, а затем, когда у вас будут все значения, которые вы ЗНАЕТЕ, вы будете использовать, просто объедините их в конце.

1 голос
/ 06 ноября 2008

VBA : Вы всегда можете использовать объект регулярного выражения. Я думаю, что это дает вам возможность тестировать что угодно в вашем скрипте, если вы правильно строите регулярное выражение.

Выезд: 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 (при необходимости пропуская пробелы).

Надеюсь, это поможет.

0 голосов
/ 05 ноября 2008

Если вы хотите удалить не слишком много таких комбинаций, вы можете использовать = IF (НАЙТИ ("D"; A2)> 0; ЗАМЕНИТЬ (A2; 1; 3; ""); A2).

0 голосов
/ 04 ноября 2008

Я только что получил это как возможное решение по электронной почте:

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

Есть ли лучшее решение?

0 голосов
/ 04 ноября 2008

Полагаю, D может появиться где угодно, так как насчет:

If InStr(strString, "Y") > 0 Then
   strString = Replace(strString, "d", "")
   strString = Replace(strString, "  ", "")
   strString = Replace(strString, " ,", "")
   strString = Replace(strString, ",,", ",")
End If
0 голосов
/ 04 ноября 2008

Вероятно, легче начинать с конца, добавлять в начало строки и добавлять D, только если Y отсутствует.

...