実現したいこと
自動採番を行う配列数式を、組み込み関数のみで作成したい
前提
下記のように、対象の列が空白でない場合だけ番号をつけるような数式を作りたいのです。
ただし、列を挿入したときにも自動で番号をつけるようにしたく、配列数式で実装したいです。
A | B | C |
---|---|---|
(空白) | ||
1 | =AUTONUMBERING(C:C) | テキスト |
2 | テキスト | |
(空白) | ||
3 | テキスト | |
(空白) | ||
(空白) | ||
4 | テキスト |
試したこと
配列関数でなければ、問題なくできます。
(COUNTAを使用した方法)
A | B | C |
---|---|---|
(空白) | ||
1 | =IF(ISBLANK(C2), "", COUNTA(C$2:C2)) | テキスト |
2 | =IF(ISBLANK(C3), "", COUNTA(C$2:C3)) | テキスト |
=IF(ISBLANK(C4), "", COUNTA(C$2:C4)) | (空白) | |
3 | =IF(ISBLANK(C5), "", COUNTA(C$2:C5)) | テキスト |
=IF(ISBLANK(C6), "", COUNTA(C$2:C6)) | (空白) | |
=IF(ISBLANK(C7), "", COUNTA(C$2:C7)) | (空白) | |
4 | =IF(ISBLANK(C8), "", COUNTA(C$2:C8)) | テキスト |
ただし、前述のように途中に列を挿入すると、オートフィルなりコピペなりしないと数式がない行ができてしまいます。
また、GASも利用してみました。下記の関数を入力することで、一応は目的の動作ができました。
JavaScript
1/** 2 * 自動採番(空白はスキップ) 3 * @param {Array<Array<any>>} colRange - 採番対象の列 4 * @return {Array<number | string>} - 番号の配列(2次元) 5 */ 6function AUTONUMBERING(colRange) { 7 const sheet = SpreadsheetApp.getActive().getActiveSheet(); 8 const firstRow = sheet.getActiveCell().getRow() - 1; 9 const lastRow = sheet.getLastRow() - 1; 10 const numArr = []; 11 let count = 0; 12 for (let i = firstRow; i <= lastRow; i++) { 13 numArr.push([colRange[i][0] ? ++count : ""]); 14 } 15 return numArr; 16};
ただ、こちらは実行開始に2〜3秒ほどかかり、まれにLoading...
表示のまま止まることがあるので、GASは使用しないで行ければと思ってます。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/06/22 10:10 編集