LoginSignup
0
0

Google スプレッドシート & GAS インデックス値←→A1表記 切替関数

Posted at
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];
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0