追跡コードから請求番号だけを取り出す(MID + FIND)
問題
問題文
A2:A5 の追跡コードは3つの部分からできています。接頭辞、角括弧の中の請求番号、国コードの接尾辞です。必要なのは真ん中だけ。A2 の番号を Ref セル B2 に入れてください。
番号の長さも国コードも変わります。位置を固定せず、2つの括弧を式で見つける必要があります。
問題のデータ
表でデータ全体を見る(選択・コピーできます)
| A | B | |
|---|---|---|
| 1 | Tracking code | Ref |
| 2 | ORD[INV-4821]CN | |
| 3 | ORD[INV-4822]US | |
| 4 | ORD[INV-4823]DE | |
| 5 | ORD[INV-4824]FR |
ポイント解説
MID(文字列, 開始位置, 文字数) は開始位置と長さの両方が必要です。FIND で開始位置(開き括弧の次)が分かり、2回使えば長さ(閉じ括弧の位置 - 開き括弧の位置 - 1)も分かります。FIND は大文字小文字を区別します。
解き方のヒント
回答は B2 に入力します。送信時は 3 通りの入力で数式を再実行するので、数値を直接書くと必ず失敗します。数式はセルを参照してください。
- 対象セルは B2
- FIND("[", A2) が開き括弧の位置で、番号はその次から始まる
- 長さは FIND("]", A2) - FIND("[", A2) - 1
- 形:=MID(?, ?, ?)——開始位置も長さも FIND から作る
模範解答
模範解答を表示(2 通り・まずは自分で試してみましょう)
方法1:開始位置に1つ、長さに2つの FIND
=MID(A2, FIND("[",A2)+1, FIND("]",A2)-FIND("[",A2)-1)
ORD[INV-4821]CN の場合、FIND("[") は 4 なので5文字目から。FIND("]") は 13 なので長さは 13 - 4 - 1 = 8。MID(A2, 5, 8) が INV-4821 を返します。
方法2:FIND の3つ目の引数で検索開始位置をずらす
=MID(A2, FIND("[",A2)+1, FIND("]",A2,FIND("[",A2))-FIND("[",A2)-1)
FIND("]", A2, FIND("[",A2)) は開き括弧の位置から閉じ括弧を探します。区切りではない ] が前の方に現れる文字列では、こちらの書き方が正解になります。
関数ガイド
よくある質問
2つの文字の間のテキストを取り出すには?
MID と2つの FIND を組み合わせます:=MID(A2, FIND("[",A2)+1, FIND("]",A2)-FIND("[",A2)-1)。+1 で開き括弧を飛ばし、-1 で閉じ括弧を長さから除きます。
FIND と SEARCH のどちらを使う?
FIND は大文字小文字を区別し、ワイルドカードは使えません。SEARCH は区別せず、ワイルドカードも使えます。括弧のような区切りでは結果は同じなので、同じ式で大文字小文字を扱うなら FIND が無難です。