2020.01.19
「パン屋の原価計算」アプリを作っていた時、料理のレシピで「カップ1/2」とか「大さじ2/3」など頻繁に出てきました。
そういえば、アプリで分数を扱う使うことはほとんどなかったですね。
1/2とか2/3をテキストに入力。
[計算]ボタンをクリック。
「入力した数値×2」の計算式を実行。
処理結果は・・・
「型が一致しません」というエラーになってしまいます。
できそうでできない!
電卓では簡単に計算できるのにAccessではそうもいかないことが多いですね。
1/2や2/3。
これをどのように処理するか・・・考えてみました。
【AD】
小数であればエラーなく参照できるので、ユーザが分数を小数に変換して入力する方法があります。
これも「あり」かなとも思いますが、ユーザに負担がかかるというディメリットがあります。
使われている分数はほぼ同じなので、1/2は0.5、2/3は0.66など選択式にして分数を固定させてしまえばその分数応じて分岐させて計算処理できます。
ただ、想定外の分数が出てきたら対応できません。
1/2は、1÷2です。つまり、分子÷分母です。
フォーム上のテキストを分子用のテキストと分母用のテキスト2つ設置してそれぞれ参照して割り算ができるようにします。
入力時にテキストを移動させるステップが増えてユーザに負担がかかりますが、シンプルな方法です。
ユーザの入力負担をなるべく少なくしてあげたい。
Accessには便利な関数が装備されています。
これらを使わない手はありません。
関数で解決してみます。
分数は「―」(括線)で分子と分母は区切られています。
パソコン的には「/」ですので「/」から前の数字と後の数字を抽出して割算をします。
分子の求め方
・Left関数でLen-InStrで求めた「/」から左側の文字列を取り出す。
・Len関数でテキストに入力された文字数を求める。
・InStr関数で「/」が何文字目にあるか求める。
分母の求め方
・Right関数でLen-InStrで求めた「/」から右側の文字列を取り出す。
・Len関数でテキストに入力された文字数を求める。
・InStr関数で「/」が何文字目にあるか求める。
式にすると・・・
小数値 = Left([テキスト], Len([テキスト]) - InStr([テキスト], "/")) / Right([テキスト], Len([テキスト]) - InStr([テキスト], "/"))
これらの関数の説明はこちらからどうぞ。
【AD】