Excel関数の勉強 3

文字列操作関数

ワークシート関数全部で33種類ありますが、同じ関数名の末尾に「B(バイトの意味)」の付いたものが7種程ありまして、 戻り値が「全角文字も、半角文字」も1字扱いか、「全角は2バイト、半角は1バイト」扱いにするだけの違いの、同じタイプになりますので、 種類としては、26種類と言うことができます。
この中の代表的なのが(一寸異色かな?)[TEXT] 関数で、多用されています。[TEXT] 関数は数値を指定した表示形式で文字列に表現する関数です。
他の文字列操作関数は、文字列から必要な文字を抽出したり、文字列の長さを調べたり、くっつけたり、 不必要部分を切り取ったり、または、大文字と小文字を切り替えたりするなど、文字どおり文字列の操作をする関数です。

指定した文字を抜き出す 関数に、[RIGHT] 関数、[LEFT] 関数、[MID] 関数があります。

RIGHT 関数

書式「 RIGHT(B1,n) 」

文字列の右端から[n文字]を抜き出します(B1は文字列セルの座標)

LEFT 関数

書式「 LEFT(B2,n) 」

文字列の左端から[n文字]を抜き出します(B2は文字列セルの座標)

MID 関数

書式「 MID(B3,N,n) 」

文字列の左端から数え[N]番目から、n個の文字を抜き出します

EXCELの関数使用例です。

下図をご覧ください。[B]と[C]列に、ご覧の表が作成されています。これを、[RIGHT],[LEFT]関数を利用して、分類して合計を算出したものです。
前回は、少し表の造りが違っていますが[MOD] 関数で「奇数行」と「偶数行」の違いで処理しました。(MOD 関数を参照ください。)これを、[RIGHT]と[LEFT] 関数を[IF] 関数にネストして解決した例です。
解説
「男子」と「女子」文字列の右から2文字ですので、[RIGHT]関数で、[B3]セルのnは2(文字)になります。
「小学」「中学」は文字列の左から2文字ですので、[LEFT]関数で、[B3]セルのnは2(文字)になります。
夫々を、[IF]  関数にネストすると
「 =IF(RIGHT(B3,2)="男子",C3,"") 」又は、「 =IF(RIGHT(B3:B24,2)="男子",C3:C24,"") 」
「 =IF(LEFT(B3,2)="小学",C3,"") 」 又は、「 =IF(LEFT(B3:B24,2)="小学",C3:C24,"") 」
H列は余禄で、「 =IF(B3="小学生男子",C3,"") 」になります。このように、個別に抜き出せますので詳細な分析が可能になります。

EXCELの関数使用例です。

検索と置換の関数

FIND 関数

書式:「 FIND(検索文字列,(検索対象を含む)文字列,開始位置(数値)) 」

条件にあてはまる文字の位置を探します。

数式パレットの注釈:条件にあてはまる文字の位置を返します。大文字小文字は区別されます。
検索文字列には検索したい文字列を指定します。ワイルドカードは使用できません。

数式例「 =FIND("文字列",A5,20) 」

EXCELの関数使用例です。
文中から「小文字」の位置を探します。検索開始位置を「読点」の次の[20]からにしました。戻り値は[23]文字目(左から数えて)になりました。 下記の[SEARCH] 関数と変わりません。「条件にあてはまる文字の位置」と「指定した文字の位置」と、 どのように、ニュアンスが異なるのか、私には分かりません。ただ、こちらのような使い道があります。

SEARCH 関数

