2

この質問は、私が持っていた別の投稿に端を発しています。(各セルで文字列がランダムである特定の文字列については、Excelの列を検索するを参照してください)

ワークブックの例

上の画像を参考にして、E列を「ルックアップ値」としてB列(実際には1000行以上)を検索しようとしています。最終的な目標は、名前を「ちょうど」列Cに表示することです。トリックは、ランダムに生成されたすべての文字が名前を含むことです。以下は、データシートをどのように見せたいかです。数式またはモジュールは機能するはずですが、vlookupおよびその他のルックアップ関数を機能させることができません。

ここに画像の説明を入力してください

4

2 に答える 2

11

ワークシート関数アプローチの場合、C3に入力して、次の式を入力できます。

=LOOKUP(8^5,SEARCH(E$3:E$7,B3),E$3:E$7)

定数8^5 = 32768は、LOOKUPが最後に一致する値を返すように、可能な最大文字列長よりも大きくなるように選択されます。文字列が見つからない場合、数式は#N/Aを返します。

于 2012-06-20T15:14:19.980 に答える
4

別の可能性は、最初にassyliasが投稿するよりも理解しやすいかもしれませんが、もう少し時間がかかるかもしれません(1,000行では、それほど重要ではないと思います)。

これには、列Eの範囲にmyNamesという名前を付ける必要があります(または、任意の名前でコードを更新するか、Range( "E1:E6")と書くだけです)。また、列Bからランダムな値を移動する場合は、コードでもそれを更新します。

Sub findString()

Dim celString As Range, rngString As Range, celSearch As Range, rngSearch As Range
Dim wks As Worksheet

Set wks = Sheets("Sheet1") 'change sheet reference to whatever your sheet name is

Set rngString = wks.Range("myNames")
Set rngSearch = Intersect(wks.UsedRange, wks.Range("B1").EntireColumn)

For Each celString In rngString
    For Each celSearch In rngSearch
        If InStr(1, celSearch.Text, celString.Value) > 0 Then
            celSearch.Offset(, 1) = celString.Value
        End If
    Next
Next

End Sub

私はあなたの元の質問にも取り組んだので、Siddharthの回答からカウントを取得してから、これを実行するか、上記のassyliasのコードを実行して、列の横に名前を取得することをお勧めします。ボタンをシートに配置するか、[マクロ]ダイアログボックスを使用してマクロを実行することができます。

于 2012-06-20T14:35:50.533 に答える