• 作成日 : 2025年10月27日

スプレッドシートで文字列を抽出するには?特定文字の前後から複数条件まで解説

Googleスプレッドシートで文字列を抽出する操作は、メールアドレスからドメインを取り出したり、住所から都道府県を切り出したりと、日常業務で頻繁に求められることもあるでしょう。

基本は LEFT/MID/RIGHT と FIND/SEARCH の組み合わせで多くのパターンを処理でき、さらに REGEXEXTRACT を使えば複雑な条件にも柔軟に対応できます。

本記事では、基本的な文字列抽出から、特定文字の前後の抽出、範囲指定による抽出、複数条件での高度な抽出まで、実践的な関数の使い方とテクニックを体系的に解説します。

スプレッドシートで特定の文字列を抽出する方法は?

スプレッドシートで特定の文字列を抽出するには、MID関数、LEFT関数、RIGHT関数の基本3関数と、FIND関数、SEARCH関数を組み合わせることで、多くの抽出パターンを扱えます。

基本関数の使い方と特徴

文字列抽出の基本となる3つの関数を詳しく解説します。

LEFT関数は、文字列の左側(先頭)から指定した文字数を抽出します。

=LEFT(文字列, 文字数)

=LEFT(“東京都港区赤坂1-2-3”, 3)  // 結果:東京都

RIGHT関数は、文字列の右側(末尾)から指定した文字数を抽出します。

=RIGHT(文字列, 文字数)

=RIGHT(“TEL:03-1234-5678”, 13)  // 結果:03-1234-5678

MID関数は、文字列の指定位置から指定した文字数を抽出します。最も柔軟性が高い関数です。

=MID(文字列, 開始位置, 文字数)

=MID(“2024年01月15日”, 6, 2)  // 結果:01

これらの関数は単独でも便利ですが、動的な位置を特定する関数と組み合わせることで真価を発揮します。

FIND関数とSEARCH関数による位置特定

文字列内の特定文字の位置を見つける関数です。

FIND関数は、大文字小文字を区別して検索します。

=FIND(検索文字列, 対象文字列, [開始位置])

=FIND(“@”, “[email protected]”)  // 結果:5

SEARCH関数は、大文字小文字を区別せず、ワイルドカード(*、?)が使用可能です。

=SEARCH(検索文字列, 対象文字列, [開始位置])

=SEARCH(“tokyo”, “TOKYO-JAPAN”)  // 結果:1

両関数の使い分けのポイント
  • 厳密な一致が必要な場合:FIND関数
  • 柔軟な検索が必要な場合:SEARCH関数
  • パターンマッチングが必要な場合:SEARCH関数でワイルドカード使用

実践的な抽出例:メールアドレスの処理

メールアドレスからユーザー名とドメインを抽出する実例です。

// A列にメールアドレスがある場合

// ユーザー名の抽出(@より前)

=LEFT(A2, FIND(“@”, A2) – 1)

// ドメインの抽出(@より後)

=MID(A2, FIND(“@”, A2) + 1, LEN(A2))

// トップレベルドメインの抽出(最後の.より後)

=RIGHT(A2, LEN(A2) – FIND(“~”, SUBSTITUTE(A2, “.”, “~”, LEN(A2) – LEN(SUBSTITUTE(A2, “.”, “”)))))

このように、基本関数を組み合わせることで、複雑な抽出も実現できます。

スプレッドシートで特定の文字より前を抽出する方法は?

特定の文字より前の文字列を抽出するには、LEFT関数とFIND/SEARCH関数を組み合わせ、区切り文字の位置を動的に特定して、その位置までの文字を取得します。

この技術は、ファイル名から拡張子を除く、URLからドメインを抽出するなど、多くの場面で活用されます。

基本パターン:単一区切り文字での抽出

最も一般的な、1つの区切り文字より前を抽出する方法です。

// 基本構文

=LEFT(文字列, FIND(区切り文字, 文字列) – 1)

// 実例:ファイル名から拡張子を除く

=LEFT(A2, FIND(“.”, A2) – 1)

// “document.pdf” → “document”

// エラー処理を含む完全版

=IFERROR(LEFT(A2, FIND(“.”, A2) – 1), A2)

区切り文字が見つからない場合のエラーを防ぐため、IFERROR関数でラップすることが重要です。

