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の範囲は入力した内容に応じて変更してください。

分割処理対象の文字列が入力されているセルを指定します。
出力開始セルの列を指定します。A列に文字列があればB列以降を指定してください。
出力開始セルの行数を指定します。A列の文字列の行数に応じて変更してください。

VBAを実装し実行する
VBAを実装し実行してみましょう。
実装方法は「VBAの実装手順」をご覧ください。
実装できたらマクロから「文字列からキーワードを抽出する」を見つけ実行します。
はい、文字列からキーワードが抽出されていますね!


VBAの説明
分割基準文字パターン分繰り返します。
指定行数分処理します。
For j = LBound(strTemp, 2) To UBound(strTemp, 2)
文字列に分割基準文字が含まれているか判定します。
分割基準文字をカンマへ置換します。
“,,”をReplaceメソッドでネストしながら削除します。
配列のデータを指定開始セルへ出力します。
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”へ変更します。
実行してみましょう。
はい、出力される列が変更されていますね!


strStartCellRow = “1”
基本的に文字列がある行の位置と同じほうがよいでしょう。
VBAの実装手順
実装手順は以下の通りです。
今回はExcel側にこのVBAを実装します。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
※完了メッセージやステータス管理など必要に応じて実装してもらえばと思います。
さいごに
いかがでしょうか。
今回は、
Excelで文字列からキーワードを抽出する方法について
まとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す