- 文字列加工の代表5関数の役割が一目で分かる
- クエリの式にそのまま貼れるサンプル
- 「どの関数を選ぶか」の判断基準
- 作業別(置換/分割/抽出/整形)の即効レシピ
- よくある失敗(全角/半角・トリムの勘違い)と対処
Access関数の使い方をシリーズで投稿しています。
前回は入門者がおさえておきたいAccess関数の使い方を解説しました。
Access関数の基礎が身についてきた方は、さらにワンランク上の関数を学習していきましょう。
第6回目の今回は文字列操作関数を4種類紹介します。
もくじ
Accessのデータ型には、数値・文字列・日付など様々なものがありますよね。
テーブルに蓄積された文字列を操作するスキルは、Accessを思い通りに扱うためには必要です。
本記事では、文字列操作関数の中でも特によく使う4種類に絞って解説していきます。
実務でよく使う文字列関数5選
本記事では、実務で頻繁に使用される文字列処理関数を以下の5種類を選定しました。
- &(アンパサンド)
- Left,Right,Mid
- Instr
- Replace
- Trim
これらの関数の使い方を正しく理解できれば、Accessクエリを駆使して思い通りに文字列を加工できます。
なお、1つ目にアンパサンド(&)を取り上げているのは、厳密には関数ではなく演算子ですが、文字列処理において関数と同じように頻繁に使用され、他の関数と組み合わせて使うことが多いためです。
実務では関数か演算子かよりも「使えるかどうか」が重要なので、あえてここに含めました。
それでは、それぞれの使い方を具体例とともに見ていきましょう。
その1-複数の文字列を結合:アンパサンド
まずは文字列関数を習得する前に、一番の基本となる複数の文字列を結合させる方法について触れておきます。
テーブル「T_名簿」に登録されている「姓」と「名」をつなげてみましょう。
クエリのデザインビューを作成し、姓と名をつなげた『名前』フィールドを作ります。
- 名前: [姓]&[名]
『&(アンパサンド)』で「姓」と「名」をつないでいます。
フィールドは必ず『[](角かっこ)』でくくるようにしましょう。
データシートビューを確認すると、「姓」と「名」がつながっているのを確認できました。
今度はフィールド「名」を特定の文字列「次郎」に変えてみます。
- 名前: [姓]&"次郎"
定数は『””(ダブルクオーテーション)』でくくります。
フィールドの角かっこは使用できない、ということを頭に入れておきましょう。
データシートビューで確認すると、「名」が「次郎」に変わりました。
いったんデザイングリッドの「"次郎"」を「[名]」に戻します。
「姓」と「名」が詰まっていて窮屈なので、間にスペースを入れてみます。
- 氏名: [姓]&” “&[名]
データシートビューで確認すると、スペースが入って見やすくなりました。
このように『&(アンパサンド)』では、フィールド同士の結合だけでなく、フィールドと文字列(定数)を組み合わせて結合することもできます。
その2-位置を指定して文字を抜き出す:Left、Right、Mid
文字列の一部を抜き出すときは Left/Right/Mid の3つを覚えておけば十分です。
基本は次のとおり。
- Left(文字列, 文字数) → 先頭から取り出す
- Right(文字列, 文字数) → 末尾から取り出す
- Mid(文字列, 開始位置, 文字数) → 指定位置から取り出す(開始位置は1=先頭)
例として、テーブル「 T_時期M」 のフィールド [時期名] に「3月上旬/3月中旬/3月下旬」といった値が入っているとします。
「月」を抜き出したい場合は、Left関数を使って先頭2文字を指定します。
クエリを実行した結果、月名だけを抜き出せました。
同様に「上旬・中旬・下旬」を取りたいなら、Right関数で末尾2文字を抜き出します。
中央の任意位置から抜きたいならMid関数を使います。
Mid関数がLeftやRightと異なるのは、文字数だけでなく、2か所の位置指定(開始位置と終了位置)が必要となることです。
このように、Left・Right・Midの3つの関数を使い分けることで、文字列のどの部分からでも必要な文字を自由に抜き出すことができ、データの整理や加工作業を効率的に進めることが可能になります。
その3-指定した文字の位置番号を返す:InStr
InStr関数は指定した文字が先頭から何文字目にあるかを検索してくれる関数です。
- 第一引数・・・開始位置(省略可)
- 第二引数・・・元になる文字列
- 第三引数・・・検索する文字列
- 第四引数・・・検索モード
第四引数まで設定できるようになっていますが、実務の大部分は第一引数と第二引数だけで成り立ちます。
InStr関数は他の文字列関数(Left・Right・Mid)と組み合わせることで強力な威力を発揮しますが、ここでは単体の動きのみを再現しましょう。
テーブル「T_時期M」を使いますが、前準備として12月の時期データを追加しておきます。
InStr関数を使って、フィールド「時期名」に「月」が何文字目かに含まれているかを調べます。
- InStr関数: InStr([時期名],"月")
結果を確認すると、「3月○旬」のデータは「2」、「12月〇旬」のデータは「3」と出力されました。
InStr関数は、文字列の中から特定の文字や文字列を見つけ出したい場面で威力を発揮します。
例えば、以下のように高度な文字列抽出が必要になったことはありませんか?
- 「県」や「都」の位置を特定し、住所データから都道府県名だけを抽出したい
- メールアドレスから@マークより前のユーザー名部分を取得
- 商品コードの中から特定の区切り文字を探して分類番号を抽出
つまり、InStr関数は文字列の「どこに何があるか」を教えてくれる優秀な案内役として機能し、他の関数と組み合わせることで複雑な文字列処理を可能にする重要な基盤となります。
その4-特定の文字列を探して置換:Replace
Replaceは一部の文字を置換する時に使う関数です。
- 商品コードの『-(ハイフン)』のみを排除したい
- 『㈱』を『株式会社』に置換したい
このようにデータを加工したいことが、実務ではよくありますよね。
そんなときにはReplace関数を使いましょう。
- 第一引数・・・元になる文字列
- 第二引数・・・置換前の文字
- 第三引数・・・置換後の文字
テーブル「T_工具」にはいろいろな名前のドライバーが入力されています。
Replace関数を使って「プラス」を「マイナス」に置換してみましょう。
- Replace([工具名],"プラス","マイナス")
データシートビューで確認してみると、指定したとおりに置換されていることを確認できました。
Replace関数は、表記ゆれなどのデータ不統一を修正する際に威力を発揮し、元のデータを変更せずに置換後の結果だけを取得したい場合には欠かせない関数です。
その5-文字列内の空白を削除する:Trim
Trim関数は、文字列の先頭と末尾にある空白文字を削除する機能を持つ関数です。
日常の入力では、氏名の間にスペースが入ることはよくありますが、文字列の先頭や末尾に空白が入る場面は正直少ないですよね?
しかし、以下のような場面では先頭・末尾の空白が悪影響を与えることもあります。
- 基幹システムからデータを取り込んだ場合
- 他のデータベースシステムとの連携時
- CSVファイルやExcelファイルからのインポート時
Accessを職場で設計・運用している方は、社内のデータ品質に責任を持つことも多いのではないでしょうか。
時には直接自分が関わっていないシステムで起きた不具合についても、解決を求められることがあります。
そのような問題解決の場面でも活用できるよう、Trim関数の基本的な使い方を知っておくことが重要なので、ここからはその使い方に触れていきましょう。
テーブル「T_工具_空白」に4件のデータには、いずれも文字の前後にスペースが含まれています。
Trim関数を以下のように使ってみます。
クエリを実行した結果、スペースが削除されました。
今回は、Trim関数を使って文頭と文末の両方に含まれているスペースを削除しましたが、どちらか片方だけを削除したいときもあるのではないでしょうか?
そんな時は、LTrim(文頭のみ削除)、RTrim(文末のみ削除)も使用可能ですので、状況によりうまく使い分けましょう。
Access中級者以上向け!複数関数の組み合わせサンプル
では、実際の業務でどのように文字列操作関数を組み合わせたらよいか、以下の4つのパターンをピックアップしました。
- メールドメインを抜き出す
- フルネームから姓を抜き出す
- 郵便番号を「○○○-○○○○」に整形
- URLから 「https://」または「http://」を除去
いずれもよく使うもので、いろんなパターンにも流用できますので、ぜひマスターしてください。
今まで直接手修正していたものも、関数を使いこなすことで時短可能につながるでしょう。
メールドメインを抜き出す
テーブル「T_顧客Mail」にはMailフィールドが含まれています。
全顧客内のドメイン内訳を集計するため、ドメインのみを抜き出したいです。
そんな時は、「@」以降を抽出する文字列操作関数を組み立てましょう。
右側の文字列を抜き出すRight、文字数を数えるLen、位置番号を計算するInstrを組み合わせることで実現できます。
- ドメイン: Right([mail],Len([Mail])-InStr([Mail],"@"))
下はクエリ式を実行した結果で、正しくドメイン名が抜き出されています。
フルネームから姓を抜き出す
Accessの文字列操作関数で、フルネームから姓(苗字)や名を抜き出すことも可能です。
そのための前提条件として、姓と名の間にスペースをはさむ必要はあります。
下は姓を抜き出したクエリ式で、Left関数とInstr関数を組み合わせています。
重要なポイントとして、Instr関数でスペースを設定し、Left関数でスペースの一文字前までを読み込むということです。
- 姓: Left([氏名],InStr([氏名]," ")-1)
クエリの実行結果、姓の文字数関係なく抜き出すことができました。
一方の名を抜き出す時はRight関数を使い、「+1」で文字位置を調整してあげましょう。
- 名: Right([氏名],InStr([氏名]," ")+1)
郵便番号を「○○○-○○○○」に整形
3つめは、7ケタの郵便番号を前半と後半に分割し、「-」を間に入れる方法です。
以下のように、Left・Right・アンパサンドを組み合わせます。
- 郵便分割後: Left([郵便番号],3) & "-" & Right([郵便番号],4)
以下はクエリを実行した結果です。
URLスキーマを除去
URLスキーマとは、「https://」や「http://」などURLの先頭に表記されている文字です。
Accessクエリの文字列操作関数を活用することで、URLスキーマを除去することが可能です。
しかし、本キャプチャーのように複数の文字列を検索して除去するためには、複数のReplace関数をはさむ必要があると思います。
- スキーマ無: Replace(Replace([URL],"https://",""),"http://","")
クエリの実行結果、無事にURLスキーマを除去することができました。
まとめ
今回は、Accessの文字列操作関数で代表的なものを紹介しました。
Accessの文字列操作関数は、そのままVBAコードでも実行できて、他のプログラミング言語にも横展開できる『とても汎用性の高い関数』です。
慣れるまでは難しく感じますが、将来他のプログラミング言語を学習するときに、きっと楽に習得できるので、取りこぼさず学習していきましょう。
また、Accessには今回紹介した4種類以外にも、いろいろな文字列操作関数がありますので、興味のある方は自分に合ったものを試してみてもよいでしょう。
できるシリーズのAccess本で有名な『きたみあきこ』さんのサイトではかなり詳しく解説されていますので、参考までにリンクを貼っておきます。
文字列操作関数 ~Access関数~ - Officeのチカラ
次回の3回目は、Accessの日付関数を詳しく解説します。