Excelで、数値のすべての約数を求めて列挙する方法についてです。
- REDUCE/LAMBDA関数を使って、数値の約数をすべて求めることができます。
手順
画像では、D3セルに式を入力して下方にコピーすることにより、B列に記録された各数値のすべての約数を求めています。
D3セル(下方にコピー)
=TRANSPOSE(SORT(UNIQUE( REDUCE(1,SEQUENCE(SQRT(B3)), LAMBDA(a,b,IF(MOD(B3,b),a,VSTACK(a,b,B3/b))) ) )))
「1」をaの初期値(配列)にしておき、「1から『B3の平方根(小数切捨)』までの整数の配列」をbとしています。
bの値をそれぞれチェックし、B3の約数であったら(B3をbで割った余りが0だったら)bとB3/b(いずれもB3の約数)を配列aに追加していきます。
約数には重複するものも出るのでUNIQUEで重複を除き、ソートと転置を行って完了です。
SEQUENCEで生成する配列については2からの「SQRT(B3)-1」個にするのが正確ですが、式が短く済む方を優先しました。また、VSTACKではなくHSTACKで進めればTRANSPOSEを省略できますがSEQUENCEやSORTなどの引数がかえって面倒になるのでこのようにしました。
当然約数の個数も求められます。
ソートや転置は要りませんので、次のようになります。
D3セル(下方にコピー)
=ROWS(UNIQUE( REDUCE(1,SEQUENCE(SQRT(B3)), LAMBDA(a,b,IF(MOD(B3,b),a,VSTACK(a,b,B3/b))) ) ))