Манипулирование строками в Excel - как удалить часть строки, если там есть другая часть?

StackOverflow https://stackoverflow.com/questions/263225

Вопрос

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

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

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

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

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

A, D, G, Y, Z

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

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

Это было полезно?

Решение 7

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

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

(здесь есть " real " значения с правилами приоритета)

Это выглядит примерно так -part-i # 263335 "> @ ответ Джозефа .

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

Другие советы

Попробуй:

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

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

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

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

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

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

Ознакомьтесь с http://msdn.microsoft.com/en-us/library/yab2dx62(VS.85).aspx (для справки по регулярному выражению)
и простой инструмент для проверки ваших регулярных выражений: 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 (пропуская пробелы, если это необходимо).

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

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

Я думаю, что 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; Quot &; Quot &;); А2).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top