- ベストアンサー
vba 四捨五入 について教えてください。
VBA初心者です。お世話になりますがよろしくお願いします。 vbaでRound関数を使って四捨五入したいと考えております。 以下のコードで実行するとエラー(プロシージャの呼び出し,または引数が不正です。)が出ます。 何がなんだかわからずに困っております。 どうかご教授よろしくお願いします。 Sub 計算() Worksheets("abc").Activate Dim LastRow As Long Dim i As Integer LastRow = Worksheets("abc").Range("K65536").End(xlUp).Row For i = 6 To LastRow If Cells(i, 11) = 0 Then Cells(i, 12) = "" Else Cells(i, 12) = Round(Cells(i, 9) / Cells(i, 11),-2) End If Next End Sub
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Cells(i, 12) = Round(Cells(i, 9) / Cells(i, 11),-2) ↓ Cells(i, 12) = Application.WorksheetFunction.Round(Cells(i, 9) / Cells(i, 11), -2) ですね。 ワークシート関数を使用する場合は、必ずWorksheetFunctionプロパティを付けて記述してください。 ただ、VBAのRound関数はNo1さんの言うとおり、整数部分での丸めはできないことになっています。 が、Excel2000で試したところ100の倍数での丸めはできてますね。 もしかしたらアプデされてできるようになったのかもしれません。
その他の回答 (3)
- qualheart
- ベストアンサー率41% (1451/3486)
Applicationオブジェクトについて追記です。 Application.WorksheetFunctionというのは、 「ApplicationオブジェクトのWorksheetFunctionオブジェクト」という意味です。 WorksheetFunctionオブジェクトは元々、Applicationオブジェクトのみに存在するオブジェクトメンバーなので、省略可能です。 Application.を削除したらいったということであれば、綴りが間違っていたか、もしくはExcel95を使用しているかどちらかだと思います。 Excel95では、WorksheetFunctionオブジェクトはApplicationオブジェクトのメンバーではなかったので。 ご参考まで。
お礼
qualheart 様 詳しいご説明ありがとうございました。 よくわかりました。 私の綴りのミスでした。申し訳ありません。 今回はご親切にご教授いただきありがとうございました。
- nda23
- ベストアンサー率54% (777/1415)
Format関数を使うのはどうですか? Cells(i, 12) = "'" & Format(Round(Cells(i, 9) / Cells(i, 11),"0.##) 頭にアポストロフィを付けたのは文字列として認識させるためです。 数値でよければ不要です。
お礼
ありがとうございます。 qualheartさんの方法で出来ました。 ご親切に教えていただきありがとうございました。
- noah7150
- ベストアンサー率46% (116/251)
Round関数は小数部桁数となっているのでマイナスは駄目みたいです 100で割り算し丸めて100倍する方法しかなさそう
お礼
ありがとうございます。 qualheartさんの方法で出来ました。 ご親切に教えていただきありがとうございました。
お礼
ありがとうございます。 Cells(i, 12) = Round(Cells(i, 9) / Cells(i, 11),-2) ↓ Cells(i, 12) = Application.WorksheetFunction.Round(Cells(i, 9) / Cells(i, 11), -2) の方法で試してみたのですが、うまく動かず Cells(i, 12) = WorksheetFunction.Round(Cells(i, 9) / Cells(i, 11), -2) で試してみたところ、動作しました。 Application.は何を意味しているのか、私にはわからないのですが、 教えていただきありがとうございました。 VBAって難しいですね。 ありがとうございました。