| ★特定の文字数を数える...の巻
|
| 問)下のようにセルに英文が入力されている。単語数を求めなさい。 |
![]() |
| (●`ε´●):英単語はスペースで区切られているから、スペースの数を数えてそれに+1してやれば英単語の数になる。簡単だな。 【´・ω・`】:その考えでいいと思うけど具体的にどうやってスペースの数を数えるんだ? (●`ε´●):決まっているだろ。COUNT系の関数を使うんだよ! 【´・ω・`】:甘いな!COUNT系の関数はセルの個数を数えるんだよ。セル内に入力されている特定の文字を数えるのには不向きだよ。 (●`ε´●):簡単そうに見えて結構難しいな。 【´・ω・`】:スペースの数をまじめに数えるなら2つ方法がある。ひとつは循環参照を利用する方法....。 (●`ε´●):循環参照か。おまえの大好きなやつだな。たしかPOKER SLOTでも使っていたな。で、もうひとつは? 【´・ω・`】:補助セルを使う。例えば上の例で言えばFind関数、Mid関数、Len関数を使ってセルB2の文字列の左端からスペースまでの文字数を数え、その部分をセルBの文字列から切り捨てていく。 (●`ε´●):? 【´・ω・`】:順序立てて言うと 1.Find関数を使い文字列(B2)の左端からスペースまでの文字数を数える。具体的には8になる。式は=FIND(" ",B2)だな。 2.Len関数で文字列(B2)の長さを数える。具体的には34になる。式は=LEN(B2)だな。 3.Mid関数で文字列(B2)から、スペースまでの文字を切り捨てる。具体的には下の式になる。 |
| =MID(B2,8+1,34-8) |
| 【´・ω・`】:1,2の式を3の式に代入して、ひとつにまとめれば下の式になる。 |
| =MID(B2,FIND(" ",B2)+1,LEN(B2)-FIND(" ",B2)) |
(●`ε´●):具体的には「Nothing is as important as health.」が「is as important as health.」になるというわけだな。 【´・ω・`】:そう。 (●`ε´●)::で? 【´・ω・`】:それを何回か繰り返していくと、文字列はだんだん短くなっていき、調べるべきスペースが無くなる。するとエラー「#VALUE!」になるから、何回目の操作で「#VALUE!」になったかを調べればスペースの数がわかる。そのスペースの数に1を加えれば単語の数が求められる。 ★サンプルファイルはこちら (●`ε´●):かったるいやり方だな。じゃ、もうひとつのやり方、循環参照を使うほうは? 【´・ω・`】:循環参照を使う方はそのうちに取り上げるよ。ここでは発想を変えて違うやり方を考えてみよう。べべちゃん、「Nothing is as important as health.」の文字数はいくつだ? (●`ε´●):え〜と。ピリオドまで入れて29文字だ。 【´・ω・`】:本当か? (●`ε´●):ああ、よ〜く数えたんだから間違いない! 【´・ω・`】:じゃあ、文字数を数えるLEN関数で確かめてみてくれ。 (●`ε´●)………あれ、??? 【´・ω・`】:どうしたんだ? (●`ε´●):29にならない。34になってしまう。どうしてだ?! 【´・ω・`】:べべちゃんが文字数を数えたときは無意識のうちにスペースを除いて数えていた。だから文字数が29になった。しかし…。 (●`ε´●):しかし、LEN関数はスペースも文字として扱い、それを勘定に入れて数えていたから34になった。 【´・ω・`】:その通り!だから34から29を引いた5がスペースの数だ。 (●`ε´●)::そしてその5に1を足した6が単語の数だ!! 【´・ω・`】:ビンゴ!!それでは以下にスマートなやりかたの手順をしめそう。A1に元になる英文が入力されているとして… 1.B1に=LEN(A1) 元になる英文の文字数を求める。先の例では34。 2.C1に=SUBSTITUTE(A1, " ","") 半角スペースを消去。 ※SUBSTITUTE関数の書式は以下の通り。この関数には置換機能がある。 |
| =SUBSTITUTE(A1, "検索する文字列 ","置換したい文字列") |
| 3.D1に=LEN(C1) スペース消去後の文字数を求める。先の例では29。 4.E1に=B1-D1 元になる英文に含まれるスペースの数を求める。 「元になる英文の文字数」−「スペース消去後の文字数」先の例では5。 5.F1にE1+1 「元になる英文に含まれるスペースの数」+1。これが単語の数。先の例では6。 サンプルファイルはこちら。 ★エラー対策 【´・ω・`】:さて、ここまでで基本的なことが終わった。 (●`ε´●):これから何をやるんだ? 【´・ω・`】:仕上げとしてエラー対策だ。 (●`ε´●):エラー対策? 【´・ω・`】:そう。例えば今作った式は |
| 単語数= 「元になる英文に含まれるスペースの数」+1 |
| という考えに基づいている。これには大きな落とし穴があるんだ。 (●`ε´●):落とし穴? 【´・ω・`】:うん。確かに大概の場合はこの式が成立する。しかし、英文の入力してある蘭を空欄にしてみて欲しい。 (●`ε´●):あっ!単語の数は当然、0にならなければいけないのに、1と表示されている! 【´・ω・`】:そう。これは明らかにおかしい。空欄の時は別扱いにしなければならない。 |
| 単語数= IF(空欄, 0, 「元になる英文に含まれるスペースの数」+1) |
| とするか |
| 単語数= 「元になる英文に含まれるスペースの数」+IF(空欄, 0, 1) |
| とするのが基本かな。 |
|
サイトTOPへ 戻る |