Excelのセルで重複するテキスト/単語をハイライトする方法

  • これを共有
Michael Brown

このチュートリアルでは、VBAを使用して、セル内の重複する単語や文字列をハイライトする方法を紹介します。

Excelの条件付き書式設定では、1回目の出現の有無、1列または複数列、連続した重複セル、キー列の同一値に基づく行全体など、考えられるあらゆる方法で重複を強調表示できます。 しかし、いつものように「しかし」があります。 条件付き書式規則はセルレベルで機能しますが、重複を強調したい場合は、次のようにします。のテキストをセル全体ではなく、マクロで処理することができます。 VBAの経験がなくても、急いでこのページを閉じないでください。 ここでは、すぐに使えるコード例と、ワークシートでの使い方の詳細な説明を記載しています。

    セル内の重複する単語をテキストの大文字小文字を無視して強調表示する

    この例では、セル内で重複する単語や文字列を、下の画像のように赤いフォントカラーで囲みます。 なお、小文字と大文字は同じ文字として扱われます。 例えば、以下のようになります。 オレンジ , オレンジ オレンジ は同じ単語とみなされる。

    マクロのコードは以下の通りです。

    Public Sub HighlightDupesCaseInsensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Enter delimiter that separates values in cell" , "Delimiter" , ", " ) For Each Cell In Application.Selection Call HighlightDupeWordsInCell(Cell, Delimiter, False ) Next End Sub HighlightDupeWordsInCell(Cell As Range, Optional Delimiter As String = " , Optional CaseSensitive As String,"")Boolean = True ) Dim text As String Dim words() As String Dim word As String Dim wordIndex, matchCount, positionInText As Integer If CaseSensitive Then words = Split(Cell.Value, Delimiter) Else words = Split(LCase(Cell.Value), Delimiter) End If For wordIndex = LBound (words) To UBound (words) - 1 word = words(wordIndex) matchCount = 0 For nextWordIdex = wordIndex + 1 To UBound (words) if word = (単語)words(nextWordIndex) Then matchCount = matchCount + 1 End If Next nextWordIndex If matchCount> 0 Then text = "" For Index = LBound (words) To UBound (words) text = text & words(Index) If (words(Index) = word) Then Cell.Characters(Len(text) - Len(word) + 1, Len(word)).Font.Color = vbRed End If text = text & Delimiter Next End If Next wordIndex End Sub

    セル内の重複テキストを大文字と小文字を区別して強調表示する機能

    Excelでテキストを入力する場合、ほとんどの場合、大文字と小文字は無視されがちです。 しかし、ある状況下では、テキストの大文字と小文字は重要です。 たとえば、IDやパスワードなどのレコードを扱う場合、次のような文字列は大文字になります。 1-AA , 1-aa 1-Aa は重複しないので、強調表示する必要はありません。

    この場合、以下のバージョンのコードを使用してください。

    Public Sub HighlightDupesCaseSensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Enter delimiter that separates values in cell" , "Delimiter" , ", " ) For Each Cell In Application.Selection Call HighlightDupeWordsInCell(Cell, Delimiter, True ) Next End Sub HighlightDupeWordsInCell(Cell As Range, Optional Delimiter As String = " " , Optional CaseSensitive As String )Boolean = True ) Dim text As String Dim words() As String Dim word As String Dim wordIndex, matchCount, positionInText As Integer If CaseSensitive Then words = Split(Cell.Value, Delimiter) Else words = Split(LCase(Cell.Value), Delimiter) End If For wordIndex = LBound (words) To UBound (words) - 1 word = words(wordIndex) matchCount = 0 For nextWordIdex = wordIndex + 1 To UBound (words) if word = (単語)words(nextWordIndex) Then matchCount = matchCount + 1 End If Next nextWordIndex If matchCount> 0 Then text = "" For Index = LBound (words) To UBound (words) text = text & words(Index) If (words(Index) = word) Then Cell.Characters(Len(text) - Len(word) + 1, Len(word)).Font.Color = vbRed End If text = text & Delimiter Next End If Next wordIndex End Sub

    Excelで重複する単語をハイライトするマクロの使い方

    VBAの初心者の方は、以下のステップバイステップの説明をご覧ください。 経験者の方は、ダウンロードのリンクだけ選んで、あとはスキップしてください :)

    ワークブックにコードを追加する

    まず、マクロのコードをExcelのワークブックに挿入します。 その方法を説明します。

    1. 重複を強調したいワークブックを開きます。
    2. Alt + F11キーを押して、Visual Basic Editorを開きます。
    3. 左ペインで、右クリック 本作品 を選択し インサート > モジュール をクリックすると、コンテキストメニューが表示されます。
    4. コードをコードウィンドウに貼り付けます。
    5. マクロを今後使用するために、ワークブックをマクロ対応の .xlsm ファイルとして保存してください。

    または、サンプルワークブックをダウンロードし、そこからマクロを実行することもできます。 サンプルワークブックには、以下のマクロが含まれています。

    • HighlightDupesCaseInsensitive(大文字・小文字を区別しない - 大文字と小文字の違いを無視して、セル内の重複を回避します。
    • HighlightDupesCaseSensitive - セル内の重複を大文字小文字を区別して強調表示する。

    詳しくは、「ExcelにVBAコードを挿入する方法」をご覧ください。

    マクロを実行する

    自分のワークブックにコードを追加した状態、または弊社のサンプルファイルをダウンロードして開いた状態で、次のようにマクロを実行します。

    1. ワークシートで、重複したテキストをハイライトしたいセルを選択します。 これは、1つの範囲でも、隣接していない複数の範囲でもかまいません。
    2. Alt + F8 を押す。
    3. 対象となるマクロを選択し 実行 .

    4. 選択したセルの値を区切る区切り記号を指定するよう求められます。 あらかじめ設定されている区切り記号(ここではカンマとスペース)が自動的に入力ボックスに表示されます。 必要に応じて、デフォルトの区切り記号のまま、または別の記号を入力して、「OK」をクリックしてください。

    しばらくすると、選択されたセル内の重複する文字列がすべて赤色(またはコードで設定されているフォントの色)で表示されます。

    ヒント:すばやく 重複を排除する セル内の文字列を削除するには、Ultimate Suiteに含まれる多くの時間節約ツールの一つであるRemove Duplicate Substringを使用します。

    ニーズに合わせてコードを調整する方法

    これらの使用上の注意とVBAのごく基本的な知識があれば(あるいは以下の指示に忠実に従えば)、あなたの必要性に応じてコードを簡単に修正することができます。

    同じモジュールに配置する

    お気づきのように、どちらのマクロも( HighlightDupesCaseSensitive HighlightDupesCaseInsensitive(大文字・小文字を区別しない ) を呼び出します。 HighlightDupeWordsInCell (ハイライトデュープウォーズインセル) 上記2つのマクロの違いは、当該関数に渡される第3パラメータ(CaseSensitive)だけです。

    大文字小文字を区別して検索する場合は、TRUE を設定する。

    HighlightDupeWordsInCell(Cell、Delimiter、True)を呼び出す。

    大文字小文字を区別しない検索を行う場合は、FALSE を設定する。

    HighlightDupeWordsInCell(Cell、Delimiter、False)を呼び出す。

    マクロを動作させるためには、そのコードが HighlightDupeWordsInCell (ハイライトデュープウォーズインセル) 関数は、マクロと同じモジュールに配置する必要があります。

    デリミタ

    マクロを実行すると、選択したセル内の単語や文字列を区切るデリミタの指定が求められます。 デフォルトのデリミタはカンマとスペース(", ")で、InputBoxにプリセットされています。

    デリミタ = 入力ボックス("セル内の値を区切るデリミタを指定", "Delimiter", ", ")

    コード中では、定義済みの区切り文字として他の文字を自由に使用することができます。

    カラー

    デフォルトでは HighlightDupeWordsInCell (ハイライトデュープウォーズインセル) は,複製を赤いフォント色でシェーディングします。 色はこの行で定義します。

    Cell.Characters(positionInText,Len(word)).Font.Color = vbRed

    ここで、vbRedはVBAの色定数のようなものです。 ダブりを別の色で表示するには、vbRedをvbGreenやvbYellowなどの別の定数に置き換えることができます。 vbBlueなど T サポートされている色定数の一覧はこちらです。

    以上、Excelのセルで重複した単語をハイライトする方法でした。 読んでくださってありがとうございました!また来週、当ブログでお会いしましょう。

    ダウンロード可能なもの

    セル内の重複をハイライトするコード例(.xlsmファイル)

    Ultimate Suite 14日間フル機能版(.exeファイル)

    Michael Brown は、ソフトウェア ツールを使用して複雑なプロセスを簡素化することに情熱を注ぐ熱心なテクノロジー愛好家です。テクノロジー業界で 10 年以上の経験があり、Microsoft Excel と Outlook、さらに Google Sheets と Docs のスキルを磨いてきました。 Michael のブログは、彼の知識と専門知識を他の人と共有することに特化しており、生産性と効率を向上させるためのわかりやすいヒントとチュートリアルを提供しています。経験豊富なプロフェッショナルであろうと初心者であろうと、Michael のブログでは、これらの重要なソフトウェア ツールを最大限に活用するための貴重な洞察と実践的なアドバイスを提供しています。