配列を自在に回転させる数式
エクセルで配列データを扱う際、行と列を入れ替える配置転換はTRANSPOSE関数で簡単にできますが、90度、180度、270度の回転は手間がかかります。
本記事では、Excelの強力な動的配列機能(LAMBDA、MAKEARRAY、LET等々)を組み合わせ、引数一つで右回転、左回転、180度回転を自在に実行できるカスタム数式を紹介します。
今回ご紹介する数式は、そのままセルに入力するだけで、複雑な配列操作を時間をかけずに実行できるようになります。

配列を自在に回転させる数式の全コード例
=LAMBDA(ary,n,
LET(aryR,ROWS(ary),
aryC,COLUMNS(ary),
r,MOD(n, 4),
MAKEARRAY(
IF(ISEVEN(r),aryR,aryC),
IF(ISEVEN(r),aryC,aryR),
LAMBDA(x,y,
CHOOSE(r+1,
INDEX(ary,x,y),
INDEX(ary,aryR-y+1,x),
INDEX(ary,aryR-x+1,aryC-y+1),
INDEX(ary,y,aryC-x+1)
)
)
)
)
)数式の使い方
数式全体を丸括弧 () で囲み、その直後に引数を記述して実行します。
- 引数の定義
項目 日本語名 概要 例 引数 1 対象配列 回転させたいセル範囲(例: A1:C5)または動的配列(例: B2#)を指定します。 A1:C5 引数 2 回転数 90度回転を1とした回数を指定します。 1
- 実行例と回転の指定
引数回転数 に正の値を与えると右回転、負の値を与えると左回転になります。実行したい操作 回転数 (n) の値 実行する数式の末尾 右に90度 1 (A1:C5, 1) 左に90度 -1 (A1:C5, -1) 180度 2 または -2 (A1:C5, 2) 左に270度 (右90度と同じ) -3 (A1:C5, -3)
- セルへの入力例
上記の完全版数式の末尾に、対象配列と回転数を追記し、セルに入力します。=LAMBDA(ary,n, LET(aryR,ROWS(ary), aryC,COLUMNS(ary), r,MOD(n, 4), MAKEARRAY( IF(ISEVEN(r),aryR,aryC), IF(ISEVEN(r),aryC,aryR), LAMBDA(x,y, CHOOSE(r+1, INDEX(ary,x,y), INDEX(ary,aryR-y+1,x), INDEX(ary,aryR-x+1,aryC-y+1), INDEX(ary,y,aryC-x+1) ) ) ) ) )(A1:C5,2)
この例では、A1:C5 の配列を180度回転させます。
この部分を名前定義に登録することで、その名前をカスタム関数として当該ブックでは使うことができます。




数式の解説
- 回転数の正規化と左右回転の対応
- r, MOD(n, 4):入力された
- n(回転数)を 4で割った余り (0, 1, 2, 3) に変換し、変数 r に格納します。
- この MOD の処理により、負の値(左回転)が入力されても、対応する右回転の回数に自動で変換されます(例: n=-1 は r=3 になり、これは「右270度」=「左90度」を意味します)。
- r, MOD(n, 4):入力された
- 新しい配列の次元決定 (ISEVEN)
- new_rows, IF(ISEVEN(r), aryR, aryC):
- 回転が0度 (r=0) または 180度 (r=2) の場合、r は偶数です。このとき、配列は転置せず次元はそのまま(aryR × aryC)です。
- 90度 (r=1) または 270度 (r=3) の場合、r は奇数です。このとき、配列は転置されるため、次元が入れ替わります(aryC × aryR)。
- ISEVEN(r) を使うことで、MAKEARRAYが生成すべき新しい配列のサイズを正確に決定しています。
- new_rows, IF(ISEVEN(r), aryR, aryC):
- 要素配置の分岐 (CHOOSEとINDEX)
- MAKEARRAY内のLAMBDA(x, y, ...)が、新しい配列の各セル (x, y) に配置する値を計算します。
- CHOOSE(r + 1, ...) は、r の値(0, 1, 2, 3)に応じて、以下の4つのINDEXロジックを切り替えます。
r 回転角 INDEXロジック(INDEX(ary, 行, 列)) 意味 0 0度 INDEX(ary, x, y) そのまま配置 1 右90度 INDEX(ary, aryR - y + 1, x) 行を逆順に参照し、転置 2 180度 INDEX(ary, aryR - x + 1, aryC - y + 1) 行・列を逆順に参照 3 左90度 INDEX(ary, y, aryC - x + 1) 列を逆順に参照し、転置
「aryR - インデックス + 1」というパターンを使うことで、元の配列の行や列を逆順に参照し、複雑な回転をシンプルな式で実現しています。
※本記事の作成にあたっては随所で生成AIを活用しています。全て最終的に人間が確認した後に掲載しています。
同じテーマ「エクセル関数応用」の記事
セル参照を戻り値とする関数
REDUCE+VSTACKが遅い理由と解決策
HSTACKは速い?遅い?実際に試してみた結果
条件付きMEDIAN関数を作る|LAMBDA関数で汎用〇〇IFSを実現
複数列の直積(デカルト積、クロスジョイン)
フィボナッチ、トリボナッチ、テトラナッチ数列を1数式で作成
表データから複数条件による複合抽出 (横AND/縦OR)
配列を自在に回転させる数式
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算
2段階の入力規則リスト作成:最新関数対応
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン
新着記事NEW ・・・新着記事一覧を見る
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)
IFS関数をVBAで入力するとスピルに関係なく「@」が付く現象について|VBA技術解説(2025-12-23)
数値を記号の積み上げでグラフ化する(■は10、□は1)|エクセル練習問題(2025-12-09)
AI時代におけるVBAシステム開発に関する提言|生成AI活用研究(2025-12-08)
GrokでVBAを作成:条件付書式を退避回復するVBA|エクセル雑感(2025-12-06)
顧客ごとの時系列データから直前の履歴を取得する|エクセル雑感(2025-11-28)
ちょっと悩むVBA厳選問題|エクセル雑感(2025-11-28)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.条件分岐(Select Case)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.
