Microsoft Access 掲示板

レポートで商品によって数量の表示を変える

9 コメント
views
4 フォロー

当方ガソリンスタンドで、顧客向け請求書を発行できるよう作成中です。
レポートの明細(詳細セクション)でレギュラーガソリン等の燃料油なら数量の表示を小数点以下2桁表示に、
それ以外の商品(タイヤ等)なら数量の表示を整数表示にするにはどうすればいいのでしょう?

oilService
作成: 2023/07/10 (月) 16:44:07
通報 ...
1
hiroton 2023/07/10 (月) 17:27:04 修正 10a5a@f966d

表示用にテキストでデータを作る。かな

数量の表示: Left([丸めた数量])+0.001,InStr([数量] & ".",".")+IIf([商品区分]="燃料油",2,-1))
2
hiroton 2023/07/10 (月) 18:01:50 2c180@2ee8f >> 1

修正修正を重ねたらやっぱり間違ってるし

数量の表示: Left([丸めた数量]+0.001,InStr([数量] & ".",".")+IIf([商品区分]="燃料油",2,-1))

※不要な「)」が残ってました
数量の表示: Left([丸めた数量])+0.001,InStr([数量] & ".",".")+IIf([商品区分]="燃料油",2,-1))

6
hiroton 2023/07/10 (月) 22:52:30 7d804@2ee8f >> 2

さらに修正・・・

数量の表示: Left([丸めた数量]+0.001,InStr([丸めた数量] & ".",".")+IIf([商品区分]="燃料油",2,-1))

[丸めた数量][数量]は例えば[数量]9.999のとき[丸めた数量]10となって桁が変わる可能性があるので横着せず両方とも[丸めた数量]を使う必要がありました
意図せず記述してましたが、[丸めた数量]はやっぱり別フィールドにして計算させておいた方がよさそうですね

3
oilService 2023/07/10 (月) 20:48:12 79353@76ab6

hirotonさん、すばらしいです!希望通りの表示になりました。ありがとうございます。ただ私のレベルでは、この式を紐解くのは無理なようです。ぜひ詳細なご説明をお願いいたします。
欲を言いますと、整数が右詰になってしまい、燃料油の少数第二位の位置に表示されます。
   レギュラー 23.56ℓ
   タイヤ     4本
ではなく
   レギュラー 23.56ℓ
   タイヤ    4  本
と整数の位置に表示できないでしょうか?

4
hiroton 2023/07/10 (月) 22:14:28 修正 7d804@2ee8f

ACCESS標準の書式設定ではちょっと難しい案件なので文字として整形してしまいます

Left(
    [丸めた数量]+0.001                    :0詰めをして小数点3桁にそろえた文字
    ,InStr([丸めた数量] & ".",".")        :小数点の位置
        +IIf([商品区分]="燃料油",2,-1)    :条件に合わせて+2(小数点以下2桁)/-1(整数)
)

登録するデータはある程度入力ルールが決まっていると思いますが、単純に数値とするといろいろな入力が考えられます

パターン123456←文字位置
A4
B24.13
C24.1
D9.543
E24.999

ほしい結果は2パターンで
Ⅰ:先頭から小数点の前の文字まで
Ⅱ:先頭から小数点の2文字先まで

先頭から文字列を抜き出せばいいのでLeft関数を使ってそれぞれ

Ⅰ:Left( 基準の文字列, 先頭から小数点の2文字先まで)
Ⅱ:Left( 基準の文字列, 先頭から小数点の前の文字まで)

を作ります

基準の文字列
文字列として処理するので丸め処理をした数値を基にします
注意が必要なのは、上記ACパターンで、小数点以下2桁までほしいのに文字列としては桁数が足りません。そこで、元の数値に影響なく、桁が足りないデータに対しては0で埋められるように[丸めた数量]+0.001と計算させています。丸め処理済みであれば数値のない小数点以下第3桁に1を加えても影響がでません
逆に丸め処理が済んでいない場合、例えばEパターンにこのような計算式を当ててしまうと基にすべき数値が変わってしまうので注意が必要です

先頭から小数点
InStr関数で文字位置を調べればいいですね。ただし、整数のデータには小数点がないので、小数点があると仮定した位置を返すように、[丸めた数量] & "."を元のデータとして"."を探すようにします

の2文字先まで/の前の文字まで
単純に+2/-1でいいので、これをIIf関数で条件を付けて切り替えます

5
hiroton 2023/07/10 (月) 22:46:36 修正 7d804@2ee8f

整数の位置に表示できないでしょうか?

単位をどう表示するかも悩ましいところですが、文字位置は使っているフォントで調整が必要になったりするのでとても難しいですね

整数表示(右詰め)、小数部表示(左詰め)とテキストボックスを2つ並べてしまうのが簡単だと思います

整数表示 :Fix([丸めた数量])
小数部表示:IIf([商品区分]="燃料油",Mid([丸めた数量]-Fix([丸めた数量]+0.001),2,3))&[単位]
8
hiroton 2023/07/11 (火) 10:17:02 fc8bf@f966d >> 5

やっぱり計算式間違いやってるやーつ・・・

小数部表示:IIf([商品区分]="燃料油",Mid([丸めた数量]-Fix([丸めた数量])+0.001,2,3))&[単位]


小数部表示:IIf([商品区分]="燃料油",Mid([丸めた数量]-Fix([丸めた数量]+0.001),2,3))&[単位]


小数部表示:IIf([商品区分]="燃料油",Mid([丸めた数量]-Fix([丸めた数量])+0.001,2,3))&[単位]


実際にACCESS触らず手打ちでやってるとイカンなやつでした

7
oilService 2023/07/11 (火) 09:33:40 13b9a@89413

hirotonさん、貴重なお時間を使わせてしまって、本当にありがとうございました。
整数と小数を分けて取出して表示する方法は、下記の通り私も作っていたのですが、どうにも安っぽいやり方に思えて長年モヤモヤしていました。

整数部:fix([数量]
小数部:IIf([商品区分]="燃料油", Format([数量]-[整数部],"#.00"),""))

Left関数とinStr関数の組み合わせで表示できるとは、hirotonさんにあらためて感謝申し上げます。

9
hiroton 2023/07/11 (火) 12:03:29 fc8bf@f966d

当初、表示を分ける必要がなかったので整数部と小数部をまとめて処理するためにLeft,InStrの組み合わせにしたんですけど、最終的な目的から見ればすでにやってる方法で問題ないと思いますよ

安っぽいやり方に思えて

ACCESSは実に安いソフトなので、安っぽい方法で目的が達成できたのなら喜びましょう

軽く触れましたが、文字(文字列)の表示は非常に高度な問題です。ACCESSはかなり苦手とする部類で、「レポートの表示だけでいい」のならある程度力業を組み合わせてしまったほうがすんなりいくものです