Page 143 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼指定した範囲を、自作関数で数値をおきかえることは可能か? いぬだわん 02/9/28(土) 9:29 ┗Re:指定した範囲を、自作関数で数値をおきかえることは可能か? Hirofumi 02/9/28(土) 12:04 ┗Re:指定した範囲を、自作関数で数値をおきかえることは可能か? いぬだわん 02/9/28(土) 18:32 ┗Re:Round関数につて Hirofumi 02/9/28(土) 19:18 ┗Re:Round関数につて よろずや 02/9/28(土) 20:39 ─────────────────────────────────────── ■題名 : 指定した範囲を、自作関数で数値をおきかえることは可能か? ■名前 : いぬだわん ■日付 : 02/9/28(土) 9:29 -------------------------------------------------------------------------
おはようございます。 質問です。 Worksheetにただの任意の数の数値データがあるとします。 これらを全部指定して、1/10を四捨五入して整数値にします。 そこで、UsedRangeを使って、以下のような関数を用いようと思ったのですが (ExcelのRound関数を使ってもいいのですが、厳密に数値が異なるので)、 「型が違います(だったかしら?)」というようなエラーがでます。 UsedRangeを使って数値を指定し、このようなことはできるのでしょうか。 ちなみに四捨五入する自作関数は以下のとおりにしました。 Function cRound(tempValue) cRound = Int(tempValue + 0.5) End Function ご教授願えればと思います。 |
どの様にUsedRangeを使って数値を指定しているのか解りませんが >Function cRound(tempValue) > cRound = Int(tempValue + 0.5) >End Function 上記でエラーを起こしているのは、引数tempValueに文字列(数値として認識出来ない)が 入ってきているのでは無いのですか? 対策は、tempValueにセルの値を渡す時にIsNumeric等で数値の確認をして渡します または、Functionの中で、確認します Function cRound(tempValue As Variant) As Variant If IsNumeric(tempValue) Then cRound = Int(tempValue + 0.5) Else cRound = tempValue End If End Function 引数、関数名には必ず、データ型を付けましょう >(ExcelのRound関数を使ってもいいのですが、厳密に数値が異なるので) 確かにVBAのRound関数は四捨五入で値が異なり使えませんが、 Excelのワークシート関数は大丈夫と思いますので其方を使えば善いのでは? 例えば Public Sub Test() Range("B1").Value _ = Application.WorksheetFunction.Round(Range("A1").Value, 0) End Sub |
▼Hirofumi さん: こんばんは。 いつもいつもありがとうございます。 上手くいきました。 というよりも、私の勉強不足です(汗)。 Excelワークシート関数のほうで大丈夫なんですか(驚)。 VBAの関数とExcelの関数の精度は同じものだと思っていました。 ありがとうございました。 |
>Excelワークシート関数のほうで大丈夫なんですか(驚)。 >VBAの関数とExcelの関数の精度は同じものだと思っていました。 Round関数について 私も余り詳しくは有りませんが VBAのRound関数は、MSは四捨五入では無く丸めだと言ってます (私は、バグのような気がしますが?) ワークシート関数のROUND関数は四捨五入です |
>Round関数について >私も余り詳しくは有りませんが >VBAのRound関数は、MSは四捨五入では無く丸めだと言ってます >(私は、バグのような気がしますが?) 逆です。 四捨五入したいというから、仕様が違うという話になってしまいますが、 丸めたいということなら、VBAのRound関数が正しいのです。 JISには丸めの規定はありますが、四捨五入はありません。 |