Excelで文字列からキーワードを抽出する方法!VBAで一括処理!

Excelで文字列からキーワードを抽出したいときはないでしょうか。

例えば記事タイトル一覧から、検索用キーワードの候補となる用語をリストアップしたいときなどです。

けど、そんな中で悩むことは、

・Excelで文字列からキーワードを抽出したいが方法がわからない。
・VBAで文字列からキーワードを抽出したいがやり方がわからない。

ですよね。

今回はそんなお悩みを解決する
Excelで文字列からキーワードを抽出する方法について
まとめます!

Excelで文字列からキーワードを抽出するイメージ

Excelで文字列からキーワードを抽出するイメージについて説明をします。

キーワードを抽出したい文字列を複数行用意します。

別シートにキーワードを分割する基準となる語句を入力します。

VBAを実行すると、

はい、キーワードの抽出ができました。

キーワードを出力する位置もカンタンに変えられます。

他に不要にしたい語句や分割基準にしたい文字がある場合は、分割基準文字を追加すれば対応可能です。

それでは早速使ってみましょう。

タカヒロ
タカヒロ
カンタンな形態素分割法と思ってもらえばと思います。

文字列からキーワードを抽出するデータを用意する

まずは、文字列からキーワードを抽出するデータを用意しましょう。

サンプルは以下のようにしました。

タカヒロ
タカヒロ
エク短の記事タイトル一覧をサンプルにしています。

別シートにキーワードを分割する基準となる語句を入力する。

別シートにキーワードを分割する基準となる語句を入力します。

サンプルでは「分割基準文字」シートを追加し、A列に文字を追加しています。
文字は、言葉を関連付ける助詞の「を」や「が」などやキーワード除外したい語句を加えていきます。

タカヒロ
タカヒロ
分割基準の文字は文字列の内容によって変更してください。

文字列からキーワードを抽出するVBA

文字列からキーワードを抽出するVBAを準備します。

サンプルコードは以下の通りです。

Sub 文字列からキーワードを抽出する()

    Dim i As Integer
    Dim j As Integer
    Dim strTemp As Variant
    Dim strKeyword As Variant
    Dim strKeywords As Variant
    Dim strStartCellCol As String
    Dim strStartCellRow As Integer
    
    
    '分割基準文字を指定します。
    strKeywords = Sheets("分割基準文字").Range("A1:A15")
    
    '分割処理対象の文字列が入力されているセルを指定します。
    strTemp = Range("A1:A5")
    
    '出力開始セルの列を指定します。
    strStartCellCol = "B"
    
    '出力開始セルの行数を指定します。
    strStartCellRow = "1"
    
    '分割基準文字パターン分繰り返します。
    For Each strKeyword In strKeywords
    
        '指定行数分処理します。
        For i = LBound(strTemp, 1) To UBound(strTemp, 1)
            For j = LBound(strTemp, 2) To UBound(strTemp, 2)
            
                 '文字列に分割基準文字が含まれているか判定します。
                If InStr(strTemp(i, j), strKeyword) Then
                
                    '分割基準文字をカンマへ置換します。
                    strTemp(i, j) = Replace(strTemp(i, j), strKeyword, ",")
                    
                    '",,"を削除します。
                    strTemp(i, j) = Replace(Replace(strTemp(i, j), ",,,", ","), ",,", ",")
                    
                End If
            Next
        Next
    Next
    
    '配列のデータを指定開始セルへ出力します。
    Range(strStartCellCol & strStartCellRow & ":" & strStartCellCol & strStartCellRow + UBound(strTemp, 1) - 1) = strTemp
    
    '文字列をカンマ区切りで分割し、セルへ出力します。
    Range(strStartCellCol & strStartCellRow & ":" & strStartCellCol & strStartCellRow + UBound(strTemp, 1) - 1).TextToColumns Destination:=Range(strStartCellCol & strStartCellRow), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=True, Space:=False, Other:=False, _
            FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1)), TrailingMinusNumbers:=True

End Sub

VBAの設定をする

文字列からキーワードを抽出するVBAの設定を行っていきましょう。

設定箇所は以下の通りです。

分割基準文字を指定します。Rangeの範囲は入力した内容に応じて変更してください。

strKeywords = Sheets(“分割基準文字”).Range(“A1:A15”)

分割処理対象の文字列が入力されているセルを指定します。

strTemp = Range(“A1:A5”)

出力開始セルの列を指定します。A列に文字列があればB列以降を指定してください。

strStartCellCol = “B”

出力開始セルの行数を指定します。A列の文字列の行数に応じて変更してください。

strStartCellRow = “1”

VBAを実装し実行する

VBAを実装し実行してみましょう。

実装方法は「VBAの実装手順」をご覧ください。

実装できたらマクロから「文字列からキーワードを抽出する」を見つけ実行します。

はい、文字列からキーワードが抽出されていますね!

VBAの説明

分割基準文字パターン分繰り返します。

For Each strKeyword In strKeywords

指定行数分処理します。

For i = LBound(strTemp, 1) To UBound(strTemp, 1)
For j = LBound(strTemp, 2) To UBound(strTemp, 2)

文字列に分割基準文字が含まれているか判定します。

If InStr(strTemp(i, j), strKeyword) Then

分割基準文字をカンマへ置換します。

strTemp(i, j) = Replace(strTemp(i, j), strKeyword, “,”)

“,,”をReplaceメソッドでネストしながら削除します。

strTemp(i, j) = Replace(Replace(strTemp(i, j), “,,,”, “,”), “,,”, “,”)

配列のデータを指定開始セルへ出力します。

Range(strStartCellCol & strStartCellRow & “:” & strStartCellCol & strStartCellRow + UBound(strTemp, 1) – 1).TextToColumns Destination:=Range(strStartCellCol & strStartCellRow), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=True, Space:=False, Other:=False, _
FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1)), TrailingMinusNumbers:=True

分割したキーワードの出力列を変更する

続いて、分割したキーワードの出力列を変更してみましょう。

現在B列へ出力していますが、これをD列へ変更してみます。

以下のコードを”D”へ変更します。

strStartCellCol = “D”

実行してみましょう。

はい、出力される列が変更されていますね!

タカヒロ
タカヒロ
出力開始行番号を変えると出力する行の位置も変えられます。
strStartCellRow = “1”
基本的に文字列がある行の位置と同じほうがよいでしょう。

VBAの実装手順

実装手順は以下の通りです。

今回はExcel側にこのVBAを実装します。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。
※完了メッセージやステータス管理など必要に応じて実装してもらえばと思います。

さいごに

いかがでしょうか。

今回は、
Excelで文字列からキーワードを抽出する方法について
まとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です