書式:「 SEARCH(検索文字列,(検索対象を含む)文字列,開始位置(数値) 」

文字列の中から指定した文字の位置を検索します。

数式パレットの注釈:指定した文字の位置を返えします。
大文字、小文字は区別されません。半角、全角の区別なく1文字を1とします。
検索文字列には検索したい文字を指定します。 とあります。

数式例:「 =SEARCH("D",B1,1) 」

[SEARCHB] 関数と一緒に比較すると分かり易いです。下図をご覧ください。
EXCELの関数使用例です。

  1. [SEARCH] 関数の場合、 [c(半角)]の次の[D(全角)]を検索したところ、[4]と返ってきました。
  2. [SEARCHB] 関数の場合、[C(全角)]の次の[d(半角)]を検索したところ、[5]と返ってきました。
  3. (1)の場合、半角[c]も1文字として数えています。
  4. (2)の場合、全角[C]は2バイト文字のため、[d]は[5]バイト目ということになります。
  5. なお、ワイルドカード[*]&[?]使用可になっています。

ワイルドカードとは

[?]と[*]の文字を使って「検索」することを言います。[スタート]→[検索]→[フアイル名のすべて、 または一部]欄に例えば[検?]や[検*]を入力すると 検の付く「検索○○○○」「検定○○○」のフアイルやフォルダを探してくれます。名前の全部を忘れたときに使います。

「*」は複数の文字を「?」は一文字の代用をします。編集メニュー[検索と置換]で 
「槍ヶ岳と2字の焼岳とも1つの聖岳と穂高岳」
を[?]を2個使った[??岳]で検索し、「3文字」に置換し色付けした例です。
焼岳の前の「の」と聖岳の前の「の」が「3文字」に含まれました。(Wordでも同じ結果になります。)
なお、詳しくは、こちらを参照ください
EXCELの関数使用例です。

[FIND]関数と[SEARCH]関数の違い(EXCELヘルプより)

FIND 関数では、
指定された文字列 (検索文字列) を他の文字列 (対象) の中で検索し、 その文字列が他の文字列内で最初に現れる位置を左端から数え、その番号を返します。
SEARCH 関数と同じような働きをしますが、FIND 関数では英字の大文字と小文字を区別 できる代わりに、ワイルドカード文字を使用することができません。(SEARCH 関数は、この逆)

SEARCH 関数は、開始位置を先頭にして、
指定された文字列 (検索文字列) をほかの文字列 (対象) の中で検索し、 その文字列が最初に現れる位置の文字番号を返します。

SEARCH 関数を使用すると、ある文字列に含まれる特定の文字列の位置を調べることができ、 さらに MID 関数や REPLACE 関数と組み合わせて、その文字列を置き換えることができます。
SEARCH 関数では、半角と全角の区別なく 1 文字を 1 として処理が行われます。

SEARCH 関数でワイルドカードを使用して実験しました。
最初の[A]は全角、次の[A]は半角大文字、eの次は全角スペース、都の次は半角スペース、茨城県の後は全角スペースにしてあります。
EXCELの関数使用例です。
千葉県の「千」の文字の位置が[16]文字目と表示されました。

SUBSTITUTE 関数

書式:「 SUBSTITUTE(文字列,検索文字列,置換文字列,置換対象(何番目の同名文字かを数値表示)) 」

指定した文字列を別な文字列に置換します。

数式パレットの注釈:SUBSTITUTE(文字列,検索文字列,置換文字列,置換対象)
文字列中の指定した文字を新しい文字で置き換えた結果を返します。
文字列には文字列、または置き換えたい文字列が入力したセルに対する参照を指定します。
置換対象には<文字列>に含まれるどの<検索文字列>を置き換えるのかを表す数値を指定します。

数式例:「 =SUBSTITUTE(A2,"-","",2) 」
置換例1(関数使用)

某機器メーカーが、マイナーモデルチエンジを識別するため、年式型番の第2番目の[-]をカットしたとします。

年式型番   新型名     製 品 名
05-XA-01         05年式○○○1月製品
05-XB-03         05年式△△△3月製品
05-XC-05         05年式◇◇◇5月製品
05-XD-07         05年式●●●7月製品
05-XE-09         05年式▲▲▲9月製品
05-XF-11         05年式◆◆◆11月発売予定

EXCELの関数使用例です。

数式パレットの2番目で[-]を指定し、3番目で[文字無し]を指定し(何らかの文字を入れればその文字に置換されます)、4番目で[左から数えて2番目の-]を置換対象にしています。

EXCELの関数使用例です。

後は、[B2]セルをオートフィル機能で、ドラッグして完成です。
「置換機能は Word のもあります(下記例ーExcel[編集]メニュー →[置換]も同じこと)が、この関数使用例のように第1[-]と第2[-]の区別はできないようで、全部一緒に消されてしまいます。「Word の機能には無い置換」と言うことができます。

置換例 2(Word の置換)

市町村合併で、仮に「利根町」が「龍ヶ崎市」に編入合併をしたときのことを考えます。
当然、「町立小中学校名」が「市立小中学校名」に変わります。市の電子例規集(町の電子例規集写し部分)の名称を例えば[Word] の 「置換」を使用して変えるところもあろうかと思います。「町立施設」は、余り無いので、他への影響は少ないことと考えられます。

EXCELの関数使用例です。

利根町保健所
利根町立文小学校
利根町立布川小学校
利根町立文間小学校
利根町立東文間小学校
利根町立太子堂小学校
利根町立利根中学校
利根町立新館中学校 
利根町教育委員会
        ↓
利根町保健所
龍ヶ崎市立文小学校
龍ヶ崎市立布川小学校
龍ヶ崎市立文間小学校
龍ヶ崎市立東文間小学校
龍ヶ崎市立太子堂小学校
龍ヶ崎市立利根中学校
龍ヶ崎市立新館中学校 
利根町教育委員会


REPLACE 関数

書式:「 REPLAE(文字列,開始位置,文字数,置換(に使われる)文字列) 」

文字列の中の指定された文字範囲を別の文字列に置換します。

注釈:文字列中の指定した位置の文字列を置き換えた結果を返します。半角と全角の区別なく、1文字を1として処理します。
文字列には置き換えたい文字列が含まれる文字列を指定します。

例 1

文中の第2のウインドウズをWindowsに直しなさい。
例文:ウインドウズは進化しています。現在はウインドウズXPが主流になりつつあります。

数式例:「 =REPLACE(A1,19,6,"Windows") 」

結果:ウインドウズは進化しています。現在はWindowsXPが主流になりつつあります。
これは、いちいち第2の[ウ]までの文字数を数えてから行った方法です。これが数十、数百字はなれていると大変です。 そんな時、[FIND]関数をネストして(何字目かを取得するため)使ってみました。結果がうまく行きましたので、紹介いたします。

[REPLACE] 関数に[FIND]関数をネストして、何字目かを取得し、文字列を置換する

数式:「 =REPLACE(A1,FIND("ウインドウズ",A1,10),6,"Windows") 」

例文:下の文章をExcelの[A1]セルにはりつけて、適当な、別のセルをアクテイブにして、数式バーに、書式を貼り付けてみてください。下記赤文字部分が「Windows」になります。

「ウインドウズで使うワイルドカードとは、[スタート]→[検索]→[フアイル名のすべて、または一部]欄に 例えば[検?]や[検*]を入力すると検の付く「検索○○○○」「検定○○○」のフアイルやフォルダを探し てくれます。名前の全部を忘れたときに使います。私は現在ウインドウズXPを 快適に使用しています。」

解説

続きがあります。「 =REPLACE(A1,FIND("ウインドウズ",A1,10),6,"Windows") 」で、うまくできたのですが、 [SUBSTITUTE] 関数を使って「 =SUBSTITUTE(A1,"ウインドウズ","Windows",2) 」を試したところ、全く同様な結果になりました。 「FIND 関数」をわざわざネストする必要がない分、こちらが本命だったのでした。ラストの[2]を[1]に替えると、 最初の「ウインドウズ」のみが「Windows」に変換されます。

もう一度整理して、「検索と置換」の4つの関数を表示します。

指定する「文字列」の「位置」を探すには

FIND関数   :「 =FIND(検索文字列,(検索対象を含む)文字列,開始位置(数値)) 」

SEARCH関数  :「 =SEARCH(検索文字列,(検索対象を含む)文字列,開始位置(数値) 」

指定する「文字列」を、他の文字列に「置換」するには

SUBSTITUTE関数:「 =SUBSTITUTE(文字列,検索文字列,置換文字列,置換対象(何番目の同名文字かを数値表示)) 」

REPLACE関数  :「 =REPLACE(文字列,開始位置,文字数,置換(に使われる)文字列) 」


文字種を変換する関数

>ASC 関数

書式:「 ASC(文字列) 」

注釈:<文字列>内の全角(2バイト)の英数カナ文字を、半角(1バイト)の英数カナ文字に変換します。
文字列には全角の英数カナ文字を含む文字列を指定します。

JIS 関数

書式:「 JIS(文字列) 」

注釈:<文字列>に含まれる半角(1バイト)の英数カナ文字を、全角(2バイト)の英数カナ文字に変換します。
文字列には半角の英数カナ文字を含む文字列を指定します。

どちらも、英字,数字,カナ,記号,スペースなどに有効です。但し、全角文字の漢字とひらがなはそのまま返されます。

UPPER 関数

書式:「 UPPER(文字列) 」

注釈:文字列を大文字に変換した結果を返します。
文字列には大文字に変換したい文字列を指定します。
使用例:「 =UPPER(A2) 」 セル A2 に入力されている英字を全て大文字に変換します。

LOWER 関数

書式:「 LOWER(文字列) 」

注釈:文字列の大文字を小文字に変換した結果を返します。
文字列には小文字に変換したい文字列を指定します。
使用例:「 =LOWER(A3) 」 セル A3 に入力されている英字を全て小文字に変換します

LEN 関数

書式:「 LEN(文字列) 」

注釈:文字列(調べたい)の長さ(文字数)を返します。半角と全角の区別なく、1文字を1として処理します。
文字列には長さを求めたい文字列を指定します。(なお、空白も文字の内に入ります。)

CONCATENATE 関数

書式:「 CONCATENATE(文字列1,文字列2,文字列n) 」

「コンカティネイト」と読みます。
注釈:引数に指定した文字列をすべてつなげた文字列を返します。
文字列1:文字列1,文字列2,・・・には、1つにまとめたい文字列を指定します。引数は1から30個まで指定できます。

1枚文書の文字列の「つなぎ」なら、その都度[&](アンバサンド)を用いて手作業でつなげますが、テンプレート化した書式の場合、あちこちの抜き出し、くっつけには関数を用います。

使用例

=CONCATENATE(A2,A4,"あいうえお")

TRIM 関数

書式:「 TRIM(文字列) 」

注釈:指定した文字列から不要なスペースを削除した結果を返します。
文字列には不要なスペースを削除したい文字列を指定します。

TRIMは写真用語のトリミングのことでしょうか。文書中の不必要なスペースをカットします。
字下げ用の先頭の空白はすべて削除されます。但し、文字間に連続して空白があった場合1個は残します。

YEN 関数

書式:「 YEN(数値,桁数) 」

注釈:<数値>を<桁数>まで四捨五入して、円マークを付けた文字列に変換します。
数値には数値、数値を含むセルの参照、または結果が数値となる数式を指定します。
桁数には、小数点以下の桁数を指定します。(指定が無ければ、[0]と見做します。)

円マーク[\]と四捨五入は、「書式設定」ツールバーの「通貨スタイル」と「小数点桁下げ」からでもできますが、例えば関数を多く用いた請求書書式などに用いると き、抜け落ちがなくて済みます。


トップへ戻る     いろいろな関数目次へ戻る
関数の勉強 2へ戻る     関数の勉強 4へ進む

inserted by FC2 system