フィボナッチ、トリボナッチ、テトラナッチ数列を1数式で作成
フィボナッチ数列、トリボナッチ数列、テトラナッチ数列は、いずれも前の項の和によって次の項が定義される数列ですが、何項前までの和を取るかが異なります。
| 数列の名称 | 定義(次の項) | 初期値の例 | 数列の例(初期値を含む) |
| フィボナッチ | 直前の 2項 の和 | 0, 1 | 0, 1, 1, 2, 3, 5, 8, 13, … |
| トリボナッチ | 直前の 3項 の和 | 0, 0, 1 | 0, 0, 1, 1, 2, 4, 7, 13, … |
| テトラナッチ | 直前の 4項 の和 | 0, 0, 0, 1 | 0, 0, 0, 1, 1, 2, 4, 8, 15, … |
以下で紹介している数式は、あくまで1例です。
いろいろな数式の書き方があるので、ぜひ挑戦してみてください。
フィボナッチ、トリボナッチ、テトラナッチ数列を1数式

=LAMBDA(n,t,
LET(
fn,LAMBDA(n,m,
REDUCE(
MAKEARRAY(
m,1,
LAMBDA(r,c,--(r=m))
),
SEQUENCE(n-m),
LAMBDA(x,y,
VSTACK(x,SUM(TAKE(x,-m)))
)
)
),
DROP(REDUCE("",t,LAMBDA(x,y,HSTACK(x,fn(n,y)))),,1))
)(A3,B2:D2)数式の説明
| 関数名 | セル参照 | 役割 |
| 外側の LAMBDA | (A3, B2:D2) | 数列の項数($n$)と種類($t$)を受け取るメイン関数。 |
| LET | 計算過程で使用するカスタム関数 fn を定義し、最終的な計算を実行します。 | |
| fn | 任意の k(m と表記)のk-ボナッチ数列を生成するカスタム LAMBDA 関数。 | |
| REDUCE (内側) | 数列の初期値から開始し、1項ずつ計算して積み重ねる反復処理を実行。 | |
| REDUCE (外側) | 種類のリスト t(B2:D2)を順に処理し、各数列を横に連結(HSTACK)します。 |
1. カスタム関数 fn の定義
fn, LAMBDA(n,m,REDUCE(初期値生成, 繰り返し回数, 反復処理))
MAKEARRAY(m,1,LAMBDA(r,c,--(r=m)))
- これは m 行 1列の配列を作成します。
- LAMBDA(r, c, …) は、行番号 r が m と等しい場合(配列の最終行)に 1 を、それ以外に 0 を設定します。
- これが REDUCE の初期値 x となります。
SEQUENCE(n-m), LAMBDA(x,y, VSTACK(x,SUM(TAKE(x,-m))))
- 繰り返し回数 (SEQUENCE(n-m)): 初期値が m 項あるため、残りの n-m 項を生成します。
- 反復処理 (LAMBDA(x, y, …))
- x は現在の数列の配列です。
- TAKE(x, -m): 配列 x の末尾 m 個の項を取り出します。
- SUM(…): その m 個の項の和(これが次の項)を計算します。
- VSTACK(x, …): 現在の配列 x の下に新しい項を結合(積み重ね)します。
DROP(REDUCE("", t, LAMBDA(x,y, HSTACK(x, fn(n,y)))),,1)
- REDUCE("", t, …)
- 初期値 (""): 空の文字列から処理を開始します。
- 反復処理 (LAMBDA(x, y, …))
- x はこれまでに生成され横に連結された数列の配列です。
- y は B2:D2 の要素(種類 m)です。
- HSTACK(x, fn(n, y)): 既存の配列 x の右に、新しく fn で生成した数列を結合します。
- DROP(…,, 1)
- HSTACK の初期値として空文字列 ("") を使ったため、出力の最初の列が空欄になります。
- DROP(配列,, 1) は、その最初の1列を削除する(ドロップする)役割を果たし、結果として生成された数列だけを返します。
Grokの作成した数式:似たような数式なので参考まで
=LET(
g,LAMBDA(o,l,
REDUCE(
VSTACK(
MAKEARRAY(o-1,1,LAMBDA(r,c,0)),
1
),
SEQUENCE(l-o),
LAMBDA(a,_,VSTACK(a,SUM(TAKE(a,-o))))
)
),
inputs,B2:D2,
DROP(
REDUCE("",inputs,LAMBDA(acc,o,HSTACK(acc,g(o,20)))),
,1
)
)数式の解説:Grok自身による
- g: LAMBDA関数で、次数oと長さlの数列を作成。初期配列(o-1個の0と1)からREDUCEで直前o個の和を追加。
- inputs: B2:D2の次数値。
- REDUCE: inputsをループし、各oでg(o,20)をHSTACKで結合。初期値""をDROPで除去。
これでB3に貼り付けると、20行の数列が横にスピルします。
同じテーマ「エクセル関数応用」の記事
QRコード、バーコード作成の覚え書き
GROUPBY関数が最強すぎる!Excelの集計作業が爆速に!
セル参照を戻り値とする関数
REDUCE+VSTACKが遅い理由と解決策
HSTACKは速い?遅い?実際に試してみた結果
条件付きMEDIAN関数を作る|LAMBDA関数で汎用〇〇IFSを実現
複数列の直積(デカルト積、クロスジョイン)
フィボナッチ、トリボナッチ、テトラナッチ数列を1数式で作成
表データから複数条件による複合抽出 (横AND/縦OR)
配列を自在に回転させる数式
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算
新着記事NEW ・・・新着記事一覧を見る
最長連続出現数(ランレングス)の算出|エクセル練習問題(2025-11-15)
SQL基礎問題11:連続期間の開始月と終了月を抽出|SQL入門(2025-11-14)
セル数式における「再帰」の必要性|エクセル雑感(2025-11-10)
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算|エクセル関数応用(2025-11-10)
配列を自在に回転させる数式|エクセル関数応用(2025-11-09)
非正規化(カンマ区切り)の結合と集計:最適な手法は?|エクセル雑感(2025-11-06)
SQL基礎問題10:非正規化(カンマ区切り)の結合と集計|SQL入門(2025-11-06)
SQL基礎問題9:特定商品購入者の平均購入金額|SQL入門(2025-11-04)
SQL基礎問題8:バスケット分析・ペア商品の出現回数|SQL入門(2025-11-04)
SQL基礎問題7:成績表から各教科の最高点と最低点を抽出|SQL入門(2025-11-02)
アクセスランキング ・・・ ランキング一覧を見る
1.生成AIパスポート試験 練習問題(四肢択一式)|生成AI活用研究
2.最終行の取得(End,Rows.Count)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.RangeとCellsの使い方|VBA入門
7.FILTER関数(範囲をフィルター処理)|エクセル入門
8.日本の祝日一覧|Excelリファレンス
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.セルのクリア(Clear,ClearContents)|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.
