🌊

GAS・スプレッドシートにゼロ埋め数字を転記する方法

2024/10/20に公開

ゼロ埋めの数字(文字列)、文字列、数値の配列データを用意します。

[ [ '00001', 'yamada', 27, true ],
  [ '00003', 'suzuki', 33, false ],
  [ '00029', 'tanaka', 50, false ],
  [ '00501', 'harada', 60, false ],
  [ '00773', 'kaneko', 29, false ] ]

GASを使って配列データをスプレッドシートに転記します。

  let data = [[ '00001', 'yamada', 27, true ],
              [ '00003', 'suzuki', 33, false ],
              [ '00029', 'tanaka', 50, false ],
              [ '00501', 'harada', 60, false ],
              [ '00773', 'kaneko', 29, false ]];
  
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let sheet = ss.getActiveSheet();

  sheet.getRange(2, 1, data.length, data[0].length).setValues(data);

転記された結果を見ると、文字列の00001が数字の1に変換されてしまいます。
セル値を見ても数字になっています。
配列上では文字列としての扱いだったのが、セルに転記すると数値に自動変換されてしまうため、困ることが多々あります。

ゼロ埋め数字を文字列として表示させるには、主に2種類の方法があります。

  1. 計算式としてセル値を入力する。
  2. 書式設定をしてからセル値を入力する。

1. 計算式でセル値を入力

セル値="00001"として入力すると、文字列としての扱いになり、頭のゼロも表示させる事が出来ます。

サンプルコード

  let data0 = [[ '00001', 'yamada', 27, true ],
              [ '00003', 'suzuki', 33, false ],
              [ '00029', 'tanaka', 50, false ],
              [ '00501', 'harada', 60, false ],
              [ '00773', 'kaneko', 29, false ]];

  // 配列で指定Keyを書き換える
  let data = data0.map(emp => {
    return Object.keys(emp).map(key => {
      if (key == 0) {
        return `="${emp[key]}"`;
      } else {
        return emp[key];
      }
    });

  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let sheet = ss.getActiveSheet();

  // スプレッドシートに一括書き込み
  sheet.getRange(2, 1, data.length, data[0].length).setValues(data);

2. 書式設定をしてからセル値を入力する。

書式設定を行うには、対象範囲を選択して、メニューの表示形式 > 数字 > 書式なしテキストを選択します。

書式設定を行った箇所にゼロ埋めで数字入力すると、期待通りの表示になります。

この作業をGASで行うには、setNumberFormat(numberFormat)で書式設定を行ってからシートに書き込みを行う手順で再現出来ます。
https://developers.google.com/apps-script/reference/spreadsheet/range?hl=ja#setnumberformatnumberformat

サンプルコード

  let data = [[ '00001', 'yamada', 27, true ],
              [ '00003', 'suzuki', 33, false ],
              [ '00029', 'tanaka', 50, false ],
              [ '00501', 'harada', 60, false ],
              [ '00773', 'kaneko', 29, false ]];
  
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let sheet = ss.getActiveSheet();

  // A2〜A6セルを「書式なしテキスト」に書式設定
  sheet.getRange(2, 1, data.length, 1).setNumberFormat('@');

  // スプレッドシートに一括書き込み
  sheet.getRange(2, 1, data.length, data[0].length).setValues(data);

Discussion