Accessの文字列の切り出しについてお探しですね。

広告

Accessで文字列を自由に操る!Left・Mid・Len・InStrの使い方完全ガイド

Accessで顧客コードや商品番号、住所、メールアドレスなどを扱っていると、「最初の2文字だけ取り出したい」「ハイフンの前と後ろを分けたい」「特定の文字が入っているデータを探したい」といった場面に何度も出くわします。

こうした作業を手作業でやろうとすると時間がかかるうえにミスも起きやすいですが、文字列操作関数を使えばクエリやフォームの式で一発処理できます。

この記事では、Accessの文字列操作関数の中でも特によく使うLeft・Mid・Len・InStrの4つを中心に、文字列の切り出しと検索の基本から、実務でつまずきやすいポイントまでわかりやすく解説します。

Left・Mid・Len・InStr、それぞれ何ができるの?

Accessの文字列操作関数とは、テキスト型のデータを加工したり、必要な部分だけを抜き出したり、文字の位置を調べたりするための便利な道具です。

たとえば「AB-12345」という商品コードから「AB」だけを取り出したり、氏名欄から姓だけを抜き出したり、住所に「東京都」が含まれているかチェックしたり。

こういった処理が簡単にできます。

クエリの計算フィールド、フォームやレポートのコントロールソース、VBAコードなど、いろんな場面で使えるのも便利なところです。

今回紹介する4つの関数は、それぞれ役割がはっきり分かれています。

– **Left**:文字列の左端から指定した文字数を取り出す
– **Mid**:指定した位置から文字列を取り出す
– **Len**:文字列の長さ(文字数)を数える
– **InStr**:文字列の中で指定した文字が何文字目にあるか調べる

固定の桁数を切り出すだけならLeftやMidで十分ですが、ハイフンやスペースの位置がデータごとに違う場合は、InStrやLenと組み合わせることで柔軟に対応できます。

基本の書き方はこんな感じです。

“`
Left(文字列, 文字数)
Mid(文字列, 開始位置, 文字数)
Len(文字列)
InStr(開始位置, 対象文字列, 検索文字列)
“`

ここで大事なポイントが一つ。

**Accessでは文字の位置を「1文字目」から数えます**。

プログラミング言語によっては0番目から数えるものもありますが、AccessのMidやInStrでは先頭が1です。

また、InStrは検索文字列が見つからないときに0を返します。

この0をそのままLeftやMidの計算に使ってしまうと、エラーや予想外の結果になることがあるので注意が必要です。

実務では「見つかった場合だけ処理する」という考え方が大切になります。

Left・Mid・Lenで決まった位置の文字を切り出す

Left関数で先頭から取り出す

Left関数は、文字列の最初から決まった文字数を取り出したいときに使います。

たとえば商品コードが「CD234」のように、先頭2文字が分類コードになっている場合。

クエリの計算フィールドに`分類: Left([商品コード],2)`と書けば「CD」が取り出せます。

コードの体系が決まっていて、いつも同じ桁数で切り分けられるデータにピッタリです。

顧客番号の先頭が地域コード、社員番号の先頭が部署コードになっているようなケースでもよく使われます。

Mid関数で途中から取り出す

Mid関数は、文字列の途中から必要な部分を取り出すときに使います。

たとえば「CD234」の2文字目から2文字を取得したいなら、`Mid([商品コード],2,2)`と書きます。

結果は「D2」です。

第3引数の文字数を省略すると、指定した位置から最後までを取得できます。

`Mid([商品コード],3)`なら、3文字目以降の「234」が取れます。

固定長のコードから中間部分や後ろ側を取り出すときは、Midがとても便利です。

Len関数で文字数を数える

Len関数は、文字列の長さを調べる関数です。

単独では「何文字あるか」を返すだけですが、LeftやMidと組み合わせると、後ろからの位置調整や可変長データの切り出しに役立ちます。

たとえば、文字列の先頭に決まった接頭語があって、その後ろを取り出したい場合。

接頭語の長さをLenで求めてMidの開始位置に使えます。

`Mid([名称], Len(“商品名:”) + 1)`のように書けば、「商品名:りんご」から「りんご」だけを取り出せます。

Accessでは日本語の全角文字もLenで1文字として数えられます。

`Len(“東京都”)`の結果は3です。

半角英数字と日本語が混在する「100-0001 東京都千代田区」のような文字列でも、普通に文字数ベースで切り出せます。

実際の例:注文番号を分解する

注文番号「JP2026-000123」から国コード、年度、連番を分ける場合を考えてみましょう。

– 国コード:`Left([注文番号],2)` → 「JP」
– 年度:`Mid([注文番号],3,4)` → 「2026」
– 連番:`Mid([注文番号],8)` → 「000123」

このようにデータの形式が一定であれば、LeftとMidだけでシンプルに分解できます。

ただし、区切り記号の位置が毎回変わるデータでは、次に紹介するInStrとの組み合わせが必要になります。

InStrで文字を探して、区切り文字の前後を切り出す

InStrで文字の位置を調べる

InStr関数は、対象の文字列の中で検索した文字列が最初に出てくる位置を返します。

たとえば`InStr(1,[商品コード],”-“)`と書くと、商品コードの中でハイフンが何文字目にあるかがわかります。

「AB-12345」ならハイフンは3文字目なので、結果は3です。

