数値フィールドに全角文字で入力したり、他のアプリケーションから値をコピーして入力する際、

一般的には やること「全角から半角へ変換する」をお使い頂くのですが、入力したい値がマイナス値でかつ、その文字がマイナスに似た他の文字となっていた場合、「全角から半角へ変換する」では半角文字のマイナスに変換する事ができず、

計算フィールドが「#CONVERT!」エラーになったり、 レコードを保存する際、数値フィールドに「数字でなければなりません。」エラーが表示されることがあります。



こういった際に、やること「正規表現を用いてフィールドの値を置換する」を使うと、この問題を解決できるケースがあります。


改修する前のアプリ

次の様なアプリを例とします。なお、上のエラー例で示しているアプリと同じものです。


※フィールド名とフィールドコードは同じものを指定しています。


数値A:数値フィールド

数値B:数値フィールド

計算:計算フィールド(計算式は 数値A+数値B )


再掲する形となりますが、上の設定のアプリで次のような値を設定し、

数値A:10000

数値B:―3000


保存すると次の様なエラー表示となります。


改修準備としてアプリに置換作業用フィールドを追加

まず、アプリに「正規表現を用いてフィールドの値を置換する」を使って値を置換するための作業用フィールドを追加します。


※今回もフィールド名とフィールドコードは同じものを指定しています。


●追加したフィールド

編集ワーク用文字列:文字列(1行)フィールド


カスタマイズを作成

続いて、カスタマイズを作成します。今回は数値Bに入力された数値のマイナスの様な文字列を半角マイナスに変換し、文字を半角に変換します。


大まかな作りは

・数値Bの値を編集ワーク用文字列にコピーする

・編集ワーク用文字列の中のマイナスの様な文字列を半角マイナスに変換する

・編集ワーク用文字列を半角に変換する

・編集ワーク用文字列の値を数値Bにコピーする

となります。


数値Bの値を編集ワーク用文字列にコピーする

やること「フィールドに値をセットする」を使って数値Bの値を編集ワーク用文字列にコピーします。

条件は「フィールドの値を編集して値が変わった時」を設定し、「数値B」フィールドの値を編集して値が変わった時に動くようにしておきます。


編集ワーク用文字列の中の「マイナスの様な文字列」を半角マイナスに変換する

やること「正規表現を用いてフィールドの値を置換する」をつかって編集ワーク用文字列にコピーされた文字を置換します。


ここで、「正規表現」のパラメータには次の値を設定します。

[\u2010-\u2015]|\u2212|\u30FC|[\uFF70]


また、「置換文字列」のパラメータには「」を設定します。


この正規表現パラメータは何をしているの?

このパラメータは、次の文字列であれば置換の対象とする指定を行っています。


文字

Unicode

説明

U+2010

ハイフン

U+2011

ノーブレークスペース

U+2013

二分ダッシュ

U+2014

単柱。欧文用の全角ダッシュ

U+2015

一般的な全角ダッシュ

U+2212

全角マイナス記号

U+30FC

全角の長音符

U+FF70

半角カナの長音符


編集ワーク用文字列を半角に変換する


やること「全角から半角へ変換する」を使って、全角を半角へ変換しています。


編集ワーク用文字列の値を数値Bにコピーする


最後にやること「フィールドに値をセットする」を使って、編集した内容を数値Bフィールドに書き戻しています。


実際に動作させて試すと

まず、数値Bの初期状態がこうだとして、


この数値Bに「―3000」を数値として設定し、入力が完了すると


次のように半角文字列の数値に変換され、計算も正しく行われました。


おわりに

やること「正規表現を用いてフィールドの値を置換する」は、正規表現のパラメータがうまく設定できると非常に強力な処理が実現できます。


正規表現のパラメータについては、残念ながらチャットサポートのサポート対象外となってしまうのですが、色々と検証していただいて、上手く使えそうな時には使っていただけると解決の一助となりそうです。


ぜひお試し下さい!