MS Access Tips/Sample and VBA and Blog customize etc...

フリガナでア行、カ行・・・毎にグループ化したい

商品や顧客の一覧をレポートで作成しようとしてます。テーブルには「フリガナ」フィールドがあります。「並べ替え/グループ化の設定」で「最初の一文字」で設定すれば、「あ」「い」「う」・・・・毎にグループ化は簡単にできるのですが、「あ行」「か行」・・・というように行単位でグループ化して出力したいのですが、何か方法はありますか。

RptKanaRowGrouping.png

フリガナフィールドから50音のどの行に属すかを返す関数(または式)を作成します。それを利用して、グループ化します。

難易度:

式でグループ化する方法

まずは、VBAを使わずに、式のみでやる方法から。

レポートのレコードソースのクエリに下記の演算フィールドを作成します。

レポートの「並べ替え/グループ化の設定」で下記のように設定。

 
フィールド/式 並べ替え順序
カナ行 昇順

グループヘッダーに「カナ行」をテキストボックスとして配置。以上で、完成です。

式の解説を簡単にすると、

()の内側の式から読んでいく分かりやいすです。[よみ] に「ごとう」というデータが入っているとします。

StrConv("ごとう",24) で、ひらがなを、半角カタカナ に変換します(vbKatakana + vbNarrow = 24)。 
ごとう → ゴトウ

Left("ゴトウ",1))で、先頭1文字を取り出します。
ゴトウ → コ
半角カタカナに変換したのは濁点を分離して取り除くためです。

InStr("アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨヤヤラリルレロワ","コ")
で、コ が何文字目か取得します。
10文字目なので、10 が返ります。

(10+4)\5
\は、\演算子で 整数除算です。
14÷5=2あまり4 となり商の 2 を返します。

Mid("他あかさたなはまやらわ",2+1,1)
先頭から3文字目から1文字分切り出します。
よって、"か" が返ります。

ユーザー定義関数を利用する方法

式だとちょっと長くなるし、複雑すぎて可読性が悪いので、VBAが使えるなら、ユーザー定義関数を作成すればいいでしょう。

どうでしょうか。これなら何をしているか分かりやすいですね。Like演算子は 静音、濁音、半濁音を区別しませんのでこのような式で濁音、半濁音も判別できます。

ちょっと、このコードではベタすぎる、もう少しスマートにという場合は、下記のように。

コードは短くなりました。その分、可読性は悪いかもしれません。この辺はお好みで選べばいいでしょう。

この関数の使い方は、式の場合のクエリの演算フィールドをこの関数に置き換えます。後の設定はまったく同じです。

サンプルMDB が下記からダウンロードできます。
RptKanaRowGrouping_07.zip (Access 2007 形式 - 780kb)
RptKanaRowGrouping.zip (Access 2002-2003 形式 - 77kb)
RptKanaRowGrouping_2k.zip (Access 2000 形式 - 79kb)

拍手する

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/262-c9469609
該当の記事は見つかりませんでした。