また面白そうな課題をお借りしました。
今回作成したフローをGitHubで公開しました。下記リンク先からダウンロードしてください。
github.com
- 課題の内容
- 今回は概要編です
- 作成したフロー
- 実行イメージ
- このフローのポイント
- フローの処理ロジックについては次回の解説で
- このフローをGitHubで公開しました。(再掲)
- 追記:「解説編その1」を投稿しました。
課題の内容
内容はこちらです。
#エクセルクイズ
— 遊牧家族/yuuboku (@yuuboku) September 14, 2020
整数が昇順に並んでいますが、完全な連番ではなくところどころ抜けがあります。
これを「,」区切りで連結してA11セルに表示してください。ただし、完全な連番になっている部分は「先頭~末尾」の形式としてください。
(Excel2019推奨) pic.twitter.com/lYwO1JQcRn
今回は概要編です
今回はフローの概要と実行結果についてお話します。フローのロジック解説については別の回で話をします。
作成したフロー
アクションの設定を閉じた状態のフロー図
開いた状態のフロー図
実行イメージ
手動トリガーでフローを実行します。
整形対象の数字の並びは下図のアクションで定義しています。createArray 関数を使って配列にします。
今回のフローでは数字をあらかじめ昇順に並べています。
createArray(1,2,3,4,7,9,11,14,15,16,18,19,21,22)
手動トリガーでフローを実行します。
お題の条件通りの出力になりました。連番になっていた数字の並びが「先頭~末尾」とい形に変わりました。
(`・ω・´)シャキーン
1~4,7,9,11,14~16,18~19,21~22
このフローのポイント
「一時的なデータを格納する変数」をうまく使うこと
このフローのポイントは、一時的なデータの格納場所を活用することで配列内の要素の並びが特定の条件に一致しているかどうか判定しているところです。
この手法は下記回で図を使って詳しく説明しています。
この回では、CSV内のカンマが「区切り文字」なのかそれとも「データに含まれる文字」なのかを判定するために一時領域を使用しています。
wataruf.hatenablog.com
同じ手法をこちらの回でも使っています。
wataruf.hatenablog.com
処理の主な工程
2つの繰り返し処理で目的を実現している
このフローでは「2つの繰り返し処理(Apply to each)」と「結合」アクションで配列の整形を実現しています。
繰り返し処理①「連番になっている箇所を配列内配列に置き換える」
まずひとつめの繰り返し処理です。ここでは数字の並びのうち連番になっている箇所を配列に置き換えています。
この処理によって、この配列が、、、
[1,2,3,4,7,9,11,14,15,16,18,19,21,22]
こうなります。連番になっている箇所が配列に置き換わりました。
["[1,2,3,4]","[7]","[9]","[11]","[14,15,16]","[18,19]","[21,22]"]
繰り返し処理が進むにつれて何が起きているか分かるように動画で表してみました。
それぞれの値がどう変わっているかに注目してください。
- (繰り返し処理の)現在の値
- 一時配列
- 連続する数字の並びを子配列にした配列
繰り返し処理②「配列内配列を『先頭~末尾』の形式に置き換える」
次がふたつめの繰り返し処理です。この処理では、ひとつめの繰り返し処理で作成した配列内配列を『先頭~末尾』の形式に置き換えます。
この処理によって、この配列が、、、
["[1,2,3,4]","[7]","[9]","[11]","[14,15,16]","[18,19]","[21,22]"]
こうなります。
["1~4",7,9,11,"14~16","18~19","21~22"]
こちらも動画にしてみました。それぞれの値がどう変わっているかに注目してください。
- (繰り返し処理の)現在の値
- 整形後の配列
「結合」アクション
最後に、繰り返し処理②で出力された配列を結合アクションを実行します。これで目的の文字列が取得できました。
1~4,7,9,11,14~16,18~19,21~22
フローの処理ロジックについては次回の解説で
今回はここまでです。また数日以内に解説編を投稿する予定です。
このフローをGitHubで公開しました。(再掲)
フローをGitHubで公開しました。下記リンク先からダウンロードしてください。この投稿の冒頭で記載しているリンクと同じです。
github.com
今回は以上です。