web-dev-qa-db-ja.com

Excel VBA-* Word *までの文字列コンテンツを削除

文字列に含まれる特定の単語までの文字列コンテンツを削除しようとしています。例えば

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

それを置き換えるためにVBAを使用したい

"They are red and blue."

つまり、「They」という単語までのすべてのコンテンツを削除します。文字列の内容とそれに含まれる文字数がわかりません。

これを行う方法がわからないので、あなたの助けに本当に感謝します!

15
jcv

どうぞ:

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)
15
S Nash

文字列の値の前にすべてのテキストをドロップする簡単な例。

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
3
xQbert

これは私にとってはうまくいきました:

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
1
user8608712

上記の例の「They」のようにWordが修正されている場合は、簡単に行うことができます

  1. CTRL + H(置換)
  2. *彼ら(星の付いたあなたの言葉)

[検索]ボックス。スター*はワイルドカード文字で、Wordの前後に(末尾に追加されている場合)何でも呼び出すことができます。

注意:同じセルに重複する単語がある場合は注意してください。

0
Vasim