2008-11-04 2 views
7

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

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

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

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

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

A, D, G, Y, Z 

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

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

ответ

0

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

=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

fwiw: это ответ, который я использовал - спасибо за другие предложения! – warren 2009-01-06 22:03:49

0

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

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 

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

0

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

If InStr(strString, "Y") > 0 Then 
    strString = Replace(strString, "d", "") 
    strString = Replace(strString, " ", "") 
    strString = Replace(strString, " ,", "") 
    strString = Replace(strString, ",,", ",") 
End If 
5

Try:

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

Но это предполагает, что вы всегда имеете запятую и пробел вслед за Д.

+0

Вам нужно использовать ISERROR или ISNUMBER в инструкции FIND, если он не находит то, что ищет (и поэтому вам придется переключать два случая вокруг). – 2008-11-04 21:24:50

0

Если не так много этих комбинаций, которые вы хотите удалить, вы можете использовать = IF (FIND ("D"; A2)> 0; REPLACE (A2; 1; 3; ""); A2) ,

1

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

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

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

Смежные вопросы