2013-08-23 5 views
11

Я пытаюсь удалить содержимое строки до определенного слова, содержащегося в строке. НапримерExcel VBA - удалить содержимое строки до * слова *

"Emily has wild flowers. They are red and blue." 

Я хотел бы использовать VBA для того, чтобы заменить это

"They are red and blue." 

т.е. удалить все содержимое до слова «они». Я не знаю содержание строки и количество содержащихся в ней символов.

Я не уверен, как это сделать, и я очень благодарен за вашу помощь!

+4

Look Я не знаю, почему люди удостоенный отрицательный рейтинг для этого; Я понятия не имею, как программировать это, и я действительно нуждаюсь в помощи. Почему это плохо, если я не могу создать какой-либо код для этого, как кто-то, кто довольно новичок в VBA? Это немного несправедливо по отношению к людям, которые не имеют такого большого опыта, как большинство пользователей здесь. – jcv

+7

У вас было несколько ответов и принято, поэтому, возможно, я могу упомянуть, что для вас доступно много блогов (полный беспорядка и с подозрительными советами). IMO SO лучше любого из них из-за таких правил, как 'Вопросы, требующие кода, должны демонстрировать минимальное понимание решаемой проблемы. Включите попытки решения, почему они не работают и ожидаемые результаты ». Вы очень желанны здесь, но нарушайте конвенции> ожидайте санкции, и это для вас (как и для других). – pnuts

+0

@jcv Мне не разрешали задавать вопросы, потому что люди ниспадали без объяснения причин или ответа ... Я знаю вашу боль – Babar

ответ

12

Здесь вы идете:

Dim s As String 
s = "Emily has wild flowers. They are red and blue." 

Dim indexOfThey As Integer 

indexOfThey = InStr(1, s, "They") 


Dim finalString As String 
finalString = Right(s, Len(s) - indexOfThey + 1) 
+0

Спасибо за быстрый ответ, который решает проблему! – jcv

+3

Обратите внимание, что вам не нужно вычислять длину строки. 'finalString = Mid (s, indexOfThey)', как и в случае с Mid, длина необязательна. – SeanC

+2

Это также уловит частичные слова. Если вы искали «идти» в «Я возьму алгоритм, чтобы идти», вы получите «gorithm to go». – Aharpe

3

Простой пример сбросив весь текст, прежде чем значение в строке.

Sub Foo() 
    Dim strOrig As String 
    Dim strReplace As String 
    strOrig = "The Quick brown fox jumped over the lazy dogs" 
    strReplace = "jumped" 

    MsgBox (DropTextBefore(strOrig, strReplace)) 

End Sub 

Public Function DropTextBefore(strOrigin As String, strFind As String) 
    Dim strOut As String 
    Dim intFindPosition As Integer 
    'case insensitive search 
    'could made it so that case sensitivity is a parameter but this gets the idea across. 
    If strOrigin <> "" And strFind <> "" Then 
     intFindPosition = InStr(UCase(strOrigin), UCase(strFind)) 
     strOut = Right(strOrigin, Len(strOrigin) - (intFindPosition + Len(strFind) - 1)) 
    Else 
     strOut = "Error Empty Parameter in function call was encountered." 
    End If 
    DropTextBefore = strOut 
End Function 
0

Если слово фиксируется, как "Они" в приведенном выше примере, вы можете просто сделать

  1. CTRL + H (Заменить)
  2. * Они (ваше слово со звездой)

в поле «Найти». Звездочка * является подстановочным символом, который можно назвать как-либо до или после (если добавлено в конце) слово.

Осторожно: будьте осторожны, если у вас есть повторяющиеся слова в одной и той же ячейке.

+0

Спасибо, но приложение, в котором я нуждаюсь, более сложное и требует, чтобы он управлялся VBA. – jcv

+0

Почему это занижено ... где было написано в вопросе о том, что это сложный и требуемый стратги VBA ... – Vasim

+0

Я собираюсь предположить, что «я бы хотел использовать VBA», а также Теги 'vba' и' excel-vba' указывают на VBA, а также тот факт, что ваш подход опасен и не учитывает тот факт, что текст перед словом «они» может измениться. Он не отвечает на вопрос и не отвечает на него безопасно. – LittleBobbyTables

1

Это работало отлично подходит для меня:

Sub remove_until() 

Dim i, lrowA, remChar As Long 
Dim mString As String 

lrowA = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 

For i = 1 To lrowA 

mString = Cells(i, 1).Value 


    If InStr(mString, "They") > 0 Then 

    remChar = Len(mString) - InStr(mString, "They") + 1 

    Cells(i, 2).Value = Left(mString, Len(mString) - remChar) 

    End If 


Next 

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