複数の同じ文字がある場合の処理

同じ区切り文字が複数ある場合、最初または最後の出現位置で抽出する方法です。

最初の区切り文字より前を抽出:

(A)プロトコルのみなら:

=LEFT(A2, FIND(“/”, A2) – 1) // “https://example.com/…

” → “https:”

(B)プロトコル+ドメインなら(正規表現が簡潔):

=REGEXEXTRACT(A2, “^[^/]+//[^/]+”) // → “https://example.com

(C)関数だけで位置計算する場合:

=LEFT(A2, FIND(“/”, A2, FIND(“//”, A2)+2) – 1) // 3つ目の「/」直前まで

いずれも IFERROR( … , A2) を併用すると、スラッシュが無いURLでも安全です。

最後の区切り文字より前を抽出:

// ファイルパスからファイル名を除く

=LEFT(A2, FIND(“♦”, SUBSTITUTE(A2, “/”, “♦”, LEN(A2) – LEN(SUBSTITUTE(A2, “/”, “”)))) – 1)

// “/home/user/documents/file.txt” → “/home/user/documents”

この技法では、SUBSTITUTE関数で最後の区切り文字を一時的に別の文字に置換してから検索します。

実用例:住所から都道府県を抽出

日本の住所から都道府県を抽出する実践的な例です。

// 都道府県の抽出(都・道・府・県で判定)

=IF(OR(MID(A2,3,1)=”都”, MID(A2,3,1)=”道”, MID(A2,3,1)=”府”, MID(A2,3,1)=”県”),

LEFT(A2, 3),

IF(MID(A2,4,1)=”県”, LEFT(A2, 4), A2))

// より汎用的な方法(正規表現を使用)

=REGEXEXTRACT(A2, “^(.+?[都道府県])”)

REGEXEXTRACT関数を使用すると、より柔軟で強力な抽出が可能になります。

スプレッドシートで特定の文字より後を抽出する方法は?

特定の文字より後の文字列を抽出するには、MID関数またはRIGHT関数とFIND/SEARCH関数を組み合わせ、区切り文字の位置から後ろの全ての文字を取得します。

データの後半部分の情報を取り出す際に頻繁に使用される技術です。

基本的な後方抽出のパターン

区切り文字より後の全ての文字を抽出する標準的な方法です。

// 基本構文

=MID(文字列, FIND(区切り文字, 文字列) + 1, LEN(文字列))

// 実例:メールアドレスからドメインを抽出

=MID(A2, FIND(“@”, A2) + 1, LEN(A2))

// “[email protected]” → “example.com”

// RIGHT関数を使用する方法

=RIGHT(A2, LEN(A2) – FIND(“@”, A2))

MIDは直感的で、RIGHTも同様に使えます。

最後の区切り文字より後を抽出

複数の区切り文字がある場合、最後の出現位置より後を抽出する方法です。

// ファイルパスからファイル名を抽出

=MID(A2, FIND(“♦”, SUBSTITUTE(A2, “/”, “♦”, LEN(A2) – LEN(SUBSTITUTE(A2, “/”, “”)))) + 1, LEN(A2))

// “/home/user/documents/file.txt” → “file.txt”

// 拡張子のみを抽出

=MID(A2, FIND(“♦”, SUBSTITUTE(A2, “.”, “♦”, LEN(A2) – LEN(SUBSTITUTE(A2, “.”, “”)))) + 1, LEN(A2))

// “document.final.pdf” → “pdf”

条件付き抽出の実装

特定の条件を満たす場合のみ抽出を行う高度な処理です。

// URLからクエリパラメータを抽出(?がある場合のみ)

=IF(ISERROR(FIND(“?”, A2)),

“”,

MID(A2, FIND(“?”, A2) + 1, LEN(A2)))

// 電話番号から市外局番を除いた部分を抽出

=IF(LEFT(A2, 1) = “0”,

MID(A2, FIND(“-“, A2) + 1, LEN(A2)),

A2)

条件分岐を組み込むことで、より柔軟な抽出処理が可能になります。

スプレッドシートで特定の文字から特定の文字までを抽出する方法は?

2つの区切り文字の間にある文字列を抽出するには、MID関数で開始位置と文字数を動的に計算し、入れ子になったFIND関数で両端の位置を特定します。

この技術は、括弧内の文字、タグ間のテキスト、区切られた項目の抽出など、構造化されたテキストの処理に不可欠です。

基本的な範囲抽出のパターン

2つの異なる区切り文字間の文字列を抽出する標準的な方法です。

// 基本構文

=MID(文字列, FIND(開始文字, 文字列) + 1, FIND(終了文字, 文字列) – FIND(開始文字, 文字列) – 1)

エラーに強い形:

=IFERROR( MID(A2, FIND(“(“,A2)+1, FIND(“)”,A2,FIND(“(“,A2)+1) – FIND(“(“,A2) – 1 ), “” )

※ IFERROR で欠落時は空文字に。

// 実例:括弧内の文字を抽出

=MID(A2, FIND(“(“, A2) + 1, FIND(“)”, A2) – FIND(“(“, A2) – 1)

// “製品名(ABC-123)” → “ABC-123”

// HTMLタグ間のテキストを抽出

=MID(A2, FIND(“>”, A2) + 1, FIND(“</”, A2) – FIND(“>”, A2) – 1)

// “<title>ページタイトル</title>” → “ページタイトル”

代替(読みやすく堅牢):

=REGEXEXTRACT(A2,”<title[^>]*>(.*?)</title>”)

※ 他タグでも同様にタグ名を置換。

同じ区切り文字での範囲抽出

開始と終了が同じ文字の場合の処理方法です。

// クォート間の文字列を抽出

=MID(A2, FIND(“”””, A2) + 1, FIND(“”””, A2, FIND(“”””, A2) + 1) – FIND(“”””, A2) – 1)

// ‘He said “Hello World” to me’ → “Hello World”

簡潔な代替:

=REGEXEXTRACT(A2,””([^”]*)””) // ダブルクォート内の文字

// 特定番目の区切り文字間を抽出(2番目と3番目の”-“の間)

=MID(A2,

FIND(“♦”, SUBSTITUTE(A2, “-“, “♦”, 2)) + 1,

FIND(“♦”, SUBSTITUTE(A2, “-“, “♦”, 3)) – FIND(“♦”, SUBSTITUTE(A2, “-“, “♦”, 2)) – 1)

// “A-B-C-D-E” → “C”

実践例:構造化データの解析

実際のビジネスデータから必要な情報を抽出する例です。

// 商品コードから各要素を抽出

// 形式:[カテゴリ]-[メーカー]-[型番]-[色]

// 例:”ELEC-SONY-WH1000XM4-BLACK”

// カテゴリを抽出(最初の”-“まで)

=LEFT(A2, FIND(“-“, A2) – 1)

// メーカーを抽出(1番目と2番目の”-“の間)

=MID(A2, FIND(“-“, A2) + 1, FIND(“-“, A2, FIND(“-“, A2) + 1) – FIND(“-“, A2) – 1)

// 型番を抽出(2番目と3番目の”-“の間)

=MID(A2,

FIND(“♦”, SUBSTITUTE(A2, “-“, “♦”, 2)) + 1,

FIND(“♦”, SUBSTITUTE(A2, “-“, “♦”, 3)) – FIND(“♦”, SUBSTITUTE(A2, “-“, “♦”, 2)) – 1)

// 色を抽出(最後の”-“より後)

=MID(A2, FIND(“♦”, SUBSTITUTE(A2, “-“, “♦”, LEN(A2) – LEN(SUBSTITUTE(A2, “-“, “”)))) + 1, LEN(A2))

スプレッドシートで特定の文字を複数条件で抽出する高度な方法は?

複数条件での文字列抽出には、IF関数やIFS関数による条件分岐、REGEXEXTRACT関数による正規表現、QUERY関数によるデータベース的処理を組み合わせて、複雑な要件に対応します。

実務では単純な抽出だけでなく、条件に応じた柔軟な処理が求められることが多くあります。

条件分岐による動的抽出

複数の条件に基づいて異なる抽出方法を適用する方法です。

// データ形式に応じた抽出

=IFS(

ISNUMBER(SEARCH(“@”, A2)), MID(A2, 1, FIND(“@”, A2) – 1),  // メールアドレスの場合

ISNUMBER(SEARCH(“-“, A2)), LEFT(A2, FIND(“-“, A2) – 1),    // ハイフン区切りの場合

ISNUMBER(SEARCH(“/”, A2)), RIGHT(A2, LEN(A2) – FIND(“/”, A2)),  // スラッシュ区切りの場合

TRUE, A2  // どれにも該当しない場合)

// 文字数による条件付き抽出

=IF(LEN(A2) > 10,

MID(A2, 5, 6),  // 10文字を超える場合は5文字目から6文字

LEFT(A2, 3))    // 10文字以下の場合は先頭3文字

正規表現(REGEX)による高度な抽出

REGEXEXTRACT関数を使用した柔軟で強力な抽出方法です。

// 数字のみを抽出

=REGEXEXTRACT(A2, “d+”)

// “ABC123DEF456” → “123”(最初の数字群)

// すべての数字を連結して抽出

=REGEXREPLACE(A2, “[^0-9]”, “”)

// “ABC123DEF456” → “123456”

// 日本語のみを抽出

=REGEXEXTRACT(A2, “[ぁ-んァ-ヶー一-龠]+”)

// 特定パターンの抽出(郵便番号)

=REGEXEXTRACT(A2, “d{3}-?d{4}”)

// “東京都港区赤坂1-2-3 〒107-0052” → “107-0052″

// 複数のグループを同時抽出

ユーザー名とドメインを別列に出す方法(2通り)

(A)REGEXEXTRACT を2回使う:

=REGEXEXTRACT(A2,”^([^@]+)”) // ユーザー名

=REGEXEXTRACT(A2,”@(.+)$”) // ドメイン

(B)SPLIT を使う:

=SPLIT(A2,”@”) // 左列=ユーザー名、右列=ドメイン

正規表現パターンの基本
  • d : 数字
  • w : 英数字とアンダースコア
  • + : 1回以上の繰り返し
  • * : 0回以上の繰り返し
  • ? : 0回または1回
  • [] : 文字クラス
  • () : グループ化

複数セルからの統合抽出

複数のセルから条件に合う文字列を抽出して統合する方法です。

// 配列数式による一括抽出

=ARRAYFORMULA(IF(A2:A100 <> “”,

LEFT(A2:A100, FIND(“-“, A2:A100 & “-“) – 1),””))

// FILTER関数と組み合わせた条件付き抽出

=FILTER( ARRAYFORMULA( IFERROR( MID(A2:A100, FIND(“:”, A2:A100&”:”)+1, 10^6 ), “” ) ), ISNUMBER(SEARCH(“重要”, A2:A100)) )

※ A2:A100&”:” で“無い場合は末尾のコロン”にし、IFERROR で空文字に退避。10^6 は「末尾まで」を簡便に指定。

// QUERY関数による条件付き抽出

=QUERY(A2:B100,

“SELECT A WHERE B CONTAINS ‘完了’ AND A CONTAINS ‘@'”)

カスタム関数による複雑な抽出

Google Apps Scriptで独自の抽出関数を作成する方法です。

/**

* 複数条件で文字列を抽出するカスタム関数

* @param {string} text – 対象文字列

* @param {string} mode – 抽出モード

* @return {string} 抽出結果

* @customfunction

*/

function CUSTOM_EXTRACT(text, mode) {

if (!text) return “”;

switch(mode) {

case “email_domain”:

// メールアドレスからドメインを抽出

const match = text.match(/@(.+)/);

return match ? match[1] : “”;

case “japanese_only”:

// 日本語のみを抽出

return text.replace(/[^u3040-u309Fu30A0-u30FFu4E00-u9FAF]/g, “”);

case “numbers_sum”:

// 文字列内の数字を合計

const numbers = text.match(/d+/g);

return numbers ? numbers.reduce((sum, n) => sum + parseInt(n), 0) : 0;

case “between_brackets”:

// すべての括弧内文字を配列で返す

const matches = text.match(/[([^]]+)]/g);

return matches ? matches.map(m => m.slice(1, -1)).join(“, “) : “”;

default:

return text;}}


※ 掲載している情報は記事更新時点のものです。

※本サイトは、法律的またはその他のアドバイスの提供を目的としたものではありません。当社は本サイトの記載内容(テンプレートを含む)の正確性、妥当性の確保に努めておりますが、ご利用にあたっては、個別の事情を適宜専門家にご相談いただくなど、ご自身の判断でご利用ください。

関連記事