文字列のうち数字だけを半角に変換する

 全角文字と半角文字の間の変換にはStrConv関数を用いますが、カナ・英字・数字を区別して変換することができず、すべて一括して変換されます。
 そこで、その他の関数により全角数字だけを半角数字に変換してみます。

f:id:accs2014:20180520023649p:plain:right:w500

 このようなテーブルを用います。
 「出来事」列に全角カナ・英字・数字が混在していますのでこれを変換してみます。


Replace関数による方法

f:id:accs2014:20180520111425p:plain:right:w500

 変換の対象が10種類しかないのだからReplace関数をネストしようという方法です。単純ですが安全確実です。
 クエリデザインで次のような列を設けます。


数字のみ半角: Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace([出来事],"0","0"),"1","1"),"2","2"),"3","3"),"4","4"),"5","5"),"6","6"),"7","7"),"8","8"),"9","9")

f:id:accs2014:20180520111422p:plain:right:w500

 データシートビューです。

Format関数等による方法

 各種関数の組み合わせで実現する方法です。
 式は幾分短くなりますが複雑なうえ、文字列が長い(57文字以上)時にエラーとなってしまうため実用性は低いです;_ _)

f:id:accs2014:20180520023646p:plain:right:w600

 クエリデザインです。
 次のような列を設けます。


数字のみ半角: Eval(Replace(Replace(Format([出来事],Replace(String(Len([出来事]),"&"),"&","{&}")),"{","Format('"),"}","')&") & "''")

 簡単に言って1文字ずつFormat関数で囲んで評価(第2引数なし。このとき全角数字のみ半角になります)しています。


f:id:accs2014:20180520023643p:plain:right:w500

 データシートビューです。