OfficeScript(オフィススクリプト)で最終行と最終列を取得する方法を紹介します。
テーブルを1行目から順番に処理していくときなどに利用できます。ここでは途中に空欄があってもスキップして使用している一番端の行番号や列番号を取得するコードを紹介します。
紹介する2つ方法は それぞれ取得できるものが違うので状況に応じて使い分けてください
・Ctrl +Up キー操作方式
・getUsedRange方式
最終行と最終列の取得(Ctrl + Up方式)
こちらでは最終行と最終列の取得の方法として下記のようなステップをとります。
この方法により途中にある空白セルや書式変更してあるセルがあったとしても無視して最終セルが取得できます。
- Excelワークシートの最大行数または最大列数へ移動
- キー操作でCtrl + Upで移動する
- 移動したセルのインデックスを取得
- 行番号・列番号に変換するために + 1 (インデックスは0始まりのため)
最終行を取得
例としてSheet1のA列の最終行を取得するスクリプトはこちらです。
※最後にあるconsole.log(lastRow)は結果確認用のものなので実際使うときは不要です。
スクリプト内にあるシート名や列名は任意で変更してください
function main(workbook: ExcelScript.Workbook) {
// シート名を指定してワークシートを取得
const sheet = workbook.getWorksheet('Sheet1'); // 任意のシート名を設定
//最終行を取得する列を指定(例、A、Bなど)
let targetColumn = "A" // 任意の列を設定
// 一番下のセルから上方向に移動して最終行を取得
let lastRow = sheet.getRange(targetColumn + "1048576").getRangeEdge(ExcelScript.KeyboardDirection.up).getRowIndex() + 1;
console.log(lastRow);
}
最終列を取得
例としてSheet1の1行目の最終列を取得するスクリプトはこちらです。
※最後にあるconsole.log(lastColumn)は結果確認用のものなので実際使うときは不要です。
スクリプト内にあるシート名や行番号は任意で変更してください。
function main(workbook: ExcelScript.Workbook) {
// シート名を指定してワークシートを取得
const sheet = workbook.getWorksheet('Sheet1'); // 任意のシート名を設定
//最終列を取得する行を指定(例、1、2など)
let targetRow = 1 // 任意の行を設定
// 一番右端のセルから左方向に移動して最終列を取得
let lastColumn = sheet.getRange("XFD" + targetRow).getRangeEdge(ExcelScript.KeyboardDirection.left).getColumnIndex() + 1;
console.log(lastColumn);
}
正しく最終行・最終列が取得できるか検証
テーブルの途中に空白があったり、テーブルの下側に書式変更してあるセルがあったとしても正しく最終行が取得できるか下図のデータを試してみます。
上記に記載のスクリプトを実施すると、正しく値が入っている行番号3を取得できています。
Sponsored link
最終行と最終列の取得(getUsedRange方式)
こちらでは最終行と最終列の取得の方法として下記のようなステップをとります。
- 列また行の使用されている範囲を取得 ( getUsedRange )
- 取得範囲での最終セルのインデックスを取得 ( getLastCell().getRowIndex() )
- 行番号・列番号に変換するために + 1 (インデックスは0始まりのため)
最終行を取得
例としてSheet1のA列の最終行を取得するスクリプトはこちらです。
※最後にあるconsole.log(lastRow)は結果確認用のものなので実際使うときは不要です。
スクリプト内にあるシート名や列名は任意で変更してください
function main(workbook: ExcelScript.Workbook) {
// シート名を指定してワークシートを取得
const sheet = workbook.getWorksheet('Sheet1'); // 任意のシート名を設定
// 指定列の使用されている範囲を取得(列指定の例、A:A、B:Bなど)
let columnRange = sheet.getRange("A:A").getUsedRange(); // 任意の列を設定
// 指定範囲の最終行を取得
let lastRow = columnRange.getLastCell().getRowIndex() + 1;
console.log(lastRow);
}
最終列を取得
例としてSheet1の1行目の最終列を取得するスクリプトはこちらです。
※最後にあるconsole.log(lastColumn)は結果確認用のものなので実際使うときは不要です。
スクリプト内にあるシート名や行番号は任意で変更してください。
function main(workbook: ExcelScript.Workbook) {
// シート名を指定してワークシートを取得
const sheet = workbook.getWorksheet('Sheet1'); // 任意のシート名を設定
// 指定行の使用されている範囲を取得(行指定の例、1:1、2:2など)
let columnRange = sheet.getRange("1:1").getUsedRange(); // 任意の行を設定
// 指定範囲の最終列を取得
let lastColumn = columnRange.getLastCell().getColumnIndex() + 1;
console.log(lastColumn);
}
書式変更がある最終行・最終列が取得できるか検証
こちらの方法ではテーブルの下側に書式変更したセルがある場合、その書式変更したセルが最終行として取得されます。正しく最終行が取得できるか下図のデータを試してみます。
上記に記載のスクリプトを実施すると、正しく書式変更があるセルの行番号4を取得できています。
Sponsored link
途中の空白行と空白列を取得
こちらではテーブルの途中に空白セル・空白行の行番号や列番号を取得する方法を紹介します。
処理のステップは下記のとおりです。
- テーブル先頭セルに移動する
- キー操作でCtrl + Downで移動する
- 移動したセルのインデックスを取得(空白セルのひとつ前のセルへ)
- 行番号・列番号に変換するために + 2 (インデックスは0始まりのため)
空白行を取得
例としてSheet1のA列の空白行の行番号を取得するスクリプトはこちらです。
空白行のひとつ前の行番号を取得したい場合は +2 の部分を +1 に変更してください。繰り返し処理などではこちらの番号をよく使うと思います。
スクリプト内にあるシート名・行番号・列は任意で変更してください
function main(workbook: ExcelScript.Workbook) {
// シート名を指定してワークシートを取得
const sheet = workbook.getWorksheet('Sheet1'); // 任意のシート名を設定
//テーブルの先頭行を指定
let startRow = 1 // 任意の行を設定
//空白行を取得する列を指定(例、A、Bなど)
let targetColumn = "A" // 任意の列を設定
// 一番下のセルから上方向に移動して空白行を取得
let blankRow = sheet.getRange(targetColumn + startRow).getRangeEdge(ExcelScript.KeyboardDirection.down).getRowIndex() + 2;
console.log(blankRow);
}
※最後にあるconsole.log(blankRow)は結果確認用のものなので実際使うときは不要です。
空白列を取得
例としてSheet1の1行目の最終列を取得するスクリプトはこちらです。
空白列のひとつ前の列を取得したい場合は +2 の部分を +1 に変更してください。
スクリプト内にあるシート名・行番号・列は任意で変更してください。
function main(workbook: ExcelScript.Workbook) {
// シート名を指定してワークシートを取得
const sheet = workbook.getWorksheet('Sheet1'); // 任意のシート名を設定
//テーブルの先頭列を指定
let startColumn = "A" // 任意の列を設定
//空白列を取得する行を指定(例、1、2など)
let targetRow = 1 // 任意の行を設定
// 一番右端のセルから左方向に移動して空白列を取得
let blankColumn = sheet.getRange(startColumn + targetRow).getRangeEdge(ExcelScript.KeyboardDirection.right).getColumnIndex() + 2;
console.log(blankColumn);
}
※最後にあるconsole.log(blankColumn)は結果確認用のものなので実際使うときは不要です。
コメント