コンテンツを検証する動作中のVBマクロがあります。2つの文字列パラメーター(セル値と正規表現)を取り、TrueまたはFalseを返します。内部でCreateObject("VBscript.regexp")
を使用します。
このマクロを使用してセルを検証する必要があります。カスタムバリデーターとして設定しようとすると
=Rex(E2, "\d{1,2}\:\d{2}")
ここで、Rexは同じスプレッドシート(Alt-F11およびタイプ)で定義された関数であり、E2は検証しようとしているセルであり、「指定した名前付き範囲が見つかりません」というメッセージが表示されます。
同じスプレッドシートの他の場所(たとえば、上部の隅のセルA1)に同じ関数を挿入した場合:
=Rex(E2, "\d{1,2}\:\d{2}")
セルE2が15:07
のような正しい値を修正した場合はTRUE
、15xx
が気に入らない場合はFALSE
-半分は解決されましたが、実際には終わり。バリデーターを標準的な方法で統合する必要があります。
私はMSExcel2010を使用しています。マクロ自体は
Public Function Rex(ByVal vsStringIn As String, ByVal vsPattern As String) As Boolean
Dim objRegEx As Object
Set objRegEx = CreateObject("VBscript.regexp")
objRegEx.Global = True
objRegEx.Pattern = vsPattern
Rex = objRegEx.Test(vsStringIn)
Set objRegEx = Nothing
End Function
そして問題は次のようになります
興味深い問題。 UDFがデータ検証で常に機能するとは限らないようです! :-(
次の選択肢:
= IFERROR(IF(SEARCH( ":"、D3)、AND(ISNUMBER(VALUE(LEFT(D3、SEARCH( ":"、D3)-1)))、ISNUMBER(VALUE(RIGHT(D3、LEN(D3) -SEARCH( ":"、D3)))))、FALSE)、FALSE)がその仕事をします。良くありませんが、少なくとも機能的です! ;-)
補足:チェックする値が文字列ではなく数値(時間形式)の場合、UDFも上記の数式も機能しません!
古い質問であることは知っていますが、質問を複製したくありません。
解決策:UDF数式を別のセルに適用してから、その値をデータ検証で使用できます。色を白に変更するだけで、一時的な値を非表示にできます。