Vishwajeetの列には一連の部品番号があります。これらの部品番号は、特定のパターン(2つの数字、5つの文字、4つの数字、1つの文字、1つの数字、1つの文字、および1つの数字)に従う必要があります。彼は、列内のどのセルがこのパターンと異なるかを簡単に識別する方法があるかどうか疑問に思います。

データの本質に応じて、このタスクに取り組む方法はいくつかあります。たとえば、ヘルパー列で次のような式を使用できます。

=AND(LEN(A1)=15,ISNUMBER(--LEFT(A1,2)),ISTEXT(MID(A1,3,5)), ISNUMBER(--MID(A1,8,4)),ISTEXT(MID(A1,12,1)),ISNUMBER(-- MID(A1,13,1)),ISTEXT(MID(A1,14,1)),ISNUMBER(--RIGHT(A1,1)))

数式(非常に長い)は、パターンが正しいかどうかに応じて、TrueまたはFalseを返します。ただし、式には問題があります。文字の代わりに使用される記号(ドル記号やアスタリスクなど)は検出されず、数字の代わりに使用される一部の記号(ピリオドやパーセント記号など)は検出されません。その理由は、ISTEXT関数は記号をテキストと見なし、ISNUMBER関数は「1.23」のようなものを数値として解析するためです。

この不適切な記号の使用をキャッチしたい場合は、次の式を使用できます。

=AND(LEN(A1)=15,ISNUMBER(SUM(SEARCH(MID(A1,{1,2,8,9,10,11, 13,15},1),"0123456789"),SEARCH(MID(A1,{3,4,5,6,7,12,14},1), "ABCDEFGHIJKLMNOPQRSTUVWXYZ"))))

これは、SEARCH機能を使用して部品番号のすべての文字を効果的にチェックするために機能します。数式を配列数式として入力する必要があると思われるかもしれませんが(Ctrl + Shift + Enterで終了)、興味深いことに、通常の数式と配列数式として使用しても結果に違いはありません。

部品番号のパターンをかなりチェックする必要がある場合は、マクロを使用してチェックを行うことを検討してください。以下は、Like演算子を使用して、パターンが守られているかどうかを確認する短いユーザー定義関数です。

Function CheckPattern(rCell As Range) As Boolean     Dim sPattern As String

sPattern = "##[A-Z][A-Z][A-Z][A-Z][A-Z]####[A-Z]#[A-Z]#"



CheckPattern = rCell.Value Like sPattern End Function

sPattern変数の使用に注意してください。これは、Like演算子が比較を行うときに従うべきパターンです。 #記号が出現するたびに、任意の数字がこの位置に配置できることを意味します。 [A-Z]が出現するたびに、位置はAからZの範囲の1文字になる可能性があります。

パターンに含めることができる文字の意味について詳しくは、Microsoftのサイトの1つにあるこのページにアクセスしてください。

https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/like-operator

このサイトは実際にはVBAではなくVisualBasic用ですが、この特定の情報ページはVBAで問題なく機能します。

CheckPatternユーザー定義関数を使用するには、ワークシートの任意のセルに以下を配置できます。

=CheckPattern(A1)

これは、このヒントに示されている他のすべての数式と同様に、部品番号がセルA1にあることを前提としています。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(3391)は、Microsoft Excel 2007、2010、2013、および2016に適用されます。