Манипулирование строками в Excel - как удалить часть строки, если там есть другая часть?
-
06-07-2019 - |
Вопрос
Я немного погуглил и ничего не могу найти, хотя, возможно, я просто ищу не в тех местах.Я также не очень разбираюсь в 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). Р>