web-dev-qa-db-ja.com

セルテキストに特定の形式があるかどうかを確認します

Excelセルに入力されたテキストが次の形式に従っているかどうかを判断する方法を探しています: "0000/00/00"(0は任意の1桁の数字{0,1,2,3,4,5,6、 7,8,9})。

セルのフォーマットが「0000/00/00」であるかどうかを確認する方法はありますか?

私がすでに知っていること:

  • セルのデータ検証ルールでDATEVALUE()関数を使用して確認できるので、このメソッドの問題は、有効な日付として1001/04/07を受け入れないことです。
  • テキストに2つの「/」文字が含まれていて、その長さが10文字に等しいかどうかを確認しようとしています。次のようなデータ検証式: "= OR(AND(LEN(A16)= 10、(LEN(A16)-LEN(SUBSTITUTE(A16、"/"、" "))= 2)、NOT(FALSE)))" 、この検証ルールの問題は、「0550 // 0014」のようなエントリを有効として受け入れることです。

追伸:マクロや拡張機能の使用が許可されていない環境で作業しています!

2
JackBixuis

@ AlexM がコメントとして回答を提供し、彼の戦略を使用して私の質問に回答するように求められたことを考えると、これがまさに私が必要としたことをしたことです。

データ検証ルールを次のように設定しました。

=IF(AND(ISNUMBER(VALUE(MID(A1,1,4))),ISNUMBER(VALUE(MID(A1,6,2))),ISNUMBER(VALUE(MID(A1,9,2))),MID(A1,5,1)="/",MID(A1,8,1)="/",LEN(A1)=10),TRUE)

そして、これが私が得たものです:

enter image description here

enter image description here

1
JackBixuis

それは世界できれいな公式ではありませんが、これはあなたのために働くかもしれません。 = IFERROR(IF(CONCATENATE(MID(A1,1,4)、MID(A1,6,2)、MID(A1,9,2))* 1> 1、 "TRUE")、 "FALSE")

enter image description here

お役に立てれば

2
BradR

次のユーザー定義関数は、引数の形式が適切な場合は[〜#〜] true [〜#〜]を返し、そうでない場合はFalseを返します。 )::

Option Explicit

Public Function FormatCheck(r As Range) As Boolean
    Dim s As String, s2 As String, arr, i As Long

    FormatCheck = False
    s = r(1).Text
    s2 = Replace(s, "/", "")

    If Len(s2) <> 8 Then Exit Function
    arr = Split(s, "/")

    If UBound(arr) <> 2 Then Exit Function
    If Len(arr(0)) <> 4 Then Exit Function
    If Len(arr(1)) <> 2 Then Exit Function
    If Len(arr(2)) <> 2 Then Exit Function

    For i = 1 To 8
        If Not Mid(s2, i, 1) Like "[0-9]" Then Exit Function
    Next i
    FormatCheck = True
End Function

enter image description here

2
Gary's Student