Bの文字列で「 連続3文字以上で構成された語句でAに対する最長マッチ 」を繰り返す
と定義した場合、
mayuさんの上記の定義を仕様とする場合は下記のコードでもよさそう。
Function RemoveDuplicatesX(ByVal argA As Variant _
, ByVal argB As Variant _
, Optional ByVal argMinimum As Long = 3) As Variant
RemoveDuplicatesX = argB
Dim lA As Long, lB As Long, l As Long
lA = Len(Nz(argA))
lB = Len(Nz(argB))
If lA < argMinimum Or lB < argMinimum Then Exit Function
If lB < lA Then l = lB Else l = lA
Dim i As Long, j As Long
For i = l To argMinimum Step -1
For j = 1 To lA - i
RemoveDuplicatesX = Replace(RemoveDuplicatesX, Mid(argA, j, i), "")
Next
Next
End Function
Private Sub コマンドボタン名_Click()
'// 重複と見なす文字列の最小連続長は関数の第三引数で指定します(省略時は3)
Me.テキストボックスB.Value = _
RemoveDuplicatesX(Me.テキストボックスA.Value, Me.テキストボックスB.Value)
End Sub
通報 ...
hatenaさんのコード、シンプルで素敵ですね
RemoveDuplicatesX 関数の内側ループ、終了の数値を 1 だけ足せば更に完璧かもです
mayuさん、バグのご指摘ありがとうございます。
理由も含めてのていねいな解説、納得です。