行番号・列番号でセルを指定する
This content is not available in your language yet.
ここではオフィススクリプトを使って、B2のような A1 形式の番地ではなく、行番号・列番号でセルや範囲を指定する方法を解説します。
ループの中で対象のセルを順番に変えたい場合など、位置を数値で扱いたい場面で役立ちます。
1 つのセルを指定する
Section titled “1 つのセルを指定する”利用するメソッド
Section titled “利用するメソッド”ExcelScript.Worksheetオブジェクトに含まれている、getCellメソッドを使用します。
/** * @param row 行番号(0 から始まる) * @param column 列番号(0 から始まる) */ExcelScript.Worksheet.getCell(row: number, column: number): Range;以下の表の小さい数字が、getCellに指定する行番号・列番号です。シート上の行番号や列の順番(A 列 = 1 列目)と 1 つずれている点に注意してください。
| Aindex 0 | Bindex 1 | Cindex 2 | Dindex 3 | |
|---|---|---|---|---|
| 1index 0 | 商品 | 単価 | 数量 | |
| 2index 1 | リンゴ | 120 | 3 | |
| 3index 2 | ミカン | 80 | 5 | |
| 4index 3 |
- Sheet1
C2getCell(1, 2) → C2(VBA の Cells(2, 3))
Small numbers are zero-based indexes.
サンプルコード
Section titled “サンプルコード”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!のようにシート名が含まれます。
範囲を基準にセルを指定する
Section titled “範囲を基準にセルを指定する”ExcelScript.RangeオブジェクトにもgetCellメソッドがあります。
ExcelScript.Range.getCell(row: number, column: number): Range;こちらはシートのA1ではなく、範囲の左上のセルを基準に位置を数えます。例えばB2:D4の範囲に対してgetCell(1, 1)を実行すると、B2から 1 行下・1 列右にあるC3セルが返されます。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | |||||
| 2 | |||||
| 3 | |||||
| 4 | |||||
| 5 |
- Sheet1
B2:D4基準にする範囲(getRange('B2:D4'))C3range.getCell(1, 1) → C3
指定した位置は範囲の外になっても構いません(シートの中に収まっている必要があります)。getRange('B2:D4').getCell(3, 0)は、範囲の外にあるB5セルを返します。
範囲を指定する
Section titled “範囲を指定する”利用するメソッド
Section titled “利用するメソッド”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を表します。
| Aindex 0 | Bindex 1 | Cindex 2 | Dindex 3 | |
|---|---|---|---|---|
| 1index 0 | ||||
| 2index 1 | ||||
| 3index 2 | ||||
| 4index 3 | ||||
| 5index 4 |
- Sheet1
A2:B4getRangeByIndexes(1, 0, 3, 2) → A2:B4A2開始位置(startRow: 1, startColumn: 0)
Small numbers are zero-based indexes.
サンプルコード
Section titled “サンプルコード”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);}| Aindex 0 | Bindex 1 | Cindex 2 | Dindex 3 | Eindex 4 | |
|---|---|---|---|---|---|
| 1index 0 | |||||
| 2index 1 | 1 | 2 | 3 | ||
| 3index 2 | 2 | 4 | 6 | ||
| 4index 3 | 3 | 6 | 9 | ||
| 5index 4 |
- Sheet1
サンプルコードを実行した後のシート
B2:D4getRangeByIndexes(1, 1, 3, 3) → B2:D4
Small numbers are zero-based indexes.