お世話になります。
テキストボックスA、テキストボックスBがあり、双方に入力された文字列を比較して、同じ文字列があればその文字列だけをテキストボックスAから削除したいのですが、そういったことがvbaで可能でしょうか?
テキストボックスA="あいうえおかきく"
テキストボックスB="かきくけこさしす"
のとき、"かきく"が重複していると判定し
テキストボックスB="けこさしす"に変換したいのです・・・
重複している文字列は必ず末尾というわけではなく、重複している文字数も都度変わります。
どなたかご存知であれば、教えてください。
よろしくお願いします。
シンプルに、テキストボックスBに入力された文字列を一文字ずつチェックしていけばいいでしょう
テキストボックスA, Bともにフォーム上に設置したコントロールだと仮定すると
コマンドボタンのクリック時イベント等で結果を確認するといいでしょう
慧眼のhatenaさんが仰せのように、もし 連続した複数文字列を対象 とするのでしたら
「連続」の定義、つまり最小で何文字連続している必要があるのか
を明確にする必要があるでしょう
テキストボックスA = "あいうえおかきく"
テキストボックスB = "[@あいうえお@おかき@きくうえお@いうえおかういあいうえおかきおかく]"
Bの文字列で「 連続3文字以上で構成された語句でAに対する最長マッチ 」を繰り返す
と定義した場合、
[@あいうえお@おかき@きくうえお@いうえおかういあいうえおかきおかく]
Bからは、背景色を付与した5箇所の語句を検知( グレーアウト部分は長さが不足 )し、
最終的に
をご希望の結果とするサンプルも載せておきます
例をみると連続した複数文字列を対象にするようにも思えますが、
一文字単位でも重複していれば削除するという仕様であれば、
mayuさんのコードでいいでしょう。
単純に下記でも同様の結果になります。
mayuさんの上記の定義を仕様とする場合は下記のコードでもよさそう。
hatenaさんのコード、シンプルで素敵ですね
RemoveDuplicatesX 関数の内側ループ、終了の数値を 1 だけ足せば更に完璧かもです
mayuさん、バグのご指摘ありがとうございます。
理由も含めてのていねいな解説、納得です。