英単語カウント

 文章そのものをデータベースとして活用するときなど、単語の総数をカウントしたいときがあります。日本語の文章だと単語同士の区切りがどこにあるのかわからないので相当に難しいのですが、英語の場合は単語間スペースを利用して比較的簡単に 英単語をカウント できます。今回は 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)

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

 え? こばとちゃんは本当に 1030 歳なのかって?
 … ごめんなさい。本当は今年で 1032 歳です … ちょっとだけ、サバ読んじゃいました … ちょっとだけだし、別にいいじゃん …

【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

 実行するとイミディエイトウィンドウに「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

コメント

タイトルとURLをコピーしました