• ベストアンサー

Excel2003 ユーザー定義関数

お世話になります。 ユーザー定義関数について教えて下さい。バージョンはExcel2003です。 B268セルの数式をコピーしてB259~B281までその数式を貼り付けるような使い方をしたいのですが、ユーザー関数は関数の中身を変更しても再計算しないとのことで再計算されません。 セルひとつひとつに貼り付けを行っていくと再計算されましたが、さらに広範囲に一気にユーザー関数を使用した数式を貼り付ける使い方で、再計算させる方法はありますでしょうか。 よろしくお願いします。

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.1

お話のとおり、 ユーザ定義関数の計算式に含まれるセルが変化する、 または、計算式が埋めなおされないと 再計算がされません。 掲示された関数では、 アクティブセルが書き換わらないと (言い換えれば、ユーザ定義関数を埋めなおさないと) 再計算されません。 計算式の埋まったセルを 複数範囲のセルに複写しても アクティブセルが書き換わったことにはならないです。 提示された計算式を見る限り ユーザ定義関数を使わずとも =ROW()*3 という計算式で期待のことができます。 ユーザ定義関数で実現したいということであれば Function 日別勤怠(MyRange As Range) As Long  Dim i As Long  i = MyRange.Row  日別勤怠 = i * 3 End Function といった関数にし、 例えば、B2セルに =日別勤怠(A2) といった計算式を埋めます。

mihimarumaru
質問者

お礼

ありがとうございます。できました。 解説も付けて頂き、理解することもできました。

その他の回答 (2)

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.3

>回答No.1の方は「オブジェクト変数またはwithブロック変数が設定されていません。」 >というエラーがでます。 当方では正しく動作します。 記述ミスを疑います。 Office2003では動作確認していませんが それが原因とは考えにくいです。 それでもよくわからないようなら 入力しているコード、 エラー画面、 シート画面を示してみてください。

mihimarumaru
質問者

お礼

できました。 >B2セルに=日別勤怠(A2) の部分で記述ミスがありました。 お騒がせしました。 ありがとうございました。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.2

もう一案 期待のユーザ定義関数で、 かつ、引数を与えたくない、 つまり、 =日別勤怠() としたいのであれば、 Function 日別勤怠() As Long  Dim i As Long  i = Application.ThisCell.Row  日別勤怠 = i * 3 End Function といったコードでイケルと思います。

mihimarumaru
質問者

補足

申し訳ありません。もう一案のこちらの方はできたのですが、回答No.1の方は「オブジェクト変数またはwithブロック変数が設定されていません。」というエラーがでます。 補足頂けると助かります。

関連するQ&A