- ベストアンサー
[Excel ADO] 丸め桁を動的に
Excel ADOを使って CSV 型式の表データの操作をしています 対象の商品価格表の価格の端数を丸めたいとき、価格帯で丸め位置を変えたいのです。 2000未満なら10円単位、2000以上20000未満なら100円単位 2万以上20万未満なら 1000円単位、20万以上は1万単位としたい SELECT ROUND(価格,-1)FROM 価格表 というSQL文の、丸め位置を上記の価格帯で変えることはかのうでしょうか? よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ROUND関数でマイナスは使えないみたいですので SQLでExcelの集計を簡単・楽しく - ROUND関数 https://www.excellovers.com/entry/excelsql22 SELECT 価格表.価格, Switch([価格]>=200000,Int([価格]/100000)*100000,[価格]>=20000,Int([価格]/10000)*10000,[価格]>=2000,Int([価格]/1000)*1000,[価格]<2000,Int([価格]/100)*100) AS ROUND価格 FROM 価格表; でいかがでしょう。ACCESSで試しましたがエクセルADOでは試してないです。
その他の回答 (3)
- kkkkkm
- ベストアンサー率66% (1719/2589)
何度もすみません ROUND関数は四捨五入でしたのに切り捨ててました。 Int([価格]/100)*100 を Int([価格]/100+0.5)*100 のようにしてください。 他の計算も上記に合わせて変更してください。
- kkkkkm
- ベストアンサー率66% (1719/2589)
回答No.2はまるめ位置を勘違いしているかもしれませんので Int([価格]/100000)*100000 Int([価格]/10000)*10000 Int([価格]/1000)*1000 Int([価格]/100)*100 の計算の所で調整してください。
- NuboChan
- ベストアンサー率47% (785/1650)
>SQL文の、丸め位置を上記の価格帯で変えることはかのうでしょうか? はい、ADOを使ってCSVファイルの価格データを操作し、 価格帯に応じて異なる単位で丸めることは可能です。 これを実現するためには、CASE文を使用したSQL文を作成します。 例えば、以下のようなSQL文を使用することで、 指定された価格帯に応じて異なる単位で価格を丸めることができます: SELECT CASE WHEN 価格 < 2000 THEN ROUND(価格, -1) WHEN 価格 >= 2000 AND 価格 < 20000 THEN ROUND(価格, -2) WHEN 価格 >= 20000 AND 価格 < 200000 THEN ROUND(価格, -3) ELSE ROUND(価格, -4) END AS 丸めた価格 FROM 価格表 このSQL文をExcel VBAのADOコードで使用してください。
お礼
ご回答ありがとうございました。
お礼
ご回答ありがとうございました。 まさにROUNDでマイナスが使えないことに引っかかっていました 書式のサジェストとしてベストです なぜか switch だと出力が化けてしまいましたがこれはまた試行錯誤してみます 今はiif を組み合わせることで同様の処置に置き換えました