• ベストアンサー

EXCEL VBAでコピーする時に四捨五入できますか?

いつもお世話になります。 下記マクロを自動で作ったのですが、例えば(1)でセレクトした各セルには、0.1234567・・・といった、小数点以下10桁程度のデータが入っています。 これを(2)でペーストする時に、見た目だけではなく、データ自体を小数点以下3桁にしたい場合、何かよい方法はないものでしょうか? 宜しくお願いします。 (1)Range("T6:V10","T6:V10,AA6:AC10,AH6:AJ10").Select  Selection.Copy  Sheets("Data").Select  Range("D39").Select (2)Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= False, Transpose:=True

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

四捨五入ですね? No1で書かれているVBAのRoundは使用上注意が必要です。 Excelでワークシート関数 Round は、"算術型" の丸め処理を行います。"算術型" 丸め処理では ".5" は常に切り上げられます。 (四捨五入) これに対して VBA の Round 関数は "銀行型" の丸め処理を行います。"銀行型" の丸め処理の場合は ".5" は、結果が偶数になるように丸められ、切り上げられることも、切り捨てられることもあります。 例: 12.1225→12.122 12.1235→12.124 12.1245→12.124 12.1255→12.126 これを防ぐには For Each myRng In Selection myRng.Value = Application.WorksheetFunction.Round(myRng.Value, 3) Next myRng というふうに、Application.WorksheetFunction.を追加してください。

nanami0310
質問者

お礼

詳しい説明ありがとうございます。 ご指導がなければ、何も考えずに次回からも使うとこでした(^^;) また、宜しくお願いします。ありがとうございました。

その他の回答 (1)

noname#29107
noname#29107
回答No.1

色々考えられますが、一番手っ取り早いのは、(2)の下の行に、 For Each myRng In Selection   myRng.Value = Round(myRng.Value, 3) Next myRng とする方法でしょうか? ところで(1)でエラーでませんか?

nanami0310
質問者

お礼

ありがとうございます。 早速やってみます! エラーは、出てませんが・・・

関連するQ&A