• ベストアンサー

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

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

  • ベストアンサー
  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.2

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の倍数での丸めはできてますね。 もしかしたらアプデされてできるようになったのかもしれません。

参考URL:
http://support.microsoft.com/kb/225330/ja
ponyo12345
質問者

お礼

ありがとうございます。 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って難しいですね。 ありがとうございました。

その他の回答 (3)

  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.4

Applicationオブジェクトについて追記です。 Application.WorksheetFunctionというのは、 「ApplicationオブジェクトのWorksheetFunctionオブジェクト」という意味です。 WorksheetFunctionオブジェクトは元々、Applicationオブジェクトのみに存在するオブジェクトメンバーなので、省略可能です。 Application.を削除したらいったということであれば、綴りが間違っていたか、もしくはExcel95を使用しているかどちらかだと思います。 Excel95では、WorksheetFunctionオブジェクトはApplicationオブジェクトのメンバーではなかったので。 ご参考まで。

ponyo12345
質問者

お礼

qualheart 様 詳しいご説明ありがとうございました。 よくわかりました。 私の綴りのミスでした。申し訳ありません。 今回はご親切にご教授いただきありがとうございました。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

Format関数を使うのはどうですか? Cells(i, 12) = "'" & Format(Round(Cells(i, 9) / Cells(i, 11),"0.##) 頭にアポストロフィを付けたのは文字列として認識させるためです。 数値でよければ不要です。

ponyo12345
質問者

お礼

ありがとうございます。 qualheartさんの方法で出来ました。 ご親切に教えていただきありがとうございました。

  • noah7150
  • ベストアンサー率46% (116/251)
回答No.1

Round関数は小数部桁数となっているのでマイナスは駄目みたいです 100で割り算し丸めて100倍する方法しかなさそう

ponyo12345
質問者

お礼

ありがとうございます。 qualheartさんの方法で出来ました。 ご親切に教えていただきありがとうございました。

関連するQ&A