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…)
- 終了位置の文字は含まれない(その手前まで切り出す)
- 終了位置を省略すると最後まで、マイナスを指定すると末尾から数える
「北海道」の場合、位置は次のようになります。
| 文字 | 北 | 海 | 道 |
|---|---|---|---|
| 位置(先頭から) | 0 | 1 | 2 |
| 位置(末尾から) | -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 サンプルコード実行ログ
実務でよく使う切り出しの例
業務でスプレッドシートを扱うときによく使うパターンです。
// ① 日付文字列から年だけ取り出す
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 に慣れている人は、次のように置き換えると覚えやすいです。
| VBA | GAS(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 する

