MID関数の極意「長さが変わる文字列」の切り出し方
【本稿は、『エクセルの達人』に8月11日付で収録したコンテンツの転載記事です。】本稿では『文字列操作を極める』シリーズの第1回として、LEFT関数、MID関数を使った初歩的な文字列操作「切り出しテクニック」を紹介したいと思う。
t凹面、毎週土日の正午過ぎには、『エクセルの達人』(エク達)というウェブサイトに掲載したコンテンツをこちらに転載するつもりです。エクセル講座をお楽しみください。
エクセルを操作する際に、是非とも覚えておきたいのが、「文字列を操作する関数」である。その基本は、LEFT関数、RIGHT関数、MIDDLE関数の3つ、そしてFIND関数とLEN関数だ。。
何事も習うより慣れろ、と言われるが、本稿ではこのうちLEFT関数とMID関数、そしてLEN関数の3つを、さっそく使ってみたい。
財務省が作成する『普通貿易統計』と呼ばれる統計資料がある。
元データは政府の統計窓口『e-stat』からダウンロードできるが、ここでは2021年8月11日時点で取得したファイルの一部をダウンロードし、公表しておきたい。
【参考】普通貿易統計(2021年1月)
※著者の側にてウィルス検査をしてあるので、安心して開いていただいて良い。
ファイルを開くと、こんなフィールドが目に入る。
- cat01_code
- 概況品目(輸出)
- cat02_code
- 概況品目表の数量・金額
- area_code
- 国
- time_code
- 時間軸(年次)
- unit
- value
図表1 今回のエクセルファイルのフォーマット
本日紹介したいのは、このうちF列、すなわち「国」から数字を取り出す方法である(次回以降はB列からデータを取り出す方法についても紹介したいと思っている)。
まず、「国」については、次のように、必ず「数字3桁」、「_(アンダーバー)」、「国名称」というフォーマットで構成されている。
- 103_大韓民国
- 105_中華人民共和国
- 106_台湾
- 107_モンゴル
- 108_香港
このように、文字コードの長さが決まっている場合は、非常に簡単だ。LEFT関数とMID関数を使えば良い。
LEFT関数の具体的な書式は、次のとおり。
LEFT(文字列,文字数)
サンプルファイルの「国」データ(F列)については、必ず国コードが3ケタと決まっている。
ここではサンプルファイルのK2セルに、こんな数式を入力してみよう(図表2)。
=LEFT(F2,3)
図表2 LEFT関数の入力(※大文字でも小文字でも良い)
すると、F2セルに含まれる「103_大韓民国」という文字列から、前半の3文字目までの「103」を取り出すことができた(図表3)。
図表3 LEFT(F2,3)の入力結果
では、次にF2セルに含まれる「103_大韓民国」という文字列から、後半の「大韓民国」を取り出してみよう。
データを眺めていて気付くのは、すべてのデータは数字3桁と「_(アンダーバー)」が付いているため、国名はすべて5文字目から始まる、という点だが、ここで問題がある。
じつは、「決まった文字数を左から(あるいは右から)切り出す」のは、大変に簡単な作業だ。
しかし、国名の場合は単純ではない。「大韓民国」の場合は4文字だが、その次の「中華人民共和国」は7文字、「台湾」は2文字、と、文字数が一定しないからだ。
このような場合にどうすればよいか。
最も簡単なやり方が、MID関数である。
MID関数の具体的な書式は、次のとおり。
MID(文字列,開始位置,文字数)
開始位置とは「文字を切り出し始めるための場所」のことであり、先ほどのケースでいえば、「_(アンダーバー)」の直後、つまり5文字目となる。
一方、文字数については「最低限、これ以上切り出してほしい」という文字数を指定する。じつは、これについてはピッタリでなくても構わない。
たとえば、開始位置に「5」、文字数に「100」と入力してやれば、「この文字列の5文字目から100文字目までを抜き出してほしい」、という指示となる。ということは、極端な話、すべてのデータの最長文字数を入れてやれば、「国名を抜き出す」という目的は達成できる、というわけだ(図表4、図表5)。
図表4 MID関数の入力
図表5 MID(F2,5,100)の入力結果
これで、いちおうは形になった。
以上で本稿を終了としても良いのだが、ただ、せっかくだからもう少しスマートなやり方も紹介しておきたい。ここで使用するのはLEN関数だ。
LEN関数の具体的な書式は、次のとおり。
LEN(文字列)
これは、文字の長さを返す関数であり、先ほどの「F2」列を指定してやれば、文字の長さである「8」が返ってくる(図表6、図表7)。
図表6 LEN関数の入力
図表7 LEN (F2)の入力結果
そして、すべてのセルにおける国名の文字の長さは、次の計算式で求められるはずだ。
(国名の文字の長さ)=(セルのデータの文字の長さ)-4
ということは、先ほどのMID関数についても、MID(F2,5,100)ではなく、MID(F2,5,LEN(F2)-4)と入力してやれば、ずばりの文字数を抜き出すことができるはずだ。
MID(F2,5,LEN(F2)-4)→F2セルの5文字目から、「LEN(F2)-4」で求まる数値の長さの文字を切り出す、という意味。
さっそくやってみよう(図表8、図表9)。
図表8 MID+LEN関数の入力
図表9 MID(F2,5,LEN(F2)-4)の入力結果
いかがだろうか。
念のため、「大韓民国」以外の国名にも対応できるかどうか、関数をコピーしてみよう(図表10)。
図表10 MID(F2,5,LEN(F2)-4)を下にコピーした結果
ちゃんと出来上がった。
それぞれシンプルな関数なのだが、これらを組み合わせることで、かなり複雑な演算ができることがおわかりいただけるだろう。
※ ※ ※ ※ ※ ※ ※
本稿を『文字列操作を極める』シリーズの第1回と位置付けたい。第2回目以降では、さらに複雑な文字列操作にチャレンジしていくつもりだ。
本文は以上です。
日韓関係が特殊なのではなく、韓国が特殊なのだ―――。
— 新宿会計士 (@shinjukuacc) September 22, 2024
そんな日韓関係論を巡って、素晴らしい書籍が出てきた。鈴置高史氏著『韓国消滅』(https://t.co/PKOiMb9a7T)。
日韓関係問題に関心がある人だけでなく、日本人全てに読んでほしい良著。
読者コメント欄はこのあとに続きます。当ウェブサイトは読者コメントも読みごたえがありますので、ぜひ、ご一読ください。なお、現在、「ランキング」に参加しています。「知的好奇心を刺激される記事だ」と思った方はランキングバナーをクリックしてください。
ツイート @新宿会計士をフォロー
読者コメント一覧
※【重要】ご注意:他サイトの文章の転載は可能な限りお控えください。
やむを得ず他サイトの文章を引用する場合、引用率(引用する文字数の元サイトの文字数に対する比率)は10%以下にしてください。著作権侵害コメントにつきましては、発見次第、削除します。
※現在、ロシア語、中国語、韓国語などによる、ウィルスサイト・ポルノサイトなどへの誘導目的のスパムコメントが激増しており、その関係で、通常の読者コメントも誤って「スパム」に判定される事例が増えています。そのようなコメントは後刻、極力手作業で修正しています。コメントを入力後、反映されない場合でも、少し待ち頂けると幸いです。
※【重要】ご注意:人格攻撃等に関するコメントは禁止です。
当ウェブサイトのポリシーのページなどに再三示していますが、基本的に第三者の人格等を攻撃するようなコメントについては書き込まないでください。今後は警告なしに削除します。なお、コメントにつきましては、これらの注意点を踏まえたうえで、ご自由になさってください。また、コメントにあたって、メールアドレス、URLの入力は必要ありません(メールアドレスは開示されません)。ブログ、ツイッターアカウントなどをお持ちの方は、該当するURLを記載するなど、宣伝にもご活用ください。なお、原則として頂いたコメントには個別に返信いたしませんが、必ず目を通しておりますし、本文で取り上げることもございます。是非、お気軽なコメントを賜りますと幸いです。
コメントを残す
【おしらせ】人生で10冊目の出版をしました
自称元徴用工問題、自称元慰安婦問題、火器管制レーダー照射、天皇陛下侮辱、旭日旗侮辱…。韓国によるわが国に対する不法行為は留まるところを知りませんが、こうしたなか、「韓国の不法行為に基づく責任を、法的・経済的・政治的に追及する手段」を真面目に考察してみました。類書のない議論をお楽しみください。 |
【おしらせ】人生で9冊目の出版をしました
日本経済の姿について、客観的な数字で読んでみました。結論からいえば、日本は財政危機の状況にはありません。むしろ日本が必要としているのは大幅な減税と財政出動、そして国債の大幅な増発です。日本経済復活を考えるうえでの議論のたたき台として、ぜひとも本書をご活用賜りますと幸いです。 |
経営財務のモダンEXCELの難しさにやられ気味なので、理解可能なあたりでよかったです。
つぎはvlookupを使わない検索あたりでお願いいたします。
こういうの組んでるときは出力結果をsort、uniqで処理してエラーが出ていないか軽くチェックするのがいいです。
文字列操作に先立ってtrim(余分なスペースを削除)に食わせておく必要があることが多いかもですね。
left,right,mid,lenはわかりやすいんですが、長さが不揃いな場合に処理が面倒になることが多いですね。スクリプト系、Unix系になれてる人は正規表現で処理したくなるところです。
%や?がもっと柔軟に使える感じです。VBAまで行くと正規表現が使えるんですけど、今回扱う範囲からはみ出しそうですね。
FINDで”_”の位置抜き出してMIDの中に放り込むと汎用性がでてきますよね。
関数大好きなので、楽しく拝見致しました。
エクセルに限らず文字列処理のスキルは文系にも、いや文系にこそ必要ですね。
とはいえ…
cat01_code:0
概況品目(輸出):0_食料品及び動物
area_code:50106
国:106_台湾
…何でこんなデータ構造なんでしょう、財務省は。
何でひと手間かけないと名称が取り出せないのでしょう。
なんて再利用しづらいのでしょう。
まあだからこそ今回のお題に選ばれたのでしょうがw
(ひょっとして予約語には必ずコード番号を付ける、みたいな運用なのかなー)