| 
    
     |  | ▼うどん さん: 
 こんにちは
 
 直接の原因は上で申し上げたようなことでしょうがいくつか気になる点がありますので
 老婆心かもしれませんが。
 
 ・変数をすべて Variant型で宣言しておられます。これぐらいの処理ですから効率としてどうこういう
 ものではありませんが、数値は Long型、セルは Range型で宣言しておいたほうが、効率もよろしいですし
 また、コードを見たときのわかりやすさも向上すると思います。
 
 ・コードの中で Target 以外に Selection を使っておられますね。何か意図はあるのでしょうか?
 たとえば、まず、セル領域を選択しておいて、そのなかを(選択を保ったまま)カーソルを動かし
 どこかのセルに入力する。Targetは、入力されたセル、Selectionは、選択されているセル領域。
 そんな制御を意図しておられるのですか?
 もし、そうでなければ、(変更セル数が1つの時のみ処理対象にしておられますので)
 すべて Target で記述されたほうがわかりやすいですね。
 
 ・コードの中で "B1:B20000" や "I2:I300" と、領域の最後を固定にした記述をされていますね。
 この固定領域に意味があるなら、それでよろしいのですが、もしかして B列のデータ最終セルまでとか
 I列のデータ最終セルまでということなら、別途、その場所を動的に取得する書き方のほうが、
 データの増減(特に、増)があったときもコードを書きなおさずに済むので、おすすめです。
 
 ・これも、この程度の処理ですから、あまり違いはでませんが、Find は検索系の処理の中でも
 「もっとも重い」処理の1つです。検索が1回だけですのでワークシート関数の Match のほうが、軽いと思いますね。
 
 ・あと、転記先セル = 転記元セル という書き方をしておられますね。
 これでも、そのセルの Value が対象になりますが、わかりやすさということであれば
 転記先セル.Value = 転記元セル.Value という記述がよろしいかと。
 
 |  |