Excel関数 逆引き集 | 英字だけ抽出 → FILTER

Excel
スポンサーリンク

概要

「文字と数字がぐちゃっと混ざっている中から、“英字だけ”抜き出したい」
A1b-23Z から AbZ だけ取りたい」
「品番やIDの中の “アルファベットだけ” を分離して使いたい」

こういうときに使えるのが、
FILTER 関数 × MID × SEQUENCE を組み合わせた「英字だけ抽出」テクニックです。

考え方はシンプルで、

  1. 文字列を1文字ずつにバラす(MID+SEQUENCE)
  2. それが英字かどうか判定する
  3. 英字だけを FILTER でふるいにかける
  4. 必要なら TEXTJOIN で再度 1 本の文字列にする

という流れを、1 本の数式の中で一気にやります。


FILTER 関数の基本

FILTER の書式

=FILTER(配列, 条件配列, [該当なしのとき])

配列
絞り込みの対象。たとえば { "A"; "1"; "b"; "-" } のような縦のリスト。

条件配列
TRUE(残す) / FALSE(捨てる) の条件。
配列と同じ長さで、「どの要素を残すか」を指定します。

[該当なしのとき]
条件を満たすものが 1 つもないときに返す値(なくてもOK)。

今回やりたいのは

  • 配列:1文字ずつにバラした文字たち
  • 条件配列:それぞれが「英字かどうか」の判定結果

この 2 つを使って「英字だけ残す」FILTER を作ります。


英字だけ抽出の基本形(FILTER+MID+SEQUENCE)

英字だけを「縦のリスト」として取り出す

例として、A2 に次の文字列が入っているとします。

A2:
A1b-23Z

この中から、

  • 「A」「b」「Z」だけを取り出して
  • 縦に並べる(A3:A5 に A, b, Z と出るイメージ)

ようにしたいとします。

そのときの式例(B2セルなど):

=FILTER(
    MID(A2, SEQUENCE(LEN(A2)), 1),
    (CODE(UPPER(MID(A2, SEQUENCE(LEN(A2)), 1)))>=65)*
    (CODE(UPPER(MID(A2, SEQUENCE(LEN(A2)), 1)))<=90)
)

1 行に詰めるとこうなります。

=FILTER(MID(A2,SEQUENCE(LEN(A2)),1),(CODE(UPPER(MID(A2,SEQUENCE(LEN(A2)),1)))>=65)*(CODE(UPPER(MID(A2,SEQUENCE(LEN(A2)),1)))<=90))

動き方をかみ砕きます。

  1. SEQUENCE(LEN(A2))
    A2 の文字数ぶんの連番(1,2,3,…)を作ります。
  2. MID(A2, SEQUENCE(LEN(A2)), 1)
    A2 の中身を 1 文字ずつバラした配列を作ります。
    例:{"A";"1";"b";"-";"2";"3";"Z"}
  3. UPPER(その1文字)
    小文字も含めて一旦大文字にしてしまいます(a~z も A~Z にするため)。
  4. CODE(…)
    「文字コード」を取得します。
    アルファベット(A~Z)はコード 65~90 の範囲に収まるので、
    それで「英字かどうか」を判定できます。
  5. (CODE>=65)*(CODE<=90)
    「65以上 かつ 90以下」のとき TRUE(=1) になる条件配列。
    そうでなければ FALSE(=0) になります。
  6. FILTER(1文字配列, 条件配列)
    条件が TRUE の文字だけを抜き出します → 結果 {"A";"b";"Z"}

このようにして、「英字だけを縦方向に取り出す」ことができます。


英字だけを 1 本の文字列として取り出す

縦に並んだ {"A";"b";"Z"} を、
"AbZ" のように 1 本の文字列にしたいことも多いです。

その場合は、FILTER で抜き出した配列を TEXTJOIN でつなぎます。

A2:
A1b-23Z

から "AbZ" を作る式:

=TEXTJOIN(
    "",
    TRUE,
    FILTER(
        MID(A2, SEQUENCE(LEN(A2)), 1),
        (CODE(UPPER(MID(A2, SEQUENCE(LEN(A2)), 1)))>=65)*
        (CODE(UPPER(MID(A2, SEQUENCE(LEN(A2)), 1)))<=90)
    )
)

1 行にすると:

