0

セルが文字列 (現時点では 2 つのうちの 1 つ) で始まり、その後にコロンが続き、それ以外 (空白ではない) であることを確認する必要があります。

すなわち:

IP Address:1.2.3.4
FQDN:a.b.c.d

したがって、これらの文字列と「:」のいずれかがセルを開始していることを確認する必要があります。「:」の周りにスペースが存在する可能性があります。

4

7 に答える 7

1

「確保」の意味がわからない…

これにより、セルが Excel 関数の 2 つの開始値のいずれかを持つかどうかがチェックされます。

=IF(OR(LEFT(A1,5)="FQDN:",LEFT(A1,11)="IP Address:"),TRUE,FALSE)

ただし、コロンの周りの間隔は考慮されていません。そのためには、私があまり得意ではない正規表現です。

-- Tushar Mehta のサイトからコードを取得します: http://www.tmehta.com/regexp/add_code.htm

次に、次のような Excel 関数を使用します。

=regexpfind(A1,"^FQDN\s*:\s*")
=regexpfind(A1,"^IP Address\s*:\s*")

または、これらを次のように 1 つの数式にマージすることもできます。

=regexpfind(A1,"^(FQDN|IP Address)\s*:\s*")
于 2013-01-29T16:34:12.007 に答える
1

セルが A4 の場合は、Data/Validation でこれを試してください。カスタム式:

=((COUNTIF(A4,"fqdn*")+COUNTIF(A4,"ip address*"))*COUNTIF(A4,"*:*")>0)  

注意: これは大文字と小文字を区別しません。

于 2013-01-29T16:40:01.940 に答える
0

VBAソリューションが必要な場合は、UDFとしてまたはVBAから使用できる関数がここにあります

Option Explicit
Option Base 1
Function CorrectColonPlace(StringtoCheck As String, StartStrings As Variant) As Variant
    Dim iPos As Long
    Dim j As Long
    Dim StrStart As String
    '
    ' return 0 if stringtocheck fails, else the position of the colon
    CorrectColonPlace = 0
    On Error GoTo FuncFail
    iPos = InStr(StringtoCheck, ":")
    If iPos > 1 Then
        If iPos < Len(Trim(StringtoCheck)) Then
        '' assume that StartStrings is either a Range or a 2-dimension single-column array
        '' containing the strings to be found at the start of stringtocheck
            If IsObject(StartStrings) Then StartStrings = StartStrings.Value2
            StrStart = Trim(Left(StringtoCheck, iPos - 1))
            For j = 1 To UBound(StartStrings)
                If StrStart = Trim(StartStrings(j, 1)) Then
                    CorrectColonPlace = iPos
                    Exit For
                End If
            Next j
        End If
    End If
FuncFail:
End Function
于 2013-01-29T18:10:16.347 に答える
0

したがって、答えの 1 つとして与えられた正規表現のアプローチが、私の解決策の基礎となりました。提供されたリンクからコードをコピーし、別のモジュールに貼り付けました。次に、RegExpFind の小さなラッパーを作成しました。これは、基本的に一致を実行し、パターンが成功したかどうかを true または false で返します。

Function RegExpTest(FindIn, FindWhat As String, _
        Optional IgnoreCase As Boolean = False)

    Dim n As Long
    Dim resultsArray As Variant     ' Defined as single variant for the benefit of excel 97
    Dim result As Boolean

    ' Don't break on errors.  Easier to check if Err<>0
    On Error Resume Next
    Err.Clear

    result = False
    resultsArray = RegExpFind(FindIn, FindWhat, IgnoreCase)

    ' Check if the returned data is an array before proceeding.
    If IsArray(resultsArray) = True Then
        n = UBound(resultsArray)

        If Err.Number = 0 Then
            If LBound(resultsArray) <= UBound(resultsArray) Then
                result = True
            End If
        End If
    End If

    RegExpTest = result

End Function

現在、カスタム検証で直接使用することはできないため、ワークシートがメタデータからオンザフライで生成される (事前に何も作成されない) ことを考えると、 hereの 2 番目の提案に従うことになりました。

私がそれを行った方法は、次の VBA コードを用意することでした (データ検証ルールを作成する方法から抜粋):

Range(Cells(firstIndex, validationFormulaCellRef), Cells(lastIndex, validationFormulaCellRef)).Formula = _
    "=RegExpTest(INDIRECT(""D""&ROW()), ""^(FQDN|IP Address)\s*:\s*([\w\d\.]+)$"", TRUE)"

Dim validationFormula As String
validationFormula = "=" & validationFormulaCellName & firstIndex & "=TRUE"

' Now, setup custom validation to check that the referenced cell's value is True
With fieldRange.Validation
    .Delete
    .add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
     Formula1:=validationFormula
    .IgnoreBlank = False
    .InCellDropdown = False
    .InputTitle = ""
    .ErrorTitle = "Input Error"
    .InputMessage = "This field must start with either 'FQDN' or 'IP Address', plus a colon ':'."
    .ErrorMessage = "This field must start with either 'FQDN' or 'IP Address', plus a colon ':'."
    .ShowInput = True
    .ShowError = True
End With

数式 (実際に機能する) を未使用のセル (EV [validationFormulaCellName] = 152 [validationFormulaCellRef]) に貼り付け、行のはるか先に配置し、データ セルのカスタム検証を設定して、数式セルの値が True かどうかを確認します。 value is the number of the first row I'm inserting, so I end up with a validation formula that like "=EV10=TRUE". 検証式 soas で INDIRECT(..) 構文を使用して、セル参照を生成しますその特定の行については、固定 (例: EV10) のセル ref は各行に対して自動的に調整されないため (すべてが EV10 を参照します) 逆に、検証式は固定されています (例: =EV10=TRUE) が調整されます。挿入時に行ごとにこれらの動作が異なる理由がわかりません。

将来的には、検証する必要がある値 (FQDN と IP アドレス) を、さまざまなデータ (列挙型など) を格納する非表示のワークシートに貼り付けることが理にかなっています。そうすれば、ハードコーディングせずにリストからプログラムで構築できます。

于 2013-02-08T14:22:36.577 に答える
0

これが最も簡単な方法かもしれません。セル A1 の値をチェックしているとします。

=IF(ISERR(FIND(":",A1)),"Bad!",IF(FIND(":",A1)<>LEN(A1), "OK", "Bad!"))

まず、この式は、セル A1 にコロンがあることを確認します。そうでない場合、それは不良セルです。含まれている場合は、コロンが最後の文字ではないことを確認します。最後の文字の場合、コロンの後にテキストがないため、不良セルです。コロンの後にテキストがあれば、それは良いセルです。お役に立てれば!

- 編集 -

コロンが最初の文字ではないことを確認するには、次の式を使用します。

=IF(ISERR(FIND(":",A1)),"Bad!",IF(OR(FIND(":",A1)=LEN(A1), FIND(":",A1) = 1), "Bad!", "OK"))"Bad!"))

この式では、コロンの前に文字列が必要です。ただし、2 つの文字列のみを確認する必要がある場合は、明示的に確認する方がよいでしょう。

于 2013-01-29T16:57:40.523 に答える
0

話しているセルに他の人が何も入力できないようにしたい場合は、カスタムのデータ検証式を使用できます。手順は次のとおりです。

  1. 検証する列の最初のセルを強調表示します
  2. リボンで [データ] をクリックし、[データ ツール] 見出しの下にある [データ検証] をクリックします。
  3. [データ検証] ウィンドウが開いている必要があります。設定タブをクリックします(実際にはデフォルトで選択されているはずです)
  4. [許可] ドロップダウン メニューで、[カスタム] をクリックします。
  5. 「式」ボックスに、次の式をコピーします。

    =IF(NOT(ISERR(FIND(":",A1))), AND(FIND(":",A1)<>LEN(A1),FIND(":",A1) <> 1), FALSE)
    

必要なセルを A1 に置き換えます。これは私の他の回答と同じ式です。特定の文字列ではなく、テキスト、コロン、その他のテキスト (この順序で) があることのみをチェックします。文字列「IP アドレス」と「FQDN」を明示的に確認するには、データ検証ダイアログでこの式を他の誰かの式に置き換えます。

于 2013-01-29T17:44:55.873 に答える
0

もう1つの解決策があります(文字列が にあると仮定A1):

=IFERROR(IF(AND(SEARCH(":",A1)>1,SEARCH(":",A1)<LEN(TRIM(A1))),"GOOD","BAD"),"BAD")

これは以下を処理します:

  1. その後にコロンが続き、その後にその他 (空白以外) が続きます。
  2. 「:」の周りにスペースが存在する可能性があります。

サンプル ファイルは共有されています (別のオプションを使用): https://www.dropbox.com/s/5rxzyzgkg8biffg/StringWithColon.xlsx

于 2013-01-29T17:36:37.687 に答える