私の友人私は、Excelでデータを操作するときに彼が直面する実際の問題のいくつかについて、彼と頻繁に連絡を取ります。
他の読者にも役立つかもしれないので、何度も彼のクエリをこのサイトのExcelチュートリアルに翻訳します。
これもそのようなチュートリアルのXNUMXつです。
私の友人は先週、次の質問で私に電話をしました。
Excelの列に住所データがあり、住所に繰り返しテキスト文字列(単語)を含むセルを識別/フィルタリングしたい。
これは、テキスト文字列が繰り返されているセル(赤い矢印の付いたセル)をフィルタリングする同様のデータセットです。
現在これを困難にしているのは、データに一貫性がないことです。これは営業担当者が手動で作成したデータセットをまとめたものであるため、データセットに不一致がある可能性があります。
それについて考えてください:
- このデータセットでは、任意のテキスト文字列を繰り返すことができます。たとえば、地域名または都市名、あるいはその両方にすることができます。
- 単語はスペース文字で区切られ、都市名がXNUMX文字かXNUMX文字かで一貫性がありません。
- そのようなレコードは何千もあり、テキスト文字列が繰り返されているレコードをフィルタリングする必要があります。
テキストから列、数式などの多くのオプションを検討した後、最終的にVBAを使用して作業を行うことにしました。
そこで、これらのセルを分析するカスタムVBA関数( 'IdDuplicate')を作成し、テキスト文字列に重複する単語がある場合はTRUEを、重複しない場合はFALSEを取得します(以下を参照)。
このカスタム関数は、テキスト文字列内の各単語を分析し、テキスト内で出現する回数をチェックします。カウントが1より大きい場合はTRUEを返します。それ以外の場合はFALSEを返します。
また、XNUMX文字以上の単語のみをカウントするように作成されました。
TRUE / FALSEデータを取得すると、TRUEであるすべてのレコードを簡単にフィルタリングできます。
それでは、Excelでこれを行う方法を紹介します。
カスタム関数のVBAコード
これは、VBAでカスタム関数を作成することによって行われます。この関数は、Excelの他のワークシート関数と同じように使用できます。
VBAコードは次のとおりです。
関数IdDuplicates(rng As Range)As String Dim StringtoAnalyze As Variant Dim i As Integer Dim j As Integer Const minWordLen As Integer = 4 StringtoAnalyze = Split(UCase(rng.Value)、 "")For i = UBound(StringtoAnalyze)To 0ステップ-1If Len(StringtoAnalyze(i))<minWordLen Then GoTo SkipA For j = 0 To i-1 If StringtoAnalyze(j)= StringtoAnalyze(i)Then IdDuplicates = "TRUE" GoTo SkipB End If Next j SkipA:Next i IdDuplicates = "FALSE" SkipB:関数の終了
このVBAコードの使用方法
VBAコードができたので、通常のワークシート関数として機能できるように、Excelのバックエンドに配置する必要があります。
VBAコードをバックエンドに配置する手順は次のとおりです。
- [開発者]タブに移動します。
- Visual Basicをクリックします(キーボードショートカットALT + F11を使用することもできます)
- 開いているVBエディターのバックエンドで、任意のブックオブジェクトを右クリックします。
- 「挿入」に移動し、「モジュール」をクリックします。これにより、ブックのモジュールオブジェクトが挿入されます。
- モジュールコードウィンドウで、上記のVBAコードをコピーして貼り付けます。
バックエンドにVBAコードを配置したら、関数–'IdDuplicates 'を他の通常のワークシート関数と同じように使用できます。
この関数は、テキストがあるセルのセル参照というXNUMXつのパラメーターを取ります。
この関数の結果は、TRUE(重複する単語がある場合)またはFALSE(重複しない場合)です。このTRUE / FALSEリストを取得したら、TRUEでフィルタリングして、テキスト文字列が繰り返されているすべてのセルを取得できます。
注:私が作成したコードは、XNUMX文字より長い単語のみを対象としています。これにより、テキスト文字列に1、2、または3文字の長さの単語(12 A、KGM、LDAなど)が含まれている場合、重複をカウントするときにそれらの単語が無視されます。必要に応じて、コードでこれを簡単に変更できます。
この機能は、モジュール内のコードをコピーしたブックでのみ使用できます。このコードを他のワークブックでも使用できるようにする場合は、このコードをコピーしてそれらのワークブックに貼り付ける必要があります。または、アドインを作成することもできます(これを有効にすると、システム上のすべてのブックでこの機能を使用できるようになります)。
また、このブックを.xlsm拡張子で保存することを忘れないでください(マクロコードが含まれているため)。