=TEXTJOIN("",TRUE,FILTER(MID(A2,SEQUENCE(LEN(A2)),1),(CODE(UPPER(MID(A2,SEQUENCE(LEN(A2)),1)))>=65)*(CODE(UPPER(MID(A2,SEQUENCE(LEN(A2)),1)))<=90)))

これで、英字だけをつなぎ直した文字列 "AbZ" が得られます。


どこが「英字かどうか」のポイントか

今回のキモは、この部分です。

CODE(UPPER(その1文字))>=65
CODE(UPPER(その1文字))<=90

アルファベットは、

  • 大文字 A~Z のコードが 65~90

なので、

  1. まず UPPER で強制的に大文字にする(a→A, z→Z にする)
  2. そのコードが 65~90 の範囲なら英字だ、とみなす

というロジックになっています。

日本語・数字・記号はこの範囲に入らないので、
条件が FALSE になり、FILTER で落とされます。

「英字だけ抽出」の判定の核はここだと意識しておくと、
他の条件(数字だけ、記号だけ、など)にも応用しやすくなります。


例題

問題1

A2 に「A1b-23Z」という文字列が入っています。
この中から、英字だけを縦に抽出して
「A」「b」「Z」と並べて表示したいです。
FILTER と MID、SEQUENCE を使った式を書いてください。

=FILTER(MID(A2,SEQUENCE(LEN(A2)),1),(CODE(UPPER(MID(A2,SEQUENCE(LEN(A2)),1)))>=65)*(CODE(UPPER(MID(A2,SEQUENCE(LEN(A2)),1)))<=90))

問題2

A2 に「品番-AB12-3xZ」という文字列が入っています。
この中から英字だけを抜き出して「ABxZ」という 1 本の文字列として表示したいです。
TEXTJOIN と FILTER を組み合わせた式を書いてください。

=TEXTJOIN("",TRUE,FILTER(MID(A2,SEQUENCE(LEN(A2)),1),(CODE(UPPER(MID(A2,SEQUENCE(LEN(A2)),1)))>=65)*(CODE(UPPER(MID(A2,SEQUENCE(LEN(A2)),1)))<=90)))

問題3

A2 に「ID2026-Excel-01」という文字列が入っています。
この中から英字だけを抽出し、「IDExcel」と表示したいです。
FILTER+MID+SEQUENCE+TEXTJOIN を使った式を書いてください。

=TEXTJOIN("",TRUE,FILTER(MID(A2,SEQUENCE(LEN(A2)),1),(CODE(UPPER(MID(A2,SEQUENCE(LEN(A2)),1)))>=65)*(CODE(UPPER(MID(A2,SEQUENCE(LEN(A2)),1)))<=90)))

問題4

A2 に「Room101A」という文字列が入っています。
この中から英字だけを抽出し、「RoomA」という文字列を返したいです。
FILTER と TEXTJOIN を使った式を書いてください。

=TEXTJOIN("",TRUE,FILTER(MID(A2,SEQUENCE(LEN(A2)),1),(CODE(UPPER(MID(A2,SEQUENCE(LEN(A2)),1)))>=65)*(CODE(UPPER(MID(A2,SEQUENCE(LEN(A2)),1)))<=90)))

問題5

A2 に「123-xyz-789-AB」という文字列が入っています。
この中から英字だけを抽出し、「xyzAB」という文字列として表示したいです。
FILTER を使った英字抽出の標準的な式を書いてください。

=TEXTJOIN("",TRUE,FILTER(MID(A2,SEQUENCE(LEN(A2)),1),(CODE(UPPER(MID(A2,SEQUENCE(LEN(A2)),1)))>=65)*(CODE(UPPER(MID(A2,SEQUENCE(LEN(A2)),1)))<=90)))

FILTER × MID × SEQUENCE の型は、一度覚えると応用範囲が非常に広いです。

  • 英字だけ
  • 数字だけ
  • 特定の記号だけ
  • 条件に合う文字だけ

を“動的にふるいにかけて”取り出せるようになるので、
文字列処理のレベルが一段上がります。

まずは、この「英字だけ抽出」の式をそのまま真似して、
自分のシートで動かしてみてください。
そこから少しずつ条件部分をいじっていくと、理解がグッと深まります。

Excel
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました