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

文字列中に含まれる数値を漢数字に変換する関数

テキスト中に埋め込まれている数値を漢数字に変換する関数です。例えば、下記のような場合に使える関数です。

「○○町1丁目234番地」というような住所を、「○○町一丁目二百三十四番地」というように変換したい。

「代金は、24500円です。」を「代金は、二万四千五百円です。」と変換する。

漢数字変換関数タイトル

難易度:

変換関数

文字列中に数値が埋め込まれているとき、その数値を漢数字に変換します。

事前に、下記の「数値→漢数字変換関数」を標準モジュールにコピーしておいてください。
数値←→漢数字変換関数 - hatena chips

半角数字だけでなく全角数字にも対応しています。

CnvKanjiNum("○○町1丁目234番地") → "○○町一丁目二百三十四番地"
CnvKanjiNum("代金は、24500円です。") → "代金は、二万四千五百円です。"

テキストボックスのコントロールソースに設定する場合は
=CnvKanjiNum([フィールド名])
とします。ただしテキストボックス名がフィールド名と同じ場合はエラーになりまのすで、テキストボックス名をフィールド名とは異なるものに変更してください。

ロジック

Mid関数で一文字ずつ切り取って、Like "#" で数字かどうかチェック。
数字なら、
開始位置から、現在位置の前までを返り値に追加
現在位置以降を切り取って Val関数で数値に変換
その数値を Num2Kanji関数で漢数字に変換
返り値に漢数字を追加

切り出し開始位置を数字のあとに移動して、
上記の処理を最後まで繰り返し。


拍手する

7 Comments

igachan says...""

hatenaさん、お世話になっております。hatenaさんのおかげでもう少しで案内状の発送ができそうです。ただ今宛名の印刷画面を作っているのですが長3形の封筒に縦書きで住所を印刷するつもりなのですが・・・。テーブル「案内状発送」にフィールド「住所1」をつくり全角で入力してあるのですがレポートをデザイン画面からプレビュー画面にすると

コンパイルエラー 変数が定義されていません とメッセージが表示されます。

Public Function CnvKanjiNum(Ad) As String
Dim i As Long
Dim Pos As Long
Dim Num As Long

If IsNull(Ad) Then Exit Function
Pos = 1
For i = 1 To Len(Ad)
If Mid(Ad, i, 1) Like "#" Then
CnvAdKanNum = CnvAdKanNum & Mid(Ad, Pos, i - Pos)
Num = Val(Mid(StrConv(Ad, vbNarrow), i))
CnvAdKanNum = CnvAdKanNum & Num2Kanji(Num)
i = i + Len(CStr(Num))
Pos = i
End If
Next
CnvAdKanNum = CnvAdKanNum & Mid(Ad, Pos, i - Pos)
End Function

のなかの
Public Function CnvKanjiNum(Ad) As String が黄色のラインがひかれ、本文五行目の

CnvAdKanNum = CnvAdKanNum & Mid(Ad, Pos, i - Pos)

の後者の CnvAdKanNum に青色ラインがひかれます。

レポート内のテキストボックス「住所1」のコントロールソースに

=CnvKanjiNum([住所1])

と記述しているのですが、フィールド名では変換してくれないのでしょうか?

また、15-4のようなハイフンは縦のハイフンには変換はできないものでしょうか?・・・文字種に@をつければ良い。という記事は見たことはあるのですができませんでした。 


2014.04.03 22:49 | URL | #- [edit]
hatena says...""

> コンパイルエラー 変数が定義されていません とメッセージが表示されます。

記事中のコードが間違ってました。

正しいもの訂正しておきましたので、もう一度コピーしなおして置き換えてください。

> また、15-4のようなハイフンは縦のハイフンには変換はできないものでしょうか?・・・文字種に@をつければ良い。という記事は見たことはあるのですができませんでした。 

ハイフンは、「ー」に変換します。
テキストボックスの「縦書き」プロパティを「はい」にしておくと縦棒になります。


=Replace(CnvKanjiNum([住所1]),"-","ー")

2014.04.04 01:51 | URL | #5uE6dEgY [edit]
igachan says...""

 おはようございます。お世話になっております。
早速、構文と「「住所1」のコントロールソースを書き換えてみました。
 ところが
実行時エラー ’2427’ 指定した式には値がありません。というメッセージが表示され、デバッグをクリックすると
構文3行目の

For i = 1 To Len(Ad)

の部分に黄色ラインがかかってしまいます。テーブルの設定に間違いはないのですが・・・。

2014.04.04 07:23 | URL | #- [edit]
hatena says..."掲示板へ"

このページの上部のメニューバーの BBS ボタンをクリックして、
掲示板へ移動してそこで続けましょう。

掲示板で症状のでるファイルをアップロードしてください。

2014.04.05 01:08 | URL | #5uE6dEgY [edit]
igachan says..."Re:"

Hatenaさん、こんばんは。自分でも少し勉強してみました。

Public Function CnvKanjiNum(Ad) As String

の 閉じカッコの位置が違ったみたいで

Public Function CnvKanjiNum(Ad As String)としたらエラー画面は出なくなったのですが、レポートのテキスト「住所1」に #Type と表示されるようになっています。

パスワードとは任意のものでよろしいのでしょうか?

2014.04.05 01:41 | URL | #- [edit]
hatena says..."re:Re:"

> Public Function CnvKanjiNum(Ad) As String
>
> の 閉じカッコの位置が違ったみたいで
>
> Public Function CnvKanjiNum(Ad As String)としたらエラー画面は出なくなったのですが、レポートのテキスト「住所1」に #Type と表示されるようになっています。

そこは、
Public Function CnvKanjiNum(Ad) As String
のままにしておいてください。


ちょっとサンプルを作成して試してみましたが、
テキストボックスの名前とフィールド名を同じにすると、
症状を再現出来ました。

テキストボックスの名前を例えば「txt住所1」というように変更してください。

2014.04.05 06:24 | URL | #5uE6dEgY [edit]
igachan says...""

ありがとうございます。表示されました。

2014.04.05 22:20 | URL | #- [edit]

Leave a reply






Trackbacks

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