前回はユーザー定義関数を作ろうとして失敗したわけですが、
VBAを使わずにワークシートだけで結果を求める方法があることに気づきました。


その方法とは、ずばり循環参照です。
Excelで循環参照を使う為には、反復計算の上限を決めておかなくてはいけません。
それをしないと計算がループしてしまいエラーとなります。
ツール→オプションからとりあえず10000にします。
計算方法は自動のままです。


次にスイッチとカウンターを作ります。
ここでは、スイッチをE1セル、カウンターをF1セルとします。
F1の数式

=IF(E1=0,0,F1+1)

これは、E1に0なら動かず。それ以外(例えば1)を入れると10000までカウントする循環参照です。



次に、図のような配置の場合D1セルの数式を

=IF(F$1=ROW()*100,Sheet2!B$1,D1)

にして必要な行だけ下にコピーします。


次にSheet2のA1セルの数式を

=INDEX(Sheet1!A:A,(Sheet1!F1-1)/100+1)

A2セルの数式を

=INDEX(Sheet1!B:B,(Sheet1!F1-1)/100+1)

A3セルの数式を

=INDEX(Sheet1!C:C,(Sheet1!F1-1)/100+1)

これで完成です。


実行するときは、スイッチとなるE1セルに1を入力するとカウンターが動いてD列に結果が出るはずです。


もしも重い場合は反復回数を減らすことで対処できます。
数式が複雑であるということで、100回分の反復で1行を処理して、100行まで対応ということで10000にしています。
数式が複雑でない場合や行数が少ない場合は減らすことで対応できます。
http://q.hatena.ne.jp/1282264337