
「TK-2024-001」というコードから「2024」だけ取り出したい。そんなとき、FindとMidを組み合わせると動的に切り出せます。文字の位置がデータによって変わっても壊れないのが強みです。

Findで文字の位置を調べる
Find関数は、文字列の中から指定した文字列が最初に現れる位置を返します。位置は1始まりです。
Find("-", "TK-2024-001")
// 結果:3(3文字目に最初の"-"がある)
第3引数に開始位置を指定すると、その位置以降で検索できます。
Find("-", "TK-2024-001", 4)
// 結果:8(4文字目以降で検索し、8文字目に2つ目の"-"がある)
Findは文字が見つからない場合にBlankを返します。条件分岐に使う場合はIsBlankで確認しておくと安全です。

Midで指定位置から文字列を切り出す
Mid関数は、文字列の特定の位置から指定した文字数を取り出します。引数は3つです。
Mid(テキスト, 開始位置, 文字数)
たとえば「TK-2024-001」の4文字目から4文字取り出すには次のように書きます。
Mid("TK-2024-001", 4, 4)
// 結果:2024
ただし位置をハードコードすると、コードの形式が変わった瞬間に壊れます。Findと組み合わせることで、データが変わっても動作する数式になります。

FindとMidを組み合わせる
FindとMidを組み合わせると、区切り文字の位置を動的に取得しながら切り出せます。「TK-2024-001」の最初のハイフンと2番目のハイフンの間にある「2024」を取り出す例です。
With(
{
pos1: Find("-", "TK-2024-001"),
pos2: Find("-", "TK-2024-001", Find("-", "TK-2024-001") + 1)
},
Mid("TK-2024-001", pos1 + 1, pos2 - pos1 - 1)
)
Withで位置を変数的に持つことで、同じFind計算を何度も書かずに済みます。Withの使い方はこちらの記事で詳しく解説しています。

実例3パターン
管理番号から年度を抽出する
「部署コード-年度-連番」形式の管理番号から年度部分だけ取り出し、ギャラリーのフィルタに使う例です。
Filter(
申請リスト,
With(
{ pos1: Find("-", 管理番号) },
Mid(管理番号, pos1 + 1, 4)
) = "2024"
)
FilterやLookUpの使い方はこちらの記事でまとめています。
メールアドレスのドメインを取り出す
メールアドレスから@以降のドメイン部分を取得する場面です。
With(
{ atPos: Find("@", TextInput_Email.Text) },
Mid(TextInput_Email.Text, atPos + 1, Len(TextInput_Email.Text) - atPos)
)
Len関数を組み合わせることで、文字列の末尾まで取り出せます。
SharePointリストのコードを照合する
SharePointリストに登録されたコードの一部を切り出し、別のリストと照合するパターンです。たとえば品番コードの先頭3文字がカテゴリを表す場合、Midで取り出した値でFilterをかけられます。
Filter(
カテゴリマスタ,
カテゴリコード = Left(ThisItem.品番, 3)
)
SharePointのデータ操作についてはSharePointリストのCRUDパターンも参考にしてください。

ReplaceとSubstituteとの使い分け
MidとFindは切り出しに特化した関数です。文字列を別の文字に置き換えたい場合は、ReplaceやSubstituteを使います。Replaceは位置指定での置換、Substituteは文字列を検索して置換です。これらの使い分けについてはこちらの記事をご覧ください。
まとめ
FindとMidは単体でも使えますが、組み合わせることで真価を発揮します。Findで位置を動的に取得してからMidで切り出すという流れを覚えておけば、どんな区切り文字にも対応できます。
Left・Right関数は位置が先頭・末尾に固定されているケース向けの切り出し関数です。固定位置ならLeft・Right、動的な位置ならMid・Findと使い分けてください。Left・Rightの使い方はこちらの記事をご覧ください。
Power Appsのその他のテキスト関数についての完全ガイドはこちらの記事をご覧ください。
少し複雑に見えますが、Withと組み合わせれば整理できます。ぜひ実際のデータで試してみてください。