見つからない場合は0を返すので、InStrは単なる検索だけでなく「特定の文字が含まれているかどうか」の判定にも使えます。

区切り文字より左側を取り出す

区切り文字より左側を取り出す場合は、InStrで求めた位置から1を引いてLeftに渡します。

たとえば「3928-29993」からハイフンより前の「3928」を取り出す式はこうなります。

“`
Left([シリアル番号], InStr(1,[シリアル番号],”-“) – 1)
“`

ハイフンの位置が5文字目なら、Leftで左から4文字を取得するという考え方です。

ハイフンの位置がデータごとに違っても、InStrが毎回位置を調べてくれるので、固定の文字数に頼らず切り出せます。

区切り文字より右側を取り出す

一方、区切り文字より右側を取り出す場合は、Mid関数を使います。

ハイフンの次の文字から最後まで取り出したいので、こう書きます。

“`
Mid([シリアル番号], InStr(1,[シリアル番号],”-“) + 1)
“`

「3928-29993」なら「29993」が返ってきます。

検索する区切り文字が1文字なら「+1」で十分ですが、「県産」「::」「 – 」のように複数文字の区切りを使う場合は、`Len(検索文字列)`を足すと安全です。

複数文字の区切り文字を使う場合

複数文字の区切り文字を使う場合の基本形はこうです。

“`
Mid([元文字列], InStr(1,[元文字列],”県産”) + Len(“県産”))
“`

たとえば「愛媛県産みかん」から「みかん」を取り出す場合、InStrで「県産」が始まる位置を調べて、Lenで「県産」の文字数を足すことで、区切り文字の直後から取り出せます。

1文字の区切りなら感覚的に書けても、2文字以上になると開始位置の計算を間違えやすいので、Lenを使って「区切り文字の長さ分だけ進める」と考えると整理しやすくなります。

検索条件として使う

検索そのものに使う場合は、クエリの抽出条件で`InStr(1,[会社名],”株式会社”) > 0`のように指定できます。

この式は、会社名に「株式会社」が含まれていれば真(True)になります。

Accessの抽出条件ではLike演算子を使う方法もありますが、InStrは「見つかった位置」を数値で返すので、検索と切り出しを組み合わせたい場面に向いています。

たとえばメールアドレスの「@」より前をユーザー名、後ろをドメインとして分ける処理などは、InStrとLeft・Midの典型的な活用例です。

実務で失敗しないための注意点とコツ

検索文字列が見つからない場合の対策

Accessで文字列操作関数を使うときに最も注意したいのは、**検索文字列が見つからない場合**です。

InStrは見つからないと0を返しますが、`Left([項目], InStr([項目],”-“) – 1)`のような式では、0から1を引いて-1になってしまいます。

Leftの文字数に負の値が入るとエラーの原因になります。

実務データには、ハイフンが入っていない値、空欄、想定外の形式が混ざることがよくあります。

正常なデータだけを前提に式を書くのは危険です。

安全に処理するには、**IIf関数でInStrの結果を判定**します。

たとえばハイフンがある場合だけ左側を取り出し、ない場合は元の値を返すなら、こう書きます。

“`
IIf(InStr(1,[商品コード],”-“)>0,
Left([商品コード], InStr(1,[商品コード],”-“)-1),
[商品コード])
“`

少し長く見えますが、データの揺れに強い式になります。

クエリで一度「ハイフン位置: InStr(1,[商品コード],”-“)」のような計算フィールドを作っておいて、その結果を使って次の処理を組み立てると、式の見通しもよくなります。

Nullへの対策

**Null(空欄)**にも注意が必要です。

Accessでは、対象フィールドがNullの場合、文字列関数の結果もNullになったり、式の組み合わせによって期待どおりに表示されなかったりすることがあります。

空欄を空文字として扱いたい場合は、`Nz([商品コード],””)`のようにNz関数を使うと安定します。

たとえば`Left(Nz([商品コード],””),2)`とすれば、商品コードがNullでも式全体が扱いやすくなります。

テーブル設計の段階で必須入力にする方法もありますが、既存データを扱うクエリではNzによる保険が役立ちます。

実務でよく使う活用パターン

実務でよく使う活用パターンをいくつか紹介します。

**メールアドレスからドメインを取り出す**
“`
Mid([メール], InStr(1,[メール],”@”) + 1)
“`

**郵便番号と住所を分ける**(半角スペースで区切られている場合)
– 郵便番号:`Left([住所欄], InStr(1,[住所欄],” “) – 1)`
– 住所本体:`Mid([住所欄], InStr(1,[住所欄],” “) + 1)`

ただし、この場合もスペースが存在しないデータへの対策は必要です。

複雑な式は段階的に組み立てる

最後に、Accessの文字列操作は**役割を分けて考える**と理解しやすくなります。

– 固定位置ならLeft・Mid
– 文字数の計算ならLen
– 区切り文字や検索ならInStr

最初から複雑な式を一度に書こうとせず、まずInStrで位置を確認して、次にLeftやMidで切り出すという順番で組み立てるのがコツです。

クエリの計算フィールドで結果を確認しながら進めれば、フォームやレポートに反映する前にミスを見つけやすくなります。

Left・Mid・Len・InStrを組み合わせて使えるようになると、Accessでのデータ整形や検索作業は大幅に効率化できます。

最初は難しく感じるかもしれませんが、一つずつ試しながら覚えていけば、必ず使いこなせるようになりますよ。

広告