0

電話番号 # を 5555555555 => 555-555-5555 または 555-555-55555 としてのみ入力できるように、カスタムの電話形式 ###-###-#### を作成しました。

vba 以外のソリューションが必要です。つまり、セルの長さをチェックし、長さが 10 または 12 であるかどうかを検証するデータ検証ウィンドウに入力できるソリューションが必要です。

私は長い間試してきましたが、試行錯誤またはグーグルで取得できません。

私の最善の推測は(これは機能しません)

=IF((LEN(E2:E32)=12,0),( LEN(E2:E32)=10,0))

ありがとう

4

1 に答える 1

3

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 を使用しています。

于 2013-05-21T07:27:41.193 に答える