いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)すべての約数を求める

 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)))
)
))