コンテンツにスキップ

行番号・列番号でセルを指定する

ここではオフィススクリプトを使って、B2のような A1 形式の番地ではなく、行番号・列番号でセルや範囲を指定する方法を解説します。

ループの中で対象のセルを順番に変えたい場合など、位置を数値で扱いたい場面で役立ちます。

ExcelScript.Worksheetオブジェクトに含まれている、getCellメソッドを使用します。

/**
* @param row 行番号(0 から始まる)
* @param column 列番号(0 から始まる)
*/
ExcelScript.Worksheet.getCell(row: number, column: number): Range;

以下の表の小さい数字が、getCellに指定する行番号・列番号です。シート上の行番号や列の順番(A 列 = 1 列目)と 1 つずれている点に注意してください。

Aインデックス 0Bインデックス 1Cインデックス 2Dインデックス 3
1インデックス 0商品単価数量
2インデックス 1リンゴ1203
3インデックス 2ミカン805
4インデックス 3
  • Sheet1
  • C2getCell(1, 2) → C2(VBA の Cells(2, 3))

小さい数字は 0 から始まるインデックスです。

行番号・列番号でセルを指定するサンプル
function main(workbook: ExcelScript.Workbook) {
const sheet = workbook.getActiveWorksheet();
/** 2 行目・3 列目(C2)のセル */
const cell = sheet.getCell(1, 2);
console.log(cell.getAddress()); // Sheet1!C2
console.log(cell.getValue()); // 3
}

getAddressメソッドを使うと、取得したセルの番地を確認できます。返される番地には、Sheet1!のようにシート名が含まれます。

ExcelScript.RangeオブジェクトにもgetCellメソッドがあります。

ExcelScript.Range.getCell(row: number, column: number): Range;

こちらはシートのA1ではなく、範囲の左上のセルを基準に位置を数えます。例えばB2:D4の範囲に対してgetCell(1, 1)を実行すると、B2から 1 行下・1 列右にあるC3セルが返されます。

ABCDE
1
2
3
4
5
  • Sheet1
  • B2:D4基準にする範囲(getRange('B2:D4'))
  • C3range.getCell(1, 1) → C3

指定した位置は範囲の外になっても構いません(シートの中に収まっている必要があります)。getRange('B2:D4').getCell(3, 0)は、範囲の外にあるB5セルを返します。

ExcelScript.Worksheetオブジェクトに含まれている、getRangeByIndexesメソッドを使用します。

/**
* @param startRow 開始行の行番号(0 から始まる)
* @param startColumn 開始列の列番号(0 から始まる)
* @param rowCount 行数
* @param columnCount 列数
*/
ExcelScript.Worksheet.getRangeByIndexes(
startRow: number,
startColumn: number,
rowCount: number,
columnCount: number
): Range;

開始位置は 0 から始まる番号で指定しますが、3 番目・4 番目の引数は終了位置ではなく行数・列数である点に注意してください。

例えばgetRangeByIndexes(1, 0, 3, 2)は、2 行目・1 列目(A2)から 3 行 × 2 列の範囲、つまりA2:B4を表します。

Aインデックス 0Bインデックス 1Cインデックス 2Dインデックス 3
1インデックス 0
2インデックス 1
3インデックス 2
4インデックス 3
5インデックス 4
  • Sheet1
  • A2:B4getRangeByIndexes(1, 0, 3, 2) → A2:B4
  • A2開始位置(startRow: 1, startColumn: 0)

小さい数字は 0 から始まるインデックスです。

B2セルから 3 行 × 3 列の範囲に、九九の表の一部を書き込むサンプルコードです。

行番号・列番号で範囲を指定するサンプル
function main(workbook: ExcelScript.Workbook) {
const sheet = workbook.getActiveWorksheet();
/** 書き込む行数 */
const rowCount = 3;
/** 書き込む列数 */
const columnCount = 3;
/** 1×1 から 3×3 までの掛け算の結果 */
const values = Array.from({ length: rowCount }, (_, i) =>
Array.from({ length: columnCount }, (_, j) => (i + 1) * (j + 1))
);
/** B2 セル(行番号 1・列番号 1)から 3 行 × 3 列の範囲 = B2:D4 */
const range = sheet.getRangeByIndexes(1, 1, rowCount, columnCount);
range.setValues(values);
}
Aインデックス 0Bインデックス 1Cインデックス 2Dインデックス 3Eインデックス 4
1インデックス 0
2インデックス 1123
3インデックス 2246
4インデックス 3369
5インデックス 4
  • Sheet1

サンプルコードを実行した後のシート

  • B2:D4getRangeByIndexes(1, 1, 3, 3) → B2:D4

小さい数字は 0 から始まるインデックスです。