エクセル練習問題
最長連続出現数(ランレングス)の算出解答

エクセルの関数・操作のちょっと難しい問題、Excelチャレンジ問題集
公開日:2013年5月以前 最終更新日:2025-11-15

最長連続出現数(ランレングス)の算出解答

エクセル練習問題解答ページです。

エクセル練習問題

最長連続出現数(ランレングス)の算出
担当 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 最大連続数
a
b
c
d

画像に示されているように、担当者(A列)ごとに、横方向(B列からR列)に並んでいる「○」が最も長く連続している数(最大連続数)を求め、T列に出力するExcel数式を作成してください。
※スピルは任意。数式が完成すればスピルにするのは簡単なので。


シンキングタイム

シンキングタイム開始


シンキングタイム終了

当サイトのコンテンツ
自分に合った、学習方法を見つけましょう。

エクセル入門
エクセル作業において必須となるショートカットキーから基本の操作、機能、そして覚えておくべき関数とその使い方までを、入門・初級・初心者向けに解説しています。エクセルには多くの関数がありますが、どの業種でも必要とされる関数に絞って紹介しています。
エクセル基本操作
エクセルの基本操作について解説。知ってそうで知らない操作や高度な操作まで。日付、時刻に関するあれこれ 数値の書式のあれこれ1.千単位、百万単位2.不要な0を表示せずに、小数点位置を揃える3.ユーザー定義書式で条件付き書式を使う4.Excel2003で、条件によりフォント色を5段階で表示する方法。
エクセル関数応用
エクセルの関数の応用技の解説。関数サンプルと必須の基本技術から応用・高等テクニックまでを紹介しています。1年後の日付、○か月後の日付 複数条件の合計・件数・サンプルデータ・複数条件の合計・複数条件の件数・スピルと新関数 入力規則のリストを、追加・削除に自動対応で作成一覧リストを使用して、「入力規則」の「リスト」を作…

ここで、じっくり勉強して下さい。

エクセル練習問題解答

では解答です。

=MAX(FREQUENCY(IF(B2:S2="○",COLUMN(B2:S2)),IF(B2:S2<>"○",COLUMN(B2:S2))))
この数式は、Excelの配列処理と統計関数を応用した、伝統的かつ高度な手法です。
  1. 連続区間の検出 (データ配列)
    IF(B2:S2="○",COLUMN(B2:S2)):セルが「○」の場合、そのセルの列番号を出力します。これは連続している「○」の位置を示す「データ配列」となります。

  2. 区切り位置の特定 (区間配列)
    IF(B2:S2<>"○",COLUMN(B2:S2)):セルが「○」ではない(空欄または他の文字)場合、そのセルの列番号を出力します。これは「○」の連続が途切れる位置を示す「区間配列」(または境界)となります。

  3. 連続数のカウント (FREQUENCY)
    FREQUENCY(データ配列, 区間配列):FREQUENCY関数は、データ配列の各要素が区間配列のどの区間に収まるかをカウントします。
    結果として、データ配列(「○」の位置)が、区間配列(「○」以外の位置)によって区切られたそれぞれの連続区間の長さ(連続数)を返します。

  4. 最大値の取得 (MAX)
    MAX(...):返された連続数のリストから最大の数を取り出し、最大連続数とします。


=MAX(SCAN(0,B2:S2,LAMBDA(a,b,IF(b="",0,a+1))))
この数式は、Excel 365などの新しいバージョンで使える動的配列関数を用いて、累積計算により連続数を求めます。
  1. 累積カウンターの定義 (SCAN & LAMBDA)
    SCAN(初期値, 範囲, LAMBDA関数):SCAN関数は、指定された範囲(B2:S2)を最初から最後まで順に処理し、累積値を保持しながらすべての途中の結果を配列で返します。
    LAMBDA(a,b, ...):ここで、aは前のセルの累積値、bは現在のセルの値です。

  2. 連続数の計算ロジック
    IF(b="", 0, a+1):
    もし現在のセルbが空欄(「○」ではない)であれば、連続が途切れたとみなし、累積値aを**0**にリセットします。
    もし現在のセルbが**「○」であれば、前の累積値aに1**を加えて、連続数をカウントし続けます。

  3. 連続数の配列の取得
    SCAN関数は、0, 1, 2, 3, 0, 1, 2, ... のように、各セルにおける現在の連続数の配列を返します。

  4. 最大値の取得 (MAX)
    MAX(...):この配列の中で最大の数値を取り出し、最大連続数とします。

=MAX(LEN(TEXTSPLIT(TEXTJOIN("",TRUE,IF(B2:S2="○","a","|")),"|")))
この数式は、データを文字列に変換し、文字列操作によって連続区間を抽出する、直感的で分かりやすい手法です。
  1. フラグの文字列化 (TEXTJOIN & IF)
    IF(B2:S2="○","a","|"):B2:S2の範囲を走査し、「○」であれば連続を表す記号として**aに、「○」でなければ区切り文字として|**に変換します。
    TEXTJOIN("",TRUE, ...):この配列を結合し、a a a | | a a a a a | ... のような一本の文字列を作成します。(例: aaa||aaaaa|...)

  2. 連続区間の分割 (TEXTSPLIT)
    TEXTSPLIT(..., "|"):作成した文字列を区切り文字の**|**で分割します。結果、連続したaの塊(例: aaa, aaaaa, aなど)を要素とする配列ができます。

  3. 各区間の長さの取得 (LEN)
    LEN(...):分割された各文字列(aの塊)の文字数(長さ)を求めます。これがそれぞれの連続数となります。

  4. 最大値の取得 (MAX)
    MAX(...):得られた連続数のリストから最大の数値を取り出し、最大連続数とします。
    この手法は、「○」が連続する部分を特定しやすい文字(aなど)に置き換え、連続が途切れる部分を区切り文字(|)に置き換えることで、問題を文字列の処理に置き換えています。

スピル数式
2番目のSCANを例にします。

=BYROW(B2:S5,LAMBDA(r,MAX(SCAN(0,r,LAMBDA(a,b,IF(b="",0,a+1))))))

他の数式も同様の方法でスピル数式に変更できます。



※本記事の作成にあたっては随所で生成AIを活用しています。全て最終的に人間が確認した後に掲載しています。





同じテーマ「エクセル練習問題解答」の記事

エクセル試験1:曜日別の平均客単価解答
エクセル試験2:所得税の計算解答
エクセル試験3:月間の所定労働時間解答
指定日付の有効最新マスタ一覧(履歴マスタ)解答
スピルの基本練習と最新関数解答
入力規則とスピルと最新関数解答
日別データから欠損月を追加して年月集計解答
偶数月に前月分と合わせて2か月分を受け取る解答
最長連続出現数(ランレングス)の算出解答
実績/予算ごとの3年間通算累計を出力解答
数値を記号の積み上げでグラフ化する(■は10、□は1)解答


新着記事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.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