こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel2003 ユーザー定義関数

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

投稿日時 - 2018-03-10 01:47:28

QNo.9476326

困ってます

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

お話のとおり、
ユーザ定義関数の計算式に含まれるセルが変化する、
または、計算式が埋めなおされないと
再計算がされません。

掲示された関数では、
アクティブセルが書き換わらないと
(言い換えれば、ユーザ定義関数を埋めなおさないと)
再計算されません。

計算式の埋まったセルを
複数範囲のセルに複写しても
アクティブセルが書き換わったことにはならないです。

提示された計算式を見る限り
ユーザ定義関数を使わずとも
=ROW()*3
という計算式で期待のことができます。

ユーザ定義関数で実現したいということであれば

Function 日別勤怠(MyRange As Range) As Long
 Dim i As Long
 i = MyRange.Row
 日別勤怠 = i * 3
End Function

といった関数にし、
例えば、B2セルに
=日別勤怠(A2)
といった計算式を埋めます。

投稿日時 - 2018-03-10 11:41:15

お礼

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

投稿日時 - 2018-03-11 01:22:45

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

>回答No.1の方は「オブジェクト変数またはwithブロック変数が設定されていません。」
>というエラーがでます。
当方では正しく動作します。
記述ミスを疑います。

Office2003では動作確認していませんが
それが原因とは考えにくいです。


それでもよくわからないようなら
入力しているコード、
エラー画面、
シート画面を示してみてください。

投稿日時 - 2018-03-11 09:48:58

お礼

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

投稿日時 - 2018-03-12 01:48:14

ANo.2

もう一案

期待のユーザ定義関数で、
かつ、引数を与えたくない、
つまり、
=日別勤怠() としたいのであれば、

Function 日別勤怠() As Long
 Dim i As Long
 i = Application.ThisCell.Row
 日別勤怠 = i * 3
End Function

といったコードでイケルと思います。

投稿日時 - 2018-03-10 12:21:22

補足

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

投稿日時 - 2018-03-11 01:42:46