mayu
2025/01/24 (金) 22:48:16
fc5d2@6c788
テキストボックスA="あいうえおかきく"
テキストボックスB="かきくけこさしす"
のとき、"かきく" が重複していると判定し
テキストボックスB="けこさしす"に変換したい
シンプルに、テキストボックスBに入力された文字列を一文字ずつチェックしていけばいいでしょう
Function OnesideUnique(ByVal argA As Variant, ByVal argB As Variant) As Variant
OnesideUnique = argB
If (LenB(Nz(argA)) = 0 Or LenB(Nz(argB)) = 0) Then Exit Function
Dim i As Long
Dim c As Long
Dim buff() As String
For i = 1 To Len(argB)
If (InStr(1, argA, Mid$(argB, i, 1), vbBinaryCompare) = 0) Then
ReDim Preserve buff(c)
buff(c) = Mid$(argB, i, 1)
c = c + 1
End If
Next i
If (UBound(buff) > -1) Then
OnesideUnique = Join(buff, "")
End If
End Function
テキストボックスA, Bともにフォーム上に設置したコントロールだと仮定すると
コマンドボタンのクリック時イベント等で結果を確認するといいでしょう
Private Sub コマンドボタン名_Click()
Me.テキストボックスB.Value = _
OnesideUnique(Me.テキストボックスA.Value, Me.テキストボックスB.Value)
End Sub
通報 ...
慧眼のhatenaさんが仰せのように、もし 連続した複数文字列を対象 とするのでしたら
「連続」の定義、つまり最小で何文字連続している必要があるのか
を明確にする必要があるでしょう
テキストボックスA = "あいうえおかきく"
テキストボックスB = "[@あいうえお@おかき@きくうえお@いうえおかういあいうえおかきおかく]"
Bの文字列で「 連続3文字以上で構成された語句でAに対する最長マッチ 」を繰り返す
と定義した場合、
[@あいうえお@おかき@きくうえお@いうえおかういあいうえおかきおかく]
Bからは、背景色を付与した5箇所の語句を検知( グレーアウト部分は長さが不足 )し、
最終的に
をご希望の結果とするサンプルも載せておきます