AccessのLeft関数をお探しですね。
広告
Accessで文字列の一部を取り出す方法を徹底解説!
Accessでデータベースを作っていると、「商品コードの最初の3文字だけ取り出したい」「名前を姓と名に分けたい」「メールアドレスの@以降だけ欲しい」なんてこと、よくありますよね。
この記事では、Accessで文字列の一部を取り出すための基本となる「Left関数」「Mid関数」「Right関数」の使い方を、初心者の方にもわかりやすく解説します。
さらに、文字数がバラバラなデータにも対応できる応用テクニックや、エラーが出たときの対処法まで詳しく紹介しているので、この記事を読めば実務で使える文字列操作のスキルがしっかり身につきますよ。
Accessで文字列を抽出する3つの基本関数(Left・Mid・Right)
Accessで文字列の一部を取り出すとき、基本になるのが「Left」「Mid」「Right」の3つの関数です。
これらは、文字列の「どこから」「何文字」取り出すかによって使い分けます。
どの関数も書き方がシンプルでわかりやすいので、まずはこの3つの違いをしっかり理解することが、思い通りのデータ加工をするための第一歩になります。
**Left関数**は、文字列の左端(先頭)から指定した文字数だけを取り出す関数です。
たとえば、商品コード「ABC-1234」の最初の3文字だけを取り出して「ABC」というカテゴリ名を取得したいときに使います。
書き方は「Left(文字列, 文字数)」で、とても直感的です。
ちなみに、取り出す文字数を実際の文字列より大きく指定しても、エラーにはならず文字列全体がそのまま返ってくるので安心してください。
次に**Right関数**は、文字列の右端(末尾)から指定した文字数だけを取り出す関数です。
同じ「ABC-1234」から末尾の4文字を取り出して「1234」を取得したいときに便利ですね。
書き方は「Right(文字列, 文字数)」です。
連番や末尾についている識別コードを取り出すときによく使われます。
Left関数とセットで覚えておくと、かなり便利です。
そして**Mid関数**は、文字列の途中にある好きな位置から、指定した文字数だけを取り出す関数です。
書き方は「Mid(文字列, 開始位置, 文字数)」となります。
「ABC-1234」の5文字目から4文字を取り出したいときは、開始位置を5、文字数を4と指定すればOKです。
Mid関数の便利なところは、最後の「文字数」を省略できる点です。
省略すると、開始位置から文字列の最後まで全部取り出してくれます。
Mid関数は開始位置を自由に決められるので、LeftやRightよりも柔軟に使えて、実務では一番出番が多い関数だと言えます。
**まとめると:**
– Left関数:文字列の「左端」から指定文字数を取り出す
– Right関数:文字列の「右端」から指定文字数を取り出す
– Mid関数:文字列の「好きな位置」から指定文字数を取り出す
クエリとVBAでの具体的な書き方と使い分け
Accessで文字列抽出関数を使う場面は、主に「クエリ」と「VBA」の2つに分かれます。
どちらで使う場合でも、関数の基本的な書き方や働きは同じなのですが、記述のルールや参照方法に少し違いがあるので注意が必要です。
それぞれの環境に合った正しい書き方をマスターすれば、データ処理の効率がグッと上がりますよ。
**クエリで使う場合**、一番よく使うのは「演算フィールド」を作る方法です。
クエリのデザインビューを開いて、フィールド欄に「新しい項目名: Left([既存フィールド名], 3)」のように入力します。
このとき、元になる既存のフィールド名は必ず角括弧([ ])で囲むのを忘れないでください。
これを忘れると、Accessがフィールド名じゃなくてただの文字列として認識してしまい、思った結果が得られません。
また、抽出条件の欄に「Left([フィールド名], 1) = “A”」のように書けば、先頭が「A」で始まるレコードだけを絞り込むこともできて、とても便利です。
一方、**VBA(Visual Basic for Applications)**のコード内で使う場合は、変数やフォーム上のコントロールの値を対象に処理を行います。
たとえば、テキストボックスに入力された値から一部を切り出して、別のテキストボックスに自動で入れる、といった処理ができます。
VBAでは「Left(Me.テキストボックス名.Value, 3)」のように書いて値を操作します。
VBA特有の注意点として、文字列が空(Null)になる可能性がある場合はエラーを起こしやすいという点があります。
さらにVBAには、文字列専用の「Left$」「Mid$」「Right$」という関数も用意されています。
末尾に「$」が付かない普通の関数はバリアント型(Variant)として結果を返しますが、「$」が付く関数は文字列型(String)として結果を返します。
バリアント型はどんなデータにも対応できる反面、メモリの消費量がわずかに多く、処理速度も少し遅くなる傾向があります。
なので、大規模なシステム開発や、大量のループ処理を行うVBAコードの中では「$」付きの関数を使うのがおすすめです。
実践編:InStr関数と組み合わせた可変長文字列の抽出
Left、Mid、Right関数は、取り出したい文字数がはっきり決まっている「固定長」のデータには簡単に使えます。
でも、実際の業務データでは、名前や住所、メールアドレスのように、文字数がレコードごとに違う「可変長」のデータを扱うことがほとんどですよね。
こういう場合、取り出す文字数を固定してしまうと正しい結果が得られないので、別の関数と組み合わせて「特定の文字の位置」を動的に探る必要があります。
ここで活躍するのが、文字列の中に特定の文字が何文字目にあるかを検索する「**InStr関数**」です。
たとえば、「山田 太郎」や「佐々木 小次郎」のように、姓と名の間に全角スペースが入っている名前データから「姓」だけを取り出したいとします。
このとき、スペースの位置はデータによって違うので、Left関数で取り出す文字数を一律に「2文字」と決めることはできませんよね。
そこで、InStr関数を使ってスペースの位置を取得して、その位置から1を引いた文字数をLeft関数の引数として渡す、というテクニックを使います。
具体的なクエリの演算フィールドの書き方としては、「姓: Left([氏名], InStr([氏名], “ ”) – 1)」となります。
この式では、まずInStr関数が氏名フィールド内の全角スペースの位置を数字(「山田 太郎」なら3、「佐々木 小次郎」なら4)で返して、そこから1文字分を引くことで、スペースの直前までの文字数を正確に計算しています。
この応用として、Mid関数と組み合わせれば、スペースの1文字後から最後までを取り出して「名」だけを取り出すこともできます。
また、文字の後ろ側から特定の文字までを取り出したいときには、「**Len関数**」を組み合わせる方法が効果的です。
Len関数は文字列全体の文字数を取得する関数です。
たとえば、ファイルのフルパスからファイル名だけを取り出したい場合、文字列全体の長さ(Len)から、区切り文字である「\」の位置(InStr)を引き算することで、Right関数に渡すべき正しい文字数を計算できます。
このように、検索関数(InStr)や計測関数(Len)と抽出関数を組み合わせることが、Accessでデータ加工をするときの基本であり、最大のポイントになります。
文字列抽出でよくあるエラーとトラブルの解決法
文字列抽出の関数を使っていると、思わぬエラーが出たり、期待通りの結果にならなかったりすることがあります。
特に実務のデータベースでは、データが完璧にきれいな状態であることは少なくて、イレギュラーなデータに対する事前の対策が欠かせません。
ここでは、文字列抽出関数を使うときによく起こる問題とその解決法について解説しますね。
**よくあるトラブル:**
– Null値(空データ)によるエラー
– 全角文字と半角文字の数え方の違い
– 引数にマイナスの値や無効な数値を指定してしまう
一番よく起こるのが、対象のフィールドに「**Null値(データが全く入っていない状態)**」が含まれている場合のエラーです。
Left関数やMid関数の対象としてNullが渡されると、クエリの実行時やVBAの処理中に「無効なプロシージャ呼び出し、または引数です」といったエラーが出て処理が止まってしまうことがあります。
これを防ぐには、**Nz関数**を使ってNull値を意図的に空文字(””)に変換する処理を挟むのが有効です。
「Left(Nz([フィールド名], “”), 3)」と書くことで、データが空の場合でもエラーを出さずに安全に処理を続けられます。
また、**全角と半角の扱い**についても理解が必要です。
Accessの標準関数であるLeft、Mid、Right関数は、文字のバイト数(データ量)ではなく「文字数」でカウントします。
つまり、半角の「A」も全角の「あ」も同じ「1文字」として扱われるんです。
もし、他のシステムとの連携などでバイト数ベースでの抽出が必要な場合は、LeftB、MidB、RightBといったバイト処理専用の関数を使って、さらにStrConv関数を使って内部データを適切な文字コードに変換するなど、少し複雑な処理が必要になります。
普通に使う分には文字数ベースで問題ありませんが、システムの仕様書などで「バイト数」と指定されている場合には注意してください。
最後に、**関数に渡す引数の数値**にも気を配る必要があります。
Left関数やRight関数の「文字数」にマイナスの数値を指定すると、すぐにエラーになります。
先ほど説明したInStr関数との組み合わせを使うとき、検索対象の文字(スペースやハイフンなど)がデータの中に存在しないと、InStr関数は「0」を返します。
その結果、計算式によっては引き算で文字数がマイナスになってしまい、エラーを引き起こす原因になります。
これを防ぐには、**IIf関数**などを使って「特定の文字が含まれている場合のみ抽出処理を行う」といった条件分岐を組み込むと、より安定してエラーに強いデータベースを作れますよ。
まとめ
いかがでしたか?Accessの文字列抽出関数は、基本をしっかり押さえて、他の関数と組み合わせることで、かなり幅広いデータ加工に対応できます。
最初は難しく感じるかもしれませんが、実際に手を動かして試してみると、だんだんコツがつかめてきますよ。
ぜひこの記事を参考に、実務で活用してみてくださいね!
広告
