GAS
/**
* インデックス値からA1表記への変換を行います。
* 特定セルの指定または範囲の指定が可能です。
* @param {number} x1 - 開始列のインデックス
* @param {number} y1 - 開始行のインデックス
* @param {number} [x2] - 終了列のインデックス (範囲を指定する場合)
* @param {number} [y2] - 終了行のインデックス (範囲を指定する場合)
* @returns {string} - A1表記のセルまたは範囲
*/
function indexToA1Notation(x1, y1, x2, y2) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
if (x2 === undefined && y2 === undefined) {
// 特定セルの指定
var range = sheet.getRange(y1, x1);
} else {
// 範囲の指定
var range = sheet.getRange(y1, x1, y2, x2);
}
// A1表記を返す
return range.getA1Notation();
}
/**
* A1表記からインデックス値への変換を行います。
* セルまたは範囲の左上の座標と右下の座標を取得します。
* @param {string} a1Notation - A1表記のセルまたは範囲
* @returns {number[]} - [x1, y1, x2, y2] 形式の座標配列
*/
function A1ToIndexNotation(a1Notation) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// A1表記からセルまたは範囲を取得
var range = sheet.getRange(a1Notation);
// セルまたは範囲の左上の座標を取得
var x1 = range.getColumn();
var y1 = range.getRow();
var x2, y2;
if (range.getNumRows() === 1 && range.getNumColumns() === 1) {
// セルの場合はx2およびy2を未定義に設定
x2 = undefined;
y2 = undefined;
} else {
// 範囲の場合はx2およびy2を計算
x2 = x1 + range.getNumColumns() - 1;
y2 = y1 + range.getNumRows() - 1;
}
// インデックス値を配列で返す
return [x1, y1, x2, y2];
}