日付などで時々あるかもしれないけど、連続する日付をまとめて表記したい時。「3つ以上連続する数字」は「-」で間の数字をまとめて、それ以外は「,」で区切る。
こんな感じ。「2」「3」は連続する数が2つだから「,」で区切っている。なかなか難しそうに思えるかもしれないが、順を追ってやるとそうでもない。
まず元の値が並んでいるA列から重複を省いた昇順の数値を抽出する。
C1:=FILTER(A:A,A:A) D1:=UNIQUE(C1#) E1:=SORT(D1#)
続いて、E列と上下比較するためのデータを用意する。といっても VSTACK関数で上下に「9^9(大きい値ならなんでもいい)」をくっつけるだけ。
F1:=VSTACK(9^9,E1#,9^9)
次はE列とF列を比較する式を作る。
G1:=IFERROR(IF(DROP(E1#,1)=E1#+1,IF(DROP(F1#,-2)=E1#-1,"",E1#&IF(DROP(F1#,3)=E1#+2,"-",",")),E1#&","),E1#)
ここまでくれば後は、CONCAT関数で結合するだけ。
H1:=CONCAT(G1#)
これを一つにまとめるとこうなる。
=LET(
r,SORT(UNIQUE(FILTER(A:A,A:A<>""))),
rr,VSTACK(9^9,r,9^9),
a,IF(DROP(rr,3)=r+2,"-",","),
b,IF(DROP(rr,-2)=r-1,"",r&a),
c,IF(DROP(r,1)=r+1,b,r&","),
CONCAT(IFERROR(c,r))
)
「2-3」となっていいならもうちょっとだけ簡単。
=LET(
r,SORT(UNIQUE(FILTER(A:A,A:A<>""))),
a,IF(DROP(VSTACK(9^9,r),-1)=r-1,"",r&"-"),
b,IF(DROP(r,1)=r+1,a,r&","),
CONCAT(IFERROR(b,r))
)
あんまり変わらんかな。