コンテンツにスキップ

文字列の切り出し

今回はオフィススクリプトを使って、文字列を切り出す方法をサンプルコードと併せて解説します。

Stringオブジェクトに含まれている、sliceメソッドを使用します。

メソッドの詳細
/**
* @param start 切り出す文字の開始位置
* @param end 切り出す文字の終了位置(切り出されるのはこの数値の手前まで)
*/
slice(start: number, end?: number): string;

引数に負数が指定でき、負数を指定した場合は「後ろから n 番目」を表します。

注意していただきたいのは、開始・終了位置のインデックスが 0 から始まる点です(VBA の Mid は 1 から始まります)。

また、切り出される文字は第二引数に指定したインデックスの直前までです。

例えば、slice(0, 3)と指定した場合、文字列の 1 番目から 3 番目までが切り出されます。

第二引数を省略した場合は、開始位置から文字の最後までが対象となります。

sliceを使ったサンプル
function main(workbook: ExcelScript.Workbook) {
/** 対象文字列 */
const target = 'リンゴミカンバナナ';
console.log(target.slice(0, 3)); // リンゴ
console.log(target.slice(3, 6)); // ミカン
console.log(target.slice(-3)); // バナナ
}

開始位置・終了位置を変えて、どの文字が切り出されるかを確かめてみましょう。文字の下に並んでいるのが、負数で指定する場合の「後ろから」のインデックスです。

インデックス012345678
文字リンゴミカンバナナ
後ろから-9-8-7-6-5-4-3-2-1

結果target.slice(0, 3)'リンゴ'

    値を変えて、切り出される範囲を確かめてみましょう。

    Stringオブジェクトに含まれている、substringメソッドを使用します。

    メソッドの詳細
    /**
    * @param start 切り出す文字の開始位置
    * @param end 切り出す文字の終了位置(切り出されるのはこの数値の手前まで)
    */
    substring(start: number, end?: number): string;

    こちらのメソッドも同様に、開始・終了位置のインデックスは 0 から始まります。

    sliceと同様に、切り出される文字は第二引数に指定したインデックスの直前までです。

    引数に負数を指定した場合は、0 とみなされます。また、開始位置が終了位置より大きい場合は、2 つの引数が入れ替えられて扱われます(substring(6, 3)はsubstring(3, 6)と同じ結果になります)。

    第二引数を省略した場合は、開始位置から文字の最後までが対象となります。

    substringを使ったサンプル
    function main(workbook: ExcelScript.Workbook) {
    /** 対象文字列 */
    const target = 'リンゴミカンバナナ';
    console.log(target.substring(0, 3)); // リンゴ
    console.log(target.substring(3, 6)); // ミカン
    console.log(target.substring(6)); // バナナ
    }

    slice と substring の違いを確かめる

    Section titled “slice と substring の違いを確かめる”

    開始位置が終了位置より大きい場合や、負数を指定した場合は、sliceとsubstringで結果が異なります。

    メソッドを切り替えて、同じ引数でも結果が変わることを確かめてみましょう。

    インデックス012345678
    文字リンゴミカンバナナ

    結果target.substring(6, 3)'ミカン'

    • 開始位置が終了位置より大きいため、2 つの引数が入れ替えられます。

    値を変えて、切り出される範囲を確かめてみましょう。