• 締切済み

一番左から1番目から3番目までの値の塊だけを置換

ああああああ があって あ を い に普通に置換すると いいいいいいい になりますが各セルの一番最初から文字別で数えて3番目までの値の塊だけを置 換する式を教えてください 変換元:ああああああ 検索文字:あ 置換文字:い 変換後:いいいいいい 検索文字を一つの値の塊とします 変換元:ああうえお 検索文字:え 置換文字 :半角スペース 変換後:ああうお 文字別にセル内で 一番左 から何番目に出てくるという基準で指定した値の塊を置換したいです 値の塊は一文字とは限りません 変換元:あああああい 検索文字:ああああ 置換文字:い 変換後:いあい この時はああああが一つの値の塊です 変換元:あああああい 検索文字:ああ 置換文字:い 変換後:いいあい 変換元:あああああい 検索文字:あ 置換文字:い 変換後:いいいいいい 検索文字を一つの値の塊とします 変換元:あいうえおかきくけこ 検索文字:きく 置き換え文字:キク 変換後:あいうえおかきくけこ あいうまでが3番目の値の塊なので変化なし 変換元:あいうえおかきくけこ 検索文字:おか 置き換え文字:オカ 変換後:あいうえおかきくけこ あいう までが3番目の値の塊なので変化なし 変換元:あああああい 検索文字:ああああ 置換文字 :い 変換後:いあい 変換元:かかかあああああい 検索文字:ああああ 置換文字:い 置換後:かかかいあい こういうことがA列の60000行のセルにできる式、マクロを教えてください 一つの値だけでなく複数の値を同時に検索し置換できるほうが良いです

みんなの回答

  • SI299792
  • ベストアンサー率47% (788/1647)
回答No.1

D1~D10 に検索文字 E1~E10 に痴漢文字 を入れるとします。 変換元はA1から下に入っているとします。 B1: =ChunkReplace(A1,D$1:E$10,3) 下へコピペ。 ユーザー定義関数です。以下のプログラムを標準モジュールに入れて下さい。 Option Explicit ' Function ChunkReplace(Word As String, Area As Range, ByVal Count As Integer)   Dim Start As Integer   Dim WorkStr As String   Dim Length As Integer '   For Start = 1 To Len(Word) '     If WorkStr <> Mid(Word, Start, 1) Then       Count = Count - 1       WorkStr = Mid(Word, Start, 1) '       If Count < 0 Then         Exit For       End If     End If   Next Start   WorkStr = Left(Word, Start - 1)   ChunkReplace = MultiReplace(WorkStr, Area) & Mid(Word, Start) End Function ' Function MultiReplace(Word As String, Area As Range) As String   Dim Row As Long   Dim FindWord As String   Dim ReplWord As String '   MultiReplace = Word '   For Row = 1 To Area.Rows.Count     FindWord = Area(Row, 1)     ReplWord = Area(Row, 2)     MultiReplace = Replace(MultiReplace, FindWord, ReplWord)   Next Row End Function

関連するQ&A