セル「TestChars」のすべての文字が許可されていることを確認するVBA式を作成しています。物事をさらに困難にするために、私はこの式を単一の細胞ではなく細胞の範囲に作用させたいと考えています。VBAを使用してExcelでセルを検証するためのベクトル式
現在のコードが動作するようです:
Option Explicit
Public Function AllCharsValid(InputCells As Range, AllowedChars As String) As Boolean
' Check that all characters in InputCells are among
' the characters in AllowedChars
Dim Char As String
Dim Index As Integer
Dim RangeTestChars As Range
Dim TestChars As String
For Each RangeTestChars In InputCells
TestChars = RangeTestChars.Value
For Index = 1 To Len(TestChars)
Char = Mid(TestChars, Index, 1)
If InStr(AllowedChars, Char) = 0 Then
AllCharsValid = False
Exit Function
End If
Next Index
Next RangeTestChars
AllCharsValid = True
End Function
私は、次の質問があります。
- 式が範囲をとり、単一ブール値を返します。私はベクトル化された関数を好んでいます。ここで、入力範囲が与えられると、対応する範囲のブール値が得られます。 'EXACT'のような組込み式のように思えます(実行するにはctrl-shift-enterを押す必要があり、中括弧はどこに入力するか)。ユーザー定義関数でそれを行う方法はありますか?
- 私はプログラミングに初心者ではありませんが、私はVBAに完全に新しいです(私は今日始めました)。上記のコードで明らかな問題、奇妙なことはありますか?
- 特殊文字、極端に長いテキスト、または数式が失敗する特定の入力値がありますか?
- 同じ効果を達成するための簡単な方法はありますか?コードは遅いですか?
- excelで組み込み式を入力すると、候補と自動補完が得られます。これは私の公式ではうまくいかないようですが、私はあまりにも多くを求めているのですか、これを達成することは可能でしょうか?
この質問には弱い関連のサブ疑問がいくつか含まれていることが分かります。サブ回答も非常にうれしいです。
条件付き書式設定ルールで複数の値を返す配列式を使用できないと思います。 CFは常にセル単位であり、特定の範囲のセルにtrue/falseの返された配列を「分配」するメカニズムはないと思います。 –
私は最初の質問を言い換えようとします。 '= AND(EXACT(A1:A10、B1))'と入力すると、 '= AND(EXACT(A1:A10、B1))'と入力してctrl-shift-enterを押すと、 } 'とベクトル的に動作します。つまり、EXACTは入力範囲を取り、ブール値の対応する範囲(または配列?)を返します。ALL関数はこの配列を崩壊させ、範囲内のすべてのセルがB1と完全に同じかどうかを示します。現在、ある範囲の値に対して関数を使用するには、 '= AllCharsValid(A1:A10、B1)'を実行します。 '='(AllCharsValid(A1:A10、B1)) 'を実行することはできますか?' EXACT '関数については、 – JavaNewbie
はい、関数からブール値の配列を返します。各ブール値は各セルの要素です。それはなぜあなたがそれをやりたいのかはっきりしません。なぜなら、許可されていない文字の最初のインスタンスでFalseを返す代わりに、すべてのセルをテストする必要があるからです。 –