LoginSignup
6

More than 3 years have passed since last update.

Google Apps の API を使用せずに数値表記の列番号をアルファベットによる列番号へ変換する方法

Last updated at Posted at 2019-11-21

Google スプレッドシートにおける「数値列番号→アルファベット列番号」変換についてのメモ書き。

数値表記の列番号をアルファベットによる列番号に変換する方法として、 Excel と同じくセルの座標から行番号を取り除く方法がある ( list1.gas ) 。
しかしこの方法は API を使用するため、大量に変換を行う場合にボトルネックになってしまう。

list1.gas
function convertAlphabetColumnToNumeric(num) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var result = sheet.getRange(1, num).getA1Notation().replace(/\d/,'');

  return result;
}

したがって、 API を使用せずにこれらの変換処理を行えることが望ましい。

数値と、Excel の列番号風のアルファベット表記の相互変換 in JavaScript - penultの日記』に API を経由せずに直接変換するコードがあったため、ここにメモしておく ( list2.gas ) 。

list2.gas
var ExcelUtils = (function() {
  const RADIX = 26; //アルファベットの文字数
  const A = 'A'.charCodeAt(0);

  return {
    /**
     * アルファベット表記の列番号を、始まりを1とした数字にる列番号に変換する。
     * @param {string} str
     * @return {number} 
     */
    convertAlphabetColumnToNumeric: function(str) {
      var s = str.toUpperCase();
      var n = 0;
      for (var i = 0, len = s.length; i < len; i++) {
        n = (n * RADIX) + (s.charCodeAt(i) - A + 1);
      }
      return n;
    },

    /**
     * 始まりを1とした数字にる列番号を、アルファベット表記の列番号に変換する。
     * @param {number} num
     * @return {string} 
     */
    convertNumericColumnToAlphabet: function(num) {
      var n = num;
      var s = "";
      while (n >= 1) {
        n--;
        s = String.fromCharCode(A + (n % RADIX)) + s;
        n = Math.floor(n / RADIX);
      }
      return s;
    }
  };
})();

以下のようにして使う。

testcode.gas
function test() {
  Logger.log(ExcelUtils.convertAlphabetColumnToNumeric("A"));   // => 1
  Logger.log(ExcelUtils.convertAlphabetColumnToNumeric("Z"));   // => 26
  Logger.log(ExcelUtils.convertAlphabetColumnToNumeric("AA"));  // => 27
  Logger.log(ExcelUtils.convertAlphabetColumnToNumeric("ZZ"));  // => 702
  Logger.log(ExcelUtils.convertAlphabetColumnToNumeric("AAA")); // => 703
  Logger.log(ExcelUtils.convertNumericColumnToAlphabet(1));      // => "A"
  Logger.log(ExcelUtils.convertNumericColumnToAlphabet(26));     // => "Z"
  Logger.log(ExcelUtils.convertNumericColumnToAlphabet(27));     // => "AA"
  Logger.log(ExcelUtils.convertNumericColumnToAlphabet(702));    // => "ZZ"
  Logger.log(ExcelUtils.convertNumericColumnToAlphabet(703));    // => "AAA"
}

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
6