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データベースをより実務向きに扱えるようになります。
ぜひ試してみてください!
広告
