メインコンテンツへスキップ
見出し画像

Googleスプレッドシート連番Tips続き

    前回、連番Tipsを書きました。

    今回はその続きです。例えば、

    画像

    といった分類・階層型のシートは珍しくないはずです。前回紹介したコード

    =IF(ISBLANK(B2),"",ROW()-1)

    を使って、A列にコピーすると

    画像

    と数字が歯抜けに見えます…。そこで今回は

    =IF(B2="","",MAX(INDIRECT("A1:A"&ROW()-1))+1)

    をA2セルに設定し、

    画像
    画像

    A8までにコピーすると

    画像

    と行は非連続ながら、連番されます。利用場面は限られますが、知っていると便利なTipsです。

    ●解説

    =IF(B2="","",MAX(INDIRECT("A1:A"&ROW()-1))+1)

    IF, MAX, INDIRECT, ROWを組み合わせてるので難しく見えますが、やりたいことを文章にすると

    • 1つ上の行までのA列で、一番大きな数字を取得し、プラス1

    です。この条件をざっくり二分すると

    • A列で1つ上の行までを取得→INDIRECT

    • 一番大きな数字を取得→MAX

    と2つの関数で概ね処理できます。順を追って紹介して行きましょう。
    まず、A2からA6に数字を用意します。

    画像

    INDIRECTは該当セルの値を返します。A2であれば1を

    画像

    A6を指定すれば、

    画像

    該当する値、5を返します。

    画像

    INDIRECTはセルの範囲指定ができ、A2:A6を記述すれば、

    画像
    画像

    該当値を列挙します(敢えて、横に並べて表示)。
    次にMAXを使って最大値を取得。セル範囲として、B2:B6を記述すると、

    画像

    一番大きな数字5を返し、

    画像

    プラス1なら、6となります。
    では準備ができたので、関数を組み合わせ、A列の最後、A7に記載します。

    画像

    この組み合わせを使えば、

    画像

    数値が非連続(とびとび)でも、数値が1つずつ増やせます。
    汎用性を持たせるために、INDIRECTで指定するセル範囲の終点を該当行数-1に修正。

    =MAX(INDIRECT("A1:A"&ROW()-1))+1
    画像

    仕上げとして、B列にデータがなければ空白で、B列にデータがあれば採番するというIF文で括れば、上述の

    =IF(B2="","",MAX(INDIRECT("A1:A"&ROW()-1))+1)

    が完成です。

    画像

    さいごに

    課題が1つ残ってます。本当はArrayFormulaを使って、縦列のコピーを不要にしたかったものの、上手く設定できず。。。
    もっとスプレッドシートの修行をせねば

     
     
     
    クラウド企業(米系)勤務。デジタルガジェットの収集・活用が趣味 週末はランニングと🍺🍷🍶、長めの休暇は国内外問わずに旅行 訪れた国は29カ国、世界遺産検定2級、京都・観光文化検定試験3級 ※Amazonアソシエイト参加中

    あなたへのおすすめ