過去ログ

                                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

ご教授願えればと思います。
 ───────────────────────────────────────  ■題名 : Re:指定した範囲を、自作関数で数値をおきかえることは可能か?  ■名前 : Hirofumi <hirofumi@venus.dti.ne.jp>  ■日付 : 02/9/28(土) 12:04  -------------------------------------------------------------------------
   どの様に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
 ───────────────────────────────────────  ■題名 : Re:指定した範囲を、自作関数で数値をおきかえることは可能か?  ■名前 : いぬだわん  ■日付 : 02/9/28(土) 18:32  -------------------------------------------------------------------------
   ▼Hirofumi さん:
こんばんは。
いつもいつもありがとうございます。
上手くいきました。
というよりも、私の勉強不足です(汗)。

Excelワークシート関数のほうで大丈夫なんですか(驚)。
VBAの関数とExcelの関数の精度は同じものだと思っていました。

ありがとうございました。
 ───────────────────────────────────────  ■題名 : Re:Round関数につて  ■名前 : Hirofumi <hirofumi@venus.dti.ne.jp>  ■日付 : 02/9/28(土) 19:18  -------------------------------------------------------------------------
   >Excelワークシート関数のほうで大丈夫なんですか(驚)。
>VBAの関数とExcelの関数の精度は同じものだと思っていました。

Round関数について
私も余り詳しくは有りませんが
VBAのRound関数は、MSは四捨五入では無く丸めだと言ってます
(私は、バグのような気がしますが?)
ワークシート関数のROUND関数は四捨五入です
 ───────────────────────────────────────  ■題名 : Re:Round関数につて  ■名前 : よろずや  ■日付 : 02/9/28(土) 20:39  -------------------------------------------------------------------------
   >Round関数について
>私も余り詳しくは有りませんが
>VBAのRound関数は、MSは四捨五入では無く丸めだと言ってます
>(私は、バグのような気がしますが?)

逆です。
四捨五入したいというから、仕様が違うという話になってしまいますが、
丸めたいということなら、VBAのRound関数が正しいのです。

JISには丸めの規定はありますが、四捨五入はありません。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 143