2016-12-07 11 views
3

文字列内の部分文字列を検索し、その部分文字列と前後の文字を置き換える方法はありますか?Excel VBA複雑な文字列の置換

例えば、私はこれらを持っている:

Mandatory659852 y n n TRY RACE 
Mechanica888654 y n n FRY SAME 
GILLETE685254 y n n CRY FACE 

私は、サブ文字列とその右にあるものは何でも3文字の左側にあるものは何でも6つの文字を含む部分文字列" y n n "を削除するVBAをプログラムすることができます?その結果は次のようになります:

私は用語が何であるか分からないため、Googleで検索できませんでした。私はVBAの.replaceをサブストリングの代わりに使うことができると知っていますが、文字数でワイルドカードを使う方法はわかりません

+1

VBAが必要ですか?私は* Mid()とSearch()の使い方でこれを行うことができると思います。編集:ここでは簡単ですが、簡単です: '= LEFT(A1、SEARCH(" "、A1))&RIGHT(A1,4)'。あなたがVBAでそれを必要としているならば、それをただVBAに "翻訳"します。これはあなたの最後の言葉が常に4文字であると仮定しています...それがもっとあれば微調整できます。 – BruceWayne

+0

私は、ワークシートにはVBAが好きです。なぜなら、長期的には仕事は少なくなりますが、手動でもプログラムでも、Left()やMid()やFind() )手動であれば) –

+0

私はLeft()とMid()について知っていますが、できるだけ簡単ではないコーディングでこれを行う方法を探しています。 Left()とMid()は私の最初の選択でしたが、前にこのような解決策を見て覚えていましたが、私はその解決策の用語や名前を覚えていませんでした:)他の理由でVBAを通して解決策を見つける必要があります。 – jay

答えて

8

VBAとして半ば、両方利用できるを使用して再。

セルを強調表示してこのマクロを実行するだけです。

「検索/置換」ダイアログでこれを使用することもできます。

Sub FixIt() 
Selection.Replace "?????? y n n ???", "", xlPart 
End Sub 

Results

+1

これは素晴らしいことです、私はあなたがそれを行うことができたことを知りませんでした。 (また、ビューにドラッグされた確認が私を笑わせてくれました)。 – BruceWayne

+1

それがあります! :D恐ろしい! 'Sheet1.Range(" B1 ")。Value = Sheet1.Range(" A1 ")。(" ?????????????????????????????????????????????????????????? "、"、xlPart、xlByRows、False)を置き換えます。コードは簡単で簡単です。 – jay

1

これはBruceWayneと同じように、

あなたは1つのワイルドカード文字に一致するように?を使用します。WS機能

Dim sINPUT As String 
    Dim sOUTPUT As String 

    sINPUT = "Mandatory659852 y n n TRY RACE" 

    sOUTPUT = Mid(sINPUT, 1, (InStr(1, sINPUT, " y n n") - 6) - 1) 
    sOUTPUT = sOUTPUT & Mid(sINPUT, 3 + (InStr(1, sINPUT, "y n n") + 1 + Len("y n n")))   
    Debug.Print sOUTPUT 
3

あなたは非常に一般的なフォーマットを持っているように私は式を使用していました。値がA1にある場合、B1で試してください:

= LEFT(A1、SEARCH( "ynn"、A1)-8)&右(A1、LEN(A1) - (SEARCH( "ynn"、A1 )8))

Excel results

はもちろん、これは3文字の単語に続いて、あなたは常にスペースに続いて「YNN」に続くスペースが続く6桁の数字と非常に厳格なフォーマットを有するに依存します、続いてスペースがあり、それから別のものがあります!!

関連する問題