AccessのStrConv関数についてお探しですね。

広告

Accessで全角・半角がバラバラなデータを整える方法【StrConv関数とVal関数の使い方】

Accessで顧客名や商品コード、電話番号、金額なんかを扱っていると、全角と半角、ひらがなとカタカナが混ざっちゃって、検索や集計がうまくいかないことってありますよね。

特にExcelやCSVから取り込んだデータは、入力ルールがバラバラなことが多くて、見た目は同じなのにAccess上では別の文字として扱われる…なんてことがよくあります。

この記事では、AccessのStrConv関数で全角・半角・ひらがな・カタカナを変換する方法と、Val関数で文字列を数値に変える実用的な使い方を解説します。

StrConv関数の基本的な使い方

StrConv関数は、Accessで文字列の表記ゆれを整えるときにすごく便利な関数です。

書き方は `StrConv(文字列, 変換方法)` で、1つ目に変換したい文字列、2つ目に変換の種類を数字で指定します。

Accessのクエリで使うときは、フィールド名を角かっこ [ ] で囲んで、たとえば全角を半角にしたいなら `StrConv([商品コード], 8)` みたいに書きます。

VBAで使う場合は、数字の代わりに `vbNarrow` や `vbWide` といった名前付きの定数を使うと、あとで見たときに「あ、これ半角にしてるんだな」って分かりやすくなります。

よく使う変換方法はこんな感じです。

| やりたいこと | 数字 | VBA定数 | 使用例 |
|—|—:|—|—|
| 半角→全角 | 4 | vbWide | `StrConv([氏名カナ], 4)` |
| 全角→半角 | 8 | vbNarrow | `StrConv([商品コード], 8)` |
| ひらがな→カタカナ | 16 | vbKatakana | `StrConv([ふりがな], 16)` |
| カタカナ→ひらがな | 32 | vbHiragana | `StrConv([フリガナ], 32)` |

そのほかにも、大文字にする `1`、小文字にする `2`、単語の先頭だけ大文字にする `3` なんかも指定できます。

Accessのデータ整理でよく使うのは、こんな場面です。

– 商品コードや郵便番号を半角に統一する
– ふりがなを全部カタカナにそろえる
– 検索用の補助フィールドを作る

これらをクエリで計算フィールドとして作っておけば、元のデータをいきなり変更しないで、変換結果を確認できるので安心です。

注意したいポイント

StrConv関数は万能じゃありません。

たとえば漢字みたいに、対応する半角文字が存在しない文字は、全角を半角に変換してもそのまま残ります。

あと、半角カタカナをひらがなに直接変換しようとすると、環境によってはうまくいかないことがあります。

そんなときは、いったん全角カタカナに変換してから、ひらがなに変換するみたいに、段階を分けて処理すると安全です。

業務データで「変換できたつもり」になって進めちゃうと、検索漏れや重複登録の原因になるので、変換後のサンプルは必ず目で確認するようにしましょう。

クエリでStrConvを使う実例

AccessでStrConv関数を使う場面として一番分かりやすいのは、選択クエリの計算フィールドです。

たとえば、テーブルに「商品コード」ってフィールドがあって、「ABC123」と「ABC123」が混ざってる場合。

見た目は似てるけど、Accessでは全然違う文字列として扱われます。

こんなとき、クエリのフィールド行に `半角商品コード: StrConv([商品コード], 8)` って入力すると、全角英数字を半角に変換した列が表示されます。

まずは選択クエリで結果を確認して、問題なければ更新クエリで元データを修正する…っていう流れが安全です。

ふりがな検索を安定させる

ふりがな検索を安定させたいときは、ひらがな・カタカナの統一が効果的です。

たとえば「やまだ」「ヤマダ」「ヤマダ」が混在してると、普通の検索条件ではヒットしないデータが出ちゃいます。

全角カタカナにそろえたい場合は、半角カタカナを全角にする処理とカタカナ化を組み合わせて、こんな風に書けます。

“`
StrConv(StrConv([ふりがな], 4), 16)
“`

変換方法は足し算で同時に指定できる場合もあるんですが、実務では「何を先に変換したか」が分かる書き方にしておくと、あとから見直すときに楽です。

電話番号や郵便番号の扱い

電話番号や郵便番号みたいに数字を含む文字列も、StrConvで半角に統一しておくと扱いやすくなります。

ただし注意したいのは、電話番号の先頭の0を残したい場合。

これは数値型に変換しちゃダメです。

たとえば「03-1234-5678」や「00123」っていうコードを数値化すると、先頭の0が消えたり、ハイフンを含む値が意図しない扱いになったりします。

StrConvは文字の種類をそろえるための関数なので、「数値として計算したいデータなのか、コードや識別子として文字列のまま扱うデータなのか」を先に判断することが大事です。

Val関数で文字列を数値にする方法

Val関数は、文字列の先頭から数値として読み取れる部分を取り出して、数値として返してくれる関数です。

たとえば `Val(“123円”)` は 123 を返して、`Val(“12.5kg”)` は 12.5 を返します。

でも、全角数字の「123」やカンマ付きの「1,234」は、そのままだと期待どおりの数値にならないことがあります。

そこで、全角数字を半角にそろえてからValで数値化するために、StrConvとValを組み合わせます。

“`
Val(StrConv([金額文字列], 8))
“`

クエリで金額を数値化する

Accessのクエリで、文字列として取り込まれた金額を数値化したいときは、計算フィールドにこう入力します。

“`
数値金額: Val(StrConv([金額], 8))
“`

これで「123円」みたいな文字列は、半角化されたうえでValに渡されて、数値として扱いやすくなります。

ただし、Val関数は文字列の途中に数値として解釈できない文字が出てくると、そこで読み取りをストップします。

たとえば「1,234円」はカンマで止まっちゃうので、結果が1になる可能性があります。

こんなときは、先にカンマを取り除く処理を加えると実用的です。

“`
Val(Replace(StrConv([金額], 8), “,”, “”))
“`

Val関数を使っていい場面、ダメな場面

Val関数を使うときは、「数値化できれば何でもいい」って考えないことが大切です。

金額や数量みたいに計算対象となるデータには向いてますが、会員番号、社員番号、郵便番号、電話番号みたいな識別用の値には向きません。

これらは数字だけで構成されていても、計算するための値じゃなくて、文字列として意味を持つデータだからです。

先頭の0を保持する必要がある場合や、桁数そのものに意味がある場合は、Valで数値化せず、StrConvで半角文字列に統一するだけにとどめるのが安全です。

VBAでの使用例

VBAで使う場合は、こんな感じで書けます。

“`vba
‘全角数字を半角にしてから数値化する例
Public Sub ConvertNumberSample()
Dim s As String
Dim n As Double

s = “1234円”
n = Val(StrConv(s, vbNarrow))

MsgBox n
End Sub
“`

VBAでは `vbNarrow` を指定すると、数字の8よりも意味が明確になります。

クエリでは `8` と書いても問題ないんですが、VBAでは定数を使うことで、あとから見たときに「あ、全角を半角に変換してるんだな」ってすぐ分かります。

さらに、小数を扱う場合はDouble型、整数だけならLong型など、格納先のデータ型も意識しましょう。

Accessではフィールドのデータ型と関数の戻り値が合ってないと、並べ替えや集計で思わぬ結果になることがあります。

変換するときの注意点とデータ整備のコツ

StrConv関数とVal関数は便利なんですが、元データを直接更新する前に、必ず確認用のクエリを作ることをおすすめします。

特に外部ファイルから取り込んだデータには、全角スペース、半角スペース、カンマ、単位、記号、見えにくい制御文字なんかが混ざってる場合があります。

StrConvで文字種をそろえても、余分な空白や記号が残ってれば、検索条件や集計結果に影響しちゃいます。

なので、必要に応じてTrim関数(空白を削除)、Replace関数(文字を置換)、Nz関数(Nullを扱う)なんかも組み合わせて、段階的に整える発想が大事です。

補助フィールドを作る設計

実務では、変換後の値をそのまま表示用データとして上書きするより、検索用・集計用の補助フィールドとして持たせる設計が役立つことがあります。

たとえば、顧客名のふりがなは入力されたまま残しつつ、検索用に全角カタカナへ統一したフィールドを別に用意すれば、元の入力内容を保持しながら検索精度を上げられます。

商品コードも同じで、表示用は元データ、照合用は半角統一済みデータっていう形にすると、インポート元の表記ゆれに左右されにくくなります。

データベースでは「見た目を整える処理」と「照合・集計しやすくする処理」を分けて考えると、あとからの修正がしやすくなります。

よく使う組み合わせパターン

実務でよく使う組み合わせをまとめておきます。

– **商品コードや管理番号**: `StrConv([コード], 8)`
– **ふりがな**: `StrConv(StrConv([ふりがな], 4), 16)`
– **金額文字列**: `Val(Replace(StrConv([金額], 8), “,”, “”))`

これらはそのまま使える場面も多いんですが、すべてのデータに無条件で適用するんじゃなくて、対象フィールドの意味に合わせて調整してください。

特にValは、数値として読める先頭部分だけを返す性質があるので、「A123」みたいに先頭が文字の場合は0になるし、「123A456」みたいな値は123までしか読み取られません。

エラーにならずに値が返るからこそ、変換結果の検証が欠かせません。

まとめ

Accessで文字列の表記ゆれを減らすには、StrConv関数で全角・半角・ひらがな・カタカナを統一して、計算が必要な文字列だけVal関数で数値化するのが基本です。

クエリで試して、結果を確認して、必要ならVBAや更新クエリへ展開する…っていう流れにすれば、データを壊すリスクを抑えながら整備できます。

関連して、日付文字列を変換するCDate関数、空白やNullを扱うNz関数、文字列置換に使うReplace関数も一緒に覚えておくと、Accessでのインポート処理やデータクレンジングがさらに安定します。

StrConvとValを正しく使い分けることで、検索漏れや集計ミスを防いで、Accessデータベースをより実務向きに扱えるようになります。

ぜひ試してみてください!

広告