エクセルで文字列を抽出する色々な方法【初心者のためのExcel入門】 | サービス | プロエンジニア

    エクセルで文字列を抽出する色々な方法【初心者のためのExcel入門】

    • このページをはてなブックマークに追加

    公開日:2017年03月06日 最終更新日:2019年06月13日

    前回の記事<<Excel2013でファイル(ブック)の共有方法と共有解除する方法>>では、1つのExcelファイルを複数人で同時に更新する方法についてご紹介しました。

    今回は、Excelで特定の文字列を抽出する関数について、ご紹介したいと思います。

    ■説明に使用したExcelのバージョン:Excel2013

    目次

    1.文字列を先頭(左)から抽出する

    1.1 左から指定した文字数ぶん抽出する

    指定したセルに入力されている文字列の先頭(左)から指定した文字数ぶんだけ切り出して残したいという場合、「LEFT関数」または「LEFTB関数」を使用します。


    LEFT(対象のセル, 文字数)
    LEFTB(対象のセル, 文字数)


    LEFT関数とLEFTB関数の違いは、文字数を「文字の数」でカウントするか「バイト数」でカウントするかの違いです。

    ■文字のバイト数とは

    プログラミングを行う人にはおなじみですが「1文字に必要な枠の大きさ」のようなものです。英字や数字などの半角文字は1バイト、漢字やひらがななどの全角文字は2バイトの枠が使用されます。

    文字の数で判定するLEFT関数では、「あいうえお」の左から5文字は「あいうえお」です。しかしバイト数で判定するLEFTB関数では、「あいうえお」の左から5バイトを切り出すと「あい」になります。なお本来5バイト目は「う」の前半になりますが、不完全な文字は切り捨ての対象になります。そのため「あいう」を対象にしたい場合は、「あいうえお」の左から6バイトを指定する必要があります。

    column_image7286_01

    対象が英数字など半角文字のみの場合、LEFTとLEFTBの結果は同じになります。

    column_image7286_02

    全角文字と半角文字が混ざっていた場合も同じく、LEFTは純粋に文字数を、LEFTBは半角文字を1バイト、全角文字を2バイトとして指定したバイト数だけカウントして切り出すように動きます。

    column_image7286_03

    ▲目次へ戻る

    1.2 指定した文字より左側を抽出する

    セルによって切り出したい文字の文字数が異なる場合、固定値を指定することができないためこのままでは使えません。ですが切り出したい場所の目印となる文字や記号がある場合、その目印の位置を探してその値を指定することで、切り出しを行うことができます。

    例えば、次のようなスペースで区切って「名字 名前」と入力されたセルから「名字」のみを切り出すことを考えるとします。この場合はスペースが目印になるので、その位置を探します。特定の文字や記号などの文字列の位置を探す場合、「FIND関数」を使用します。

    なお目印が複数ある場合、FIND関数は左から検索して一番にヒットした場所を返し、二番目以降は無視されます。


    FIND("目印の文字列", 対象のセル)


    これをLEFT関数やLEFTB関数と組み合わせることによって、スペースの前までを切り出します。FIND関数でスペースの位置を調べたので、そのマイナス1までが必要な部分となります。


    LEFT(対象のセル, FIND("目印の文字列") -1)


    column_image7286_04

    ▲目次へ戻る

    2.文字列の末尾(右)から抽出する

    2.1 右から指定した文字数ぶん抽出する

    指定したセルに入力されている文字列の末尾(右)から指定した文字数ぶんだけ切り出して残したいという場合、「RIGHT関数」または「RIGHTB関数」を使用します。

    RIGHT関数とRIGHTB関数の使い方の違いはLEFT関数とLEFTB関数の関係と同様であり、使い方も関数名以外は同じです。


    RIGHT(対象のセル, 文字数)
    RIGHTB(対象のセル, 文字数)


    LEFTの例と同じセルに対してRIGHTに置き換えてみると、LEFTと同じパターンで右から抽出対象になります。

    column_image7286_05

    ▲目次へ戻る

    2.2 指定した文字以降を抽出する

    右から指定した文字までを抽出したい場合も、左からと同様にFIND関数を使用します。

    先ほどの例をベースに、今度は「名字 名前」というセルから「名前」のみを切り出してみます。ただし今回は、LEFTの場合と違って文字の位置を抽出するFINDをそのまま使用することはできません。そのため、全体の文字数から見つけた文字位置を引くことで、見つけた文字位置以降に何文字あるのかを調査して指定する必要があります。

    文字数の調査には、「LEN関数」を使用します。


    RIGHT(対象のセル, LEN(対象のセル) - FIND("目印の文字列"))


    column_image7286_06

    このように全体の文字数と目印の位置の差分を調べることで、右から必要な文字数を求めて切り出すことができました。

    ▲目次へ戻る

    3.文字列の中間を抽出する

    3.1 固定の場所から指定した文字数ぶん抽出する

    文字列を先頭からでも末尾からでもない中間を切り出したい場合は、「MID関数」を使用します。


    MID(対象のセル, スタートの文字位置, 文字数)
    MIDB(対象のセル, スタートの文字位置, 文字数)


    MID関数は、スタートの位置が固定でなくなった以外はLEFT関数と全く一緒です。「スタートの文字位置=1」のMID関数は、イコールLEFT関数になります。

    なお文字位置は、文字が並んでいる順番です。つまり1文字目は1番、2文字目は2番に該当し、例えば2文字目から5文字ぶん切り出したいという場合は、次のように指定します。


    MID(対象のセル, 2, 5)


    そのほかMIDとMIDBの関係や、全角文字の途中までを指定した場合の動きは、LEFTやRIGHTと同じです。

    column_image7286_07

    図のように切り出す文字数が足りない(全体で5文字しかないのに、2文字目から5文字ぶんを対象としたなどの)場合、存在する分だけ切り出されます。

    ▲目次へ戻る

    3.2 ある文字Aからある文字Bまでの間を抽出する

    指定した目印Aから指定した目印Bまでの間の文字列を抽出したい場合、必要なのは開始位置として「目印Aの位置」と、「目印Aと目印Bの間の文字数」です。

    まず「目印Aの位置」を、FIND関数を用いて調べます。


    Aの位置 = FIND("目印A", 対象のセル)


    次に「目印Aと目印Bの間の文字数」は、「目印Bの位置 - 目印Aの位置 -1」で求められます。


    AB間の文字数 = FIND("目印B", 対象のセル) - FIND("目印A", 対象のセル) -1


    これらを組み合わせてMID関数に当てはめると、次のように表すことができます。


    MID(対象のセル
      , FIND("目印A", 対象のセル)+1
      , FIND("目印B",対象のセル) - FIND("目印A",対象のセル) -1)


    column_image7286_08

    このように開始位置と終了位置の差分を調べることで、その間を切り出すことができました。

    ▲目次へ戻る

    4.指定した文字列以外を抽出する

    4.1 指定した文字列を削除する

    指定した文字列以外を抽出することは、指定した文字列を削除することと同義です。指定した文字列の削除には、文字を置換することができる「SUBSTITUTE関数」を応用することができます。

    SUBSTITUTE関数は本来、次のように置換前の文字列と置換後の文字列を指定して、文字列の置き換えを行う関数です。


    SUBSTITUTE(対象のセル, "置換前の文字列", "置換後の文字列")


    この置換後の文字列を空白文字「""」にすることにより、文字の削除と同等の処理を行うことができます。


    SUBSTITUTE(対象のセル, "削除したい文字列", "")


    column_image7286_09

    図のように置き換えだけでなく、削除にも使うことができました。

    ▲目次へ戻る

    5.まとめ

    Excelで実現できるいろいろな文字列抽出の方法について、いかがでしたでしょうか。

    次回はExcelで正規表現を使用できるようになるアドインの導入方法について、詳しくご紹介したいと思います。
    よければ合わせてご覧下さい。

    <<Excelで正規表現やgrep検索を可能にするアドインの導入方法>>

    • このページをはてなブックマークに追加

    おすすめ記事

  • 簡単!30秒登録無料キャリア相談 ちょっと聞いてみる

    無料プログラミング研修

    CTO養成講座&転職支援サービス OCTOPASS 詳細はこちら

    ピックアップ

    フリーランス

    【Swift】アプリ開発エンジニア★コミュニティサービス新規開発(iOS)

    月額単価 :60万円〜90万円

    ・iOS ネイティブアプリケーションの設計、開発 ・プロダクトのUI/UX改善 ・iOSバージョンアップへの...

    フリーランス

    【Python】サーバーサイドエンジニア★EnergyTech向け自社クラウドプラットフォーム開発

    月額単価 :60万円〜100万円

    電力系をメインに自社サービスを展開している企業で 要件定義~テストまでの工程をご担当していただき...

    フリーランス

    【Java】システムエンジニア★国内最大の宅配注文サイト開発

    月額単価 :70万円〜80万円

    自社で運営する国内最大の宅配注文サイトの 設計、開発を担当して頂きます。 担当業務はスキルによ...

    正社員

    【プロジェクトマネージャー】1億4千万ユーザーのアプリ開発/O2Oソリューション

    スマートフォンアプリ向けの自社プロダクトFANSHIPを用いた大規模案件の プロジェクトマネジメント業務...

    株式会社アイリッジ

    正社員

    【JavaScript】アプリケーションエンジニア|訪日旅行者向けプラットフォームサービスの開発

    ・訪日旅行者向けプラットフォームサービス「WAmazing」の 設計・開発・運用を行っていただきます。 ...

    WAmazing株式会社