2016-12-18 10 views
0

ダイナミックコントロールを維持するために名前付き範囲を使用するスプレッドシートがあります。私はユーザーがテキストを入力する検索ボックスを持っています(数字でも構いませんが、セルは一般的にフォーマットされています)。ユーザーが数値を入力すると、LOOKUP()式は指定された範囲の数値を検索し、どんなデータでも返します。ここでは一般的な概要です:次のようにExcel式 - テキストとして格納された範囲の参照番号

 A  B          C 
    ---------------------------------------------------- 
1 |Search: 232 <- user input (Named rnge: SearchTerm)| 
    ---------------------------------------------------- 
2 | Assc: ....          | 
    ---------------------------------------------------- 
3 | Phone: ...          | 
    ---------------------------------------------------- 

とLOOKUP()の範囲、我々は表1にそれを呼ぶことにします、次のとおりです。

------------------------------------------- 
| Associate | Rooms  | Phone Number | 
-------------------------------------------- 
| John Doe | 110-130 | xxx-xxx-xxx | 
-------------------------------------------- 
| Jane Doe | 131-150 | xxx-xxx-xxx | 
-------------------------------------------- 
| Etc...         | 
-------------------------------------------- 

私はLOOKUPを使用してセルを見つけることに成功し管理しています()ダイナミックレンジ内のセルではありません。また、私の現在の数式は多くのIF()/ AND()/ OR()文を使用しているので、必要以上に長くなっています。私は現在、ユーザー入力値が2つの数値の間にあるかどうかを見ていますが、LEFT()を使用して最初の数値を取得し、RIGHT()を使用してRoom値をスライスしています。私もMAX()をSUBSTITUTE()などの他の関数と組み合わせて使っていましたが、私の関数はあまりにも長く、ほとんどの場合4行におよぶエラーが発生します。うーん...私は知っている。長いIF/AND/ORステートメントの式ではなく、VBAなしで検索ボックスに入力したルームが関連付けられているかどうかを確認する簡単な方法はありますか?具体的には、探して:B2

これは、私が言ったように、特定の1つのセル(C5はRoom列の下のTable1の最初の行)の解決策を見つけることですが、番号は、自律的で収まる:LOOKUPで式を開始する

=IFNA(IF(AND(SearchTerm>=NUMBERVALUE(LEFT(C5,3)),SearchTerm<=NUMBERVALUE(RIGHT(C5,3))),OFFSET(C5,0,-1,1,1),LOOKUP(1E+307,FIND(" "&SearchTerm&","," "&Table1[Misc Rooms]&","),Table1[Associate])),"NO MATCHES FOUND") 

は質問に関係のないデータを参照します。ない場合、式チェック検索ルームが関連付け領域(列「ルーム」)内にある場合は、参照するに見える場合、そのmiscellaneously割り当てられた部屋、通常ではない

TL関連付け領域に、DR いただきました最も効率的な式LOOKUP()/ VLOOKUP()/ INDEX()/ MATCH()などを使用して数値がハイフネーションされた数値(テキストとして入力)とその隣の列を返すかどうかを確認します。探しているのはB2 =

+0

テキストの壁を小さくして質問に沸かせることはできますか?ルックアップするデータはどこにありますか(指定しない)あなたは何を達成したいのですか(あなたは結果を指定しません)?あなたが使用している式は何ですか?(関数に言及していますが、渡すだけです)?何が働いていないのですか(エラー?結果が間違っていますか?)あなたの担当者は、より良い質問をする方法を知っている必要があります。フィードバックのおかげで@teylyn – teylyn

+0

。公正であるためには、「数字が2つの数字の間にあるかどうかをチェックする」ことに関連する他の質問と重複することなく、質問することは難しい質問です。 「良い」質問はプログラミング言語に関連しています。私はExcelに精通していないので、それを明確かつ簡潔な説明にするために用語を知らない。私の現在の機能を差し引いてあなたの基準のすべてを満たしていますが、あなたが好きな形式ではありませんが、それにもかかわらずあります。私はそれを含めて再編集します!私はあなたに警告していないと言っていませんが、汚れています:p – soulshined

+0

数字は連続しているのでしょうか、またはギャップがある可能性はありますか? – teylyn

答えて

1

部屋の列に1つの番号だけを使用することを検討してください。または、first roomlast roomを2つの異なる列として使用してください。次に、おおよその一致を使用して、検索値以下の一致の値を返します。 VlookupまたはMatchのヘルプを1つまたはTRUEで最後のパラメータとして見てください。

表は、昇順にfirst Roomでソートする必要があります。

=INDEX(Table1[Associate],MATCH(A8,Table1[first Room],1)) 

enter image description here

編集:列を分割することはできない場合は、次の点を考慮してください

enter image description here

オプション2式:このオプションが必要になりますソートされるデータは最初の部屋番号で昇順であり、部屋番号には隙間があってはいけません。結果の例は、D3に入力された番号を参照し、セルE3である:

=INDEX(Table1[name],MATCH(D3,INDEX(LEFT(Table1[room],FIND("-",Table1[room])-1),0)+0,1)) 

これは、配列数式であり、 + を入力Ctrlキー + ずらして確認しなければなりません。

オプション3式:この式では、[部屋]列のデータはそのままです。注文は重要ではありません。唯一の条件は、数字を区切る1つのダッシュだけで、他の文字はないことです。数式はD4で入力された数値を参照するセルE4で使用されています。配列数式、ちょうどは通常を入力ヒットしない:

=LOOKUP(2,1/((D4>=LEFT(Table1[room],FIND("-",Table1[room])-1)+0)*(D4<=MID(Table1[room],FIND("-",Table1[room])+1,99)+0)),Table1[name]) 

編集2:オプションの説明3

LOOKUP(2,1/(comparison),ResultRange) - 比較がTRUEまたはFALSEの値のリストに解決されます。比較結果で1を除算すると、TRUEの場合は1、FALSEの場合は#DIV/0のエラーが生成されます。 2のルックアップは、結果リスト内の最後の1を見つけ、その等価をResultRange内の同じ位置から返します。

論理と2つの比較を組み合わせる

AND TRUE/FALSE値の1つのリストに解決される比較結果を、乗算することによって達成することができる、すなわちLOOKUP(2,1/((comparison1)*(comparison2)),ResultRange)

roomテキストを含む列。数字をスプライスすると、数字がテキストとして返されます。ユーザーが入力した検索語は実数です。これらの2つのデータ型は決して一致しないので、入力された数値をテキストに変換するか、スプライスされたテキストを実数に変換する必要があります。私たちは何かより大きいか小さいかを調べているので、両方のデータ型が数字として必要です。ですから、スプライスされたテキストを数値に変換する必要があります。これは、テキストに計算を適用することによって行うことができます。たとえば、ゼロを加算して+0を加算します。また、すべての数値が正であると確信できる場合は、1で乗算を使用することもできます。

+0

素早く答えてくれてありがとう。残念ながら、私のエントリは動的で常に変化しています(フィルターできず、行/列の位置がわからないため)このメソッドを使用することはできません。私は、その行の数がユーザーの入力数に含まれるかどうかを計算し、それが来なければTRUE/FALSEを渡すTable1に隠れた列を使用することについて考えました。しかし、最終的に私はここで学び、「ハッキー」ではない解決策を見つけたいと思っています。 – soulshined

+0

私は、列を分割する必要のない2つの式を私の答えに追加しました。 – teylyn

+0

うわー。これは素晴らしいです!ありがとうございました。 #3は私を助けましたが、これが他のやり方で行われたことを涼しく感じました。オプション3は、一致が見つからない場合はNAを返すので、部屋が連続して埋められていなくても、私の状況ではまだ動作します!私は実際にこれをchandooフォーラムにコピー&ペーストし、あなたは最も正確な解決策を持っています。真剣に、ありがとう。あなたは私に好意を持ち、オプション3を歩いて行くことができますか?あなたがしたくない場合は、まったく必要はありません。ただ質問してください。学ぼうとしている。私はステップインに「評価式」を使ってみましたが、混乱しました。 – soulshined

関連する問題