いきなり答える備忘録

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

(Python in Excel)順列を全通り生成する方法

 Excelで複数要素の並べ替えパターンをすべて生成・列挙する例です。ワークシート関数では困難ですが2024年秋に利用可能となったPython in Excelを使って簡単に実現できます。

手順

 次の画像では、B2:D2の範囲に入力されている3つの要素A,B,Cを並べ替えた6つのパターンをすべて書き出しています。

 手順は次の通りです。

  1. F2セルに次のコードを入力します。具体的にはセルに「=PY(」と入力するか数式タブの「Pythonの挿入」をクリックしてセルが変化したところでコードを入力します。

    import itertools
    
    items = xl("B2:D2").unstack()
    list(itertools.permutations(items))

  2. 数式バーの左側に表示されるアイコンをクリックして選択肢から「Excelの値」を選択します(アイコンはに変化します)。
  3. Ctrl+Enterキーで確定すれば完了です。

 なお、2番と3番は逆でもいいです。いったんセルの表示が「[PY]list」のようになりますがをクリックして選択肢から「Excelの値」を選択することで値が表示されます。


 コードの説明ですが、各種の繰り返し処理に便利なitertoolsモジュールを使っています。最初のシートのA1セルに記しておけば他の箇所ではimportを省略できますが、常に記しておいた方が無難かと思います。
 参照したセルのデータはpandas.DataFrameとして取得されます。これは(参照範囲が1行や1列でも)2次元のデータとなるのでunstackでフラットにし(pandas.Seriesになります)、順列を生成するitertools.permutationsを適用しています。変数への代入を省けば1行で済みますが、あえて分けました。



 なお、permutationsの第2引数で抽出する要素数を指定できます。
 次の画像は4つの要素から2つを出して並べ替える全パターンを取得している例です。