【GAS】sliceで文字列を切り出す方法|マイナス指定・substringとの違い・配列のsliceまで

受講料の最大70%の給付金あり
経済産業省リスキリングを通じたキャリアアップ支援事業対象
サムライエンジニア「生成AI」コース

GASで文字列を切り出すときは、sliceを使います。よく使う書き方は次の3つです。

やりたいこと書き方「北海道」の場合
先頭からn文字str.slice(0, n)slice(0, 2) → 北海
末尾からn文字str.slice(-n)slice(-2) → 海道
n文字目より後ろすべてstr.slice(n)slice(1) → 海道

この記事では、sliceの基本から、実務でよく使う切り出しの例、substringとの違い、スプレッドシートの配列での使い方まで解説します。



※本ページはプロモーションが含まれています

スポンサーリンク
スポンサーリンク

sliceの基本

文字列.slice(開始位置, 終了位置)

ポイントは次の3つです。

  • 位置は0から数える(1文字目が0、2文字目が1…)
  • 終了位置の文字は含まれない(その手前まで切り出す)
  • 終了位置を省略すると最後まで、マイナスを指定すると末尾から数える

「北海道」の場合、位置は次のようになります。

文字北海道
位置(先頭から)012
位置(末尾から)-3-2-1

サンプルコード

function sliceSample() {
  const str = '北海道';
  console.log(str.slice(0, 1));  // 北(位置0から、位置1の手前まで)
  console.log(str.slice(0, 2));  // 北海
  console.log(str.slice(1));     // 海道(位置1から最後まで)
  console.log(str.slice(2));     // 道
  console.log(str.slice(-1));    // 道(末尾の1文字)
  console.log(str.slice(-2));    // 海道(末尾の2文字)
  console.log(str.slice(1, -1)); // 海(先頭と末尾を1文字ずつ除く)
}

エディタで実行すると、画面下の「実行ログ」に結果が表示されます。sliceは元の文字列を変更せず、切り出した新しい文字列を返すので、何度実行しても str は「北海道」のままです。

GAS Slice サンプルコード実行ログ

GAS Slice サンプルコード実行ログ

実務でよく使う切り出しの例

業務でスプレッドシートを扱うときによく使うパターンです。

// ① 日付文字列から年だけ取り出す
const dateText = '2026/10/30';
console.log(dateText.slice(0, 4));   // 2026

// ② 管理番号の末尾5桁を取り出す
const code = 'A-00123';
console.log(code.slice(-5));         // 00123

// ③ メールアドレスの@より前を取り出す(indexOfと組み合わせる)
const email = 'yamada@example.com';
console.log(email.slice(0, email.indexOf('@')));  // yamada
console.log(email.slice(email.indexOf('@') + 1)); // example.com

③のように、切り出す位置が毎回変わる場合は、indexOf で「目印の文字の位置」を調べてから slice するのが定番です。

slice・substring・substrの違い

文字列を切り出す方法は、sliceのほかに substring と substr もあります。

メソッド2つ目の引数マイナスの指定おすすめ
slice(開始, 終了)終了位置末尾から数える◎ 基本はこれ
substring(開始, 終了)終了位置0として扱われる○ 使えるが特に利点はない
substr(開始, 文字数)切り出す文字数末尾から数える× 非推奨(古い書き方)
const str = '北海道';
console.log(str.slice(-2));      // 海道
console.log(str.substring(-2));  // 北海道(-2が0扱いになる)
console.log(str.substr(1, 2));   // 海道(位置1から2文字)

VBAの Left / Right / Mid に慣れている人は、次のように置き換えると覚えやすいです。

VBAGAS(slice)
Left(str, n)str.slice(0, n)
Right(str, n)str.slice(-n)
Mid(str, start, n)str.slice(start - 1, start - 1 + n)

VBAの Mid は位置を1から数えますが、GASの slice は0から数えるので、開始位置が1つずれる点に注意してください。

配列のslice(getValuesで見出し行を除く)

sliceは文字列だけでなく、配列にも使えます。GASでは、getValues() で取得したデータから見出し行を除くときによく使います。

function removeHeader() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const values = sheet.getDataRange().getValues();

  const data = values.slice(1);          // 1行目(見出し)を除いた全行
  const firstRow = data[0].slice(0, 3);  // 先頭行の、左から3列分
  console.log(data.length, firstRow);
}

配列の slice も元の配列は変更しません。似た名前の splice は元の配列そのものを書き換えるので、取り違えないようにしましょう。

つまずきやすいポイント

① セルの値が数値や日付だとエラーになる

GASで一番多いエラーがこれです。getValue() で取得した値が数値や日付だと、「slice is not a function」というエラーになります。sliceは文字列(と配列)にしか使えないためです。

const value = sheet.getRange('A1').getValue(); // 12345(数値)
value.slice(0, 2);          // × エラー
String(value).slice(0, 2);  // ○ '12'

日付のセルは Date として取得されるので、String() ではなく Utilities.formatDate で文字列にしてから切り出します。

const date = sheet.getRange('B1').getValue(); // 日付のセル
const text = Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/MM/dd');
console.log(text.slice(0, 4)); // 2026

② 終了位置の文字は含まれない

slice(0, 2) は「位置0から2まで」ではなく、「位置0から位置2の手前まで」です。「終了位置 − 開始位置 = 切り出す文字数」と覚えると間違えにくくなります。

③ 範囲外を指定してもエラーにならない

文字数より大きい位置を指定してもエラーにはならず、空文字や、取れるところまでが返ってきます。結果が空になっているときは、元の文字列の長さを確認してみてください。

const str = '北海道';
console.log(str.slice(5));     // (空文字)
console.log(str.slice(0, 10)); // 北海道

④ 絵文字は途中で切れることがある

絵文字など一部の文字は、内部的に2文字分として数えられます。そのため、sliceで切り出すと文字化けすることがあります。フォームの自由記述欄など、絵文字が入りそうなデータを扱うときは注意しましょう。

生成AIに切り出し処理を書かせるときのコツ

ChatGPTやClaudeに「この列から○○を取り出して」と頼むときは、実際のデータの例と、欲しい結果をセットで渡すのが一番のコツです。

A列に「東京都港区芝1-2-3」のような住所が入っています。
都道府県名だけをB列に取り出すGASを書いてください。
例:東京都港区芝1-2-3 → 東京都、神奈川県横浜市… → 神奈川県

「都道府県名を取り出して」だけだと、先頭3文字を切り出すだけのコードが返ってくることがあります。それだと「神奈川県」のような4文字の県名が正しく取れません。例外になりそうなデータを例に含めておくと、精度が上がります。

AIが書いたコードが意図どおりに動かないときは、デバッグで変数の中身を確かめてみましょう。

まとめ

  • 先頭からn文字は slice(0, n)、末尾からn文字は slice(-n)
  • 位置は0から数え、終了位置の文字は含まれない
  • substring・substrより slice を基本にする
  • getValues() の配列も slice(1) で見出し行を除ける
  • 数値や日付のセルは、文字列にしてから slice する
タイトルとURLをコピーしました