『Excel VBA 表計算とプログラミング学習サイト』では、アフィリエイトプログラムを利用して商品を紹介しています。

英単語カウンター

文章そのものをデータベースとして活用するときなど、単語の総数をカウントしたいときがあります。日本語の文章だと単語同士の区切りがどこにあるのかわからないので相当に難しいのですが、英語は単語間スペースを利用して比較的簡単に英単語をカウントできます。今回は Excel 関数の LEN と SUBSTITUTE を組み合わせて英単語を数えてみます。ちょっと算数みたいなとこがあるけど、そのへんも楽しんでくださいな。
 
LEN は文字数を数える関数です。

=LEN("Kobato")

と入力すると「6」という文字数を返します。SUBSTITUTE 関数はある文字列の中にある文字を別の文字に置き換えます。たとえば

=SUBSTITUTE("こばとちゃん","こばと","マリ")

のように入力すると「こばとちゃん」という文字列の中の「こばと」の部分が「マリ」と置き換えられて「マリちゃん」と返してきます。

【Excel】文章中の英単語を数える方法

それでは、まずシートに次のような例文を用意しましょう。[] は英文が入っているセル番地です。

[B3] Hi! I am Linguistic AI Kobato!
[B4] I was born in Kyoto.
[B5] I will be 1030 years old this year.

1つの文を1つのセルに入れることにして、下図のようなシートを作ります。
 
英単語のカウント
 
最初の文が入っているのは B3 セルです。

=LEN(B3)

は半角スペースも含めた文字数を計算します。そして

=SUBSTITUTE("B3"," ","")

はセル B3 にある英文から、「” “」(半角スペース)を、「””」(何もない状態)に置き換えます。つまり半角スペースを削除して、

Hi!IamLinguisticAIKobato!

という文字列を得ていることになります。この文字列に含まれる文字数は、

=Len(Hi!IamLinguisticAIKobato!)

によって求められます。これを元の英文の文字数から差し引くと、元の英文に含まれていた半角スペースの数となります。そして、それに 1 を加えると単語数が得られるという仕組みです! というわけで、セルC3 には

=LEN(B3)-LEN(SUBSTITUTE(B3," ",""))+1

と入力しましょう。それから、セル C5 まで同じ数式をオートフィルで埋めて、セル C5 には

=SUM(C3:C5)

と入力して合計しておきます。これで全文の単語数をカウントできました。

【VBA】英単語カウンター

英単語をカウントする VBA マクロを作成してみましょう。

'[VBA] 英単語カウンター(1)

Sub Word_Counter_1()

  Dim sentence As String
  Dim counter As String

  '変数に文章を格納
  sentence = "I live in Ikebukuro."

  '英単語の数をカウント
  counter = Len(sentence) - Len(Replace(sentence, " ", "")) + 1

  Debug.Print counter

End Sub

Word_Counter_1() を実行すると、イミディエイトウィンドウに「4」が表示されます。考え方は記事の前半で解説した Excel 関数で処理する場合と同じです。Excel の LEN 関数と同様に、VBA の Len 関数は文字列の長さを返すので、

Len(sentence)

は変数 sentence に格納された文章に含まれる文字数を半角スペースを含めてカウントします。VBA の Replace は指定した文字列を別の文字列に置き換える関数で、

Replace(sentence, " ", "")

は変数 sentence に格納された文章から半角スペースを取り除いた文字列です。これを Len 関数にネストした

Len(Replace(sentence, " ", ""))

は、もとの文章から半角スペースを取り除いた文字列の文字数です。なので、

Len(sentence) - Len(Replace(sentence, " ", "")) + 1

は文章に含まれる英単語の数ということになります。
 
選択したセル範囲に含まれるすべての英単語をカウントするプロシージャも作っておいたので、ほしい人はご自由にお持ち帰りくださいな。

'[VBA] 英単語カウンター(2)

Sub Word_Counter_2()

  Dim sentence As String
  Dim counter As Long

  For Each myrange In Selection
    sentence = myrange.Value
    counter = counter + Len(sentence) - Len(Replace(sentence, " ", "")) + 1
  Next

  MsgBox counter, vbOKOnly, "英単語の数"

End Sub

ChatGPT に英単語を数える VBA マクロを作るように頼むと、次のようなコードを書いてくれました。

'[VBA] 英単語カウンター(3)
Sub CountWords()
    Dim cell As Range
    Dim wordsCount As Integer
    Dim word As Variant

    ' 英単語の数を初期化
    wordsCount = 0

    ' 選択範囲内の各セルに対して処理を実行
    For Each cell In Selection
        ' セルの値を空白で分割して単語を取得
        For Each word In Split(cell.Value, " ")
            ' 取得した単語が英単語かどうかを判定
            If word Like "[A-Za-z]*" Then
                ' 英単語の数をインクリメント
                wordsCount = wordsCount + 1
            End If
        Next word
    Next cell

   ' 英単語の数をメッセージボックスで表示
    MsgBox "選択したセル範囲に含まれる英単語の数は " & wordsCount & " です。"
End Sub

英単語を正規表現パターン “[A-Za-z]*” に一致する文字列として扱うという、高等テクニックを披露してくれました。すごいですね。私もこんなふうに正規表現を使いこなしてみたいです。

コメント