2013-08-23 61 views
11

我试图删除字符串内容到字符串中包含的某个单词。例如Excel VBA - 删除字符串内容最多* word *

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

我想使用VBA,以取代与

"They are red and blue." 

即删除所有内容单词“他们”。我不知道字符串内容和它包含的字符数量。

我不知道如何做到这一点,我非常感谢您的帮助!

+4

看我不知道人们为什么会奖负面的评级为这一点;我几乎不知道如何编程,我真的需要帮助。如果我不能为VBA创建任何代码作为一个相当新的VBA,那为什么会这么糟糕呢?对于那些没有像大多数用户那样经验丰富的人来说,这有点不公平。 – jcv

+7

你有几个答案,并接受了一个,所以也许我可以提到,有很多博客(充满混乱和怀疑的建议)可供您使用。 IMO SO比其中的任何一个都更好,因为这样的指导方针就是:“要求提供代码的问题必须对所解决的问题有最小程度的理解。包括尝试解决方案,为什么他们没有工作,以及预期的结果。你在这里非常受欢迎,但是打破惯例>期待制裁,这对你有利(以及对其他人)。 – pnuts

+0

@jcv我被禁止问的问题,因为人们downvoted没有给出理由或答案......我知道你的痛苦 – 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

这也会捕获部分单词。如果你正在搜索“我将采取算法去”中的“去”,那么你将最终得到“算法去”。 – 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驱动stratergy的问题写在哪里...... – 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