Excel にはパターン マッチング関数が組み込まれていないため、これは簡単ではありません。検証チェックでは組み込み関数のみを使用できます。
しかし、解決策があります!
幸いなことに、依存セルの状態に基づいて検証を確認できます。それが私たちがここでとるアプローチです。
1) あなたの最初の仕事は、電話番号をテキストとしてフォーマットすることです (私の関数は、あなたがこれを行ったと想定しています)。これにより、Excel は先頭のゼロを削除しません。実際には、列全体をそのようにフォーマットします。セル A1 に電話番号が含まれているとします。
2) 検証式は、1 つのセルに入れようとすると途方もなく大きくなり、保守が困難になります。私たちがすることは、検証のものを「スプレッドシート外」に置くことです。つまり、通常はユーザーには表示されない列にあります。とはいえ、わかりやすくするために列 B、C、D を使用します。(完了したら、これらを別の場所にカット アンド ペーストするだけです)。
3) B1に入れる=OR(C1,D1)
4) C1 に を入れ=IFERROR(IF(LEN(A1)=10,VALUE(A1)*0 + 1,FALSE),FALSE)
ます。これにより、ダッシュのない形式が検証されます。
5) D1 に を入れ=IFERROR(IF(OR(LEN(A1)=12,LEN(A1)=13),IF(AND(MID(A1,4,1)="-",MID(A1,8,1)="-"),VALUE(LEFT(A1,3) & MID(A1,5,3) & MID(A1,9,32767)) * 0 + 1,FALSE),FALSE),FALSE)
ます。これにより、ダッシュでフォーマットが検証されます。
私が使用している 3 つのトリックは次のとおりです。(i) IFERROR を使用して、そうでなければ結果が #VALUE になる場合に False を書き込みます。(ii) VALUE(n) * 0 + 1 パターンは、n が数値の場合は 1 を返し、n が数値でない場合は #VALUE を計算し、これを周囲の関数に委譲します。数。最後に (iii) MID 関数の 32767 を使用すると、文字列内の残りの文字を、扱いにくい RIGHT 式を使用せずに比較できます。32767 は、セル内の文字数の制限です。おそらく私はここで 1 点差です。そのため、反対票を投じないでください;-)
6) 最後に、セル A1 に対してカスタム検証を選択し、検証式として =B1 を設定します。
これでできます!3 つの形式すべてに合格します。
5555555555、555-555-5555、または 555-555-55555 で、ワイルドカード数字として 5 を使用しています。