特定の桁位置に1を含むセルと一致するように検索ツールを設定する


1

Excelで開発している検索ツールがあります。「EU」列には、それぞれ124桁の文字列を含むセルがあります。これらの文字列は、0と1で構成されます。1または0 ...を生成する124の特性があり、ユーザーは1,2,3,4,5などの特性を検索したい場合があります。簡単にするために、EU1にストリング0100100011 .....があり、0100100000または場合によっては0000100010などを含むセルを検索するとします。言い換えると、特定の桁位置に「1」を含む文字列を検索したい場合いくつかの数字の場所にいくつかの1があります..........これらの3つの組み合わせのいずれかをテストしたい場合.....

0000010000000001000000000000010010000100000001000000100100100000000001011001000001000000000000000000000000000000000000000000000000000000001010001000000010010010010010000000100000010010010000000000100100100000100100000100000000000000000000000001000100 00000000000001100000100000100010010001000100000000000001001001000000000010010010000100010000010000000000000000000000000100

これらの場所に1があります......

1000000000000000000000000000000000000000000000000000000000000000000001000000000000000000001000100000000000000000000000000000

他の場所に1があれば問題ありませんが、テスト条件に1があり、テストされた場所にその数字が0である場合はそうではありません。


別の言い方をすれば、よりわかりやすい例を使用して、私の文字列の長さはわずか5文字で、最初の5つの文字列は

EU1       10000
EU2       10001
EU3       11000 
EU4       11011
EU5       00001

指定されたすべての文字位置のリストに1s が含まれる文字列を検索します。これらの文字列のそれぞれを、aが必要な1すべての位置に含まれる変数検索文字列と比較します1。変数のゼロはワイルドカードです。別の言い方をすると、検索文字列がマスクとして機能することです。

たとえば、最初の2桁が1sである文字列(残りは気にしない)を11000検索するには、文字列EU3およびEU4 を指定して一致を取得します。(これは、A ngular AND B lue であるオブジェクトの検索を表す場合があります。)10000A ngularであるすべてのオブジェクト)での検索は1、最初の数字が、つまりEU1、EU2、EU3、およびEU4 であるすべての文字列で一致する必要があります。  11100A ngular AND B lue AND C ircularであるすべてのオブジェクト)1は、3桁目の場所に文字列が含まれていないため、一致しません。逆に、00000すべてゼロの検索文字列はワイルドカードであるため、すべての文字列に一致する必要があります。

表形式で:

検索文字列:11000 10000 11100 00000
                 ↓↓↓↓↓↓↓
EU1 10000→ 1 0000 10000→10000
EU2 10001→ 1 0001 10001→10001
EU3→ 11 000→ 1 →11000 1000年11000
EU4→ 11 011→ 1 →11011 1011 11011
EU5 00001 00001 00001→00001
                                        (なし)(すべて)

データの長さが128文字であることをごめんなさい。128文字の問題の解決策は、おそらく8文字または18文字でも機能し、その逆も同様です。「単純化」のために、文字列が1行に収まるように問題を縮小することをお勧めします。実際のデータが目を痛めます。
スコット

私は5つの文字列を持っています。ストリングA)= 10000、ストリングB)= 10001、ストリングC)= 11000ストリング、D)= 11011、ストリングE)= 00001。これらの各文字列を変数と比較したいと思います。変数A)= 11000の場合、文字列CおよびDに一致します。変数A)= 10000の場合、文字列A、B、C、およびDに一致します。変数A)= 11100の場合、文字列がないため一致しません3桁目の場所に「1」が含まれます。したがって、変数に「1」が表示される場合は常に、文字列に1も含まれていることが重要です。変数A)= 00000の場合、変数のゼロはワイルドカードであるため、ストリングA、B、C、D、およびEはすべて一致します。
BearOnFire

回答:


0

簡単にするために、データをColumn Eに入れ、Row 2から始めD2ます。検索文字列をcellに入れます。(もちろんD2、列Eはテキストとしてフォーマットする必要があります。または、'すべての数字の前に単一引用符()を入力する必要があります。)

Excelのネイティブ検索機能を使用するアプローチを選択しました。の検索文字列は11000、1桁目がa 1、2桁目がa 1、3〜5文字目がすべての値を検索することを意味します。あなたが言ったように、変数(検索文字列)のゼロはワイルドカードです。

このワイルドカードの標準表現は11???—ですので、セルD3

=SUBSTITUTE(D2, "0", "?")

質問では、結果の表示方法を指定しませんでした。1つの方法は、Columnの各値に対してE、一致するかどうかを示すことです。これを行うには、ワイルドカード文字列の各値を検索しEます。見つかった場合SEARCHは1を返し、見つからなかった場合はエラーを返します。だから我々は、適切な取得することができますTRUEFALSE入れて値を

=NOT(ISERROR(SEARCH($D$3, E2)))

に移動しF2、それを下にドラッグしてすべてのEデータをカバーします。(FINDワイルドカード文字は使用できないことに注意してください。)

ただし、一致する値のインデックスのリストがある方が便利な場合があります。を使用MATCHして列を検索することで取得できます。私は、セルに1を入れてG1

=MATCH($D$3, INDEX($E$2:$E$99, G1):$E$99, 0) + G1

セルにG299最後のデータ行に対応するようにsを調整して)これを下にドラッグ/入力します。これは、前の一致のポイントから開始してD3E列内のワイルドカード文字列(にある)を検索します。これは、一致した番号を返します。たとえば、「String D」(11011、セル内E5)は5として報告されます。「String D」を4として報告する場合は、簡単に調整できます。

提案したサンプルデータの結果は次のとおりです。

     11000
     10000
     11100
     00000

もちろんセルD3G1非表示にすることができます。そして、本当に行1でデータを開始する必要がある場合は、それを調整できます。

PS私はこれを124文字の長い値でテストしましたが、答えの両方の部分が機能しているようです。


スコット、ランダムな見知らぬ人を助けるためにこれに多くの時間を費やしたことは素晴らしいことです。私は今朝、私の机に座っています。すべての笑顔。本当にありがとうございます。
BearOnFire

さて、あなたが私にあなたに尋ねたとき、あなたは質問を明確にしました。私はあなたの努力を認めるだけです。それがあなたを助けてくれてうれしいです。好奇心から、答えのどの部分を使用していますか(列FまたはG)?
スコット

結果がtrueにならないすべての行を非表示にするために、列fを使用しています。私は154桁の文字列で終わったので、これは他の方法で悪夢だったでしょう。よくやった!
BearOnFire

0

EU列にEU1からEU100までのデータがあるとします。パターンマッチを使用してセルを検索するには:

Sub Finderr()
   For i = 1 To 100
      v = Cells(i, "EU").Text
      If Mid(v, 1, 1) = "1" And Mid(v, 70, 1) = "1" And Mid(v, 91, 1) = "1" Then
         MsgBox i
      End If
   Next i
End Sub

一致する行を出力します。


各検索では、ユーザーがカスタム文字列をプログラムする必要がありますか?ユーザーが位置リスト(1、70、91など)を投稿し、検索がそこから派生する場合は、より実用的と思われます。(たぶん、それはアプリケーションの有料版で利用可能な新しく改善されたバージョン2.0です。)
fixer1234

@ fixer1234私のコードはすでにコメントと互換性があります。
ゲイリーの学生

ええ、私は「余分なコスト」のフロントエンドについて言及していました。そのため、テスト文字列はハードコードではなく、必要に応じて構築されます(アプリケーションのフリーウェアと商用バージョン)。
fixer1234
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.