%E3%80%82.png)
2 つの Excel シートがあります。1 つは、さまざまな月間銀行/クレジットカード取引の列がある「取引」とマークされています。もう 1 つのシートは、2 つの列で構成されるマッピング スプレッドシートです。最初の列は、取引シートにリストされている取引のサブ テキスト (文字列?) で、2 番目の列は取引 ID です。取引シートに数式を設定して、文字列 (サブ テキスト) を含むすべての取引がマッピング シートの分類を返すようにしたいです。複数の取引、つまり列全体に適用するコードを記述せずに、これを実行する数式はありますか?
答え1
SEARCH
および で囲まれたルックアップ式によりIFERROR
、この問題が解決されます。
使い方:
- 列の部分一致のようなものです。
セル内の数式
L31
:=IFERROR(LOOKUP(9.99999999999999E+307,SEARCH(Mapping!$M$31:$M$39,K31),Mapping!$N$31:$N$39),"")
注意
9.99999999999999E+307
Row Number
は、任意の列で持つことができる最大の数値 (長さ) と見なされ、 INDEX 範囲内で検索された値を返すために使用され、数式が値を見つけて返すのに役立ちます。この
SEARCH
関数は、あるテキスト文字列内の別のテキスト文字列の位置を返します。必要に応じて、数式内のシート名とセル参照を調整する必要があります。
答え2
はい、それはよく分かりました。
現状のままでは、やりたいことを確実に実行することはできません。
基本的な問題は、「TOYOTA CREDIT RLS」のようなものを「LEXUS FINANCIAL RLS」にどうやって結び付けるかということです。もちろん、長くて複雑な数式を使って結び付けることもできますが、その場合、「確実に」という言葉が関係してきます。そして、そのことを考慮すると、このデータは、クレジットカードがダウンロード用に提供している大量のくだらないデータのような感じがします。そうすれば、何ヶ月分ものデータを簡単に調べることができるのに、なぜ近くの行にあるこのデータではなく、さらに数行離れた、あるいは 263 行離れた別のデータと一致するのでしょうか。
2 番目のシートはマッピング シートと呼ばれるかもしれませんが、そう呼ばれるとしても、マッピングを行うからではありません。また、実際にマッピングを可能にするわけでもありません。便利なのは、最初のシートがそのままで、2 番目のシートに 3 つの列 (最初のシートの最初の列の正確な資料を含む列と、現在の 2 つの列) がある構造です。最初のシートのデータを追加し、エラーがあるかどうかを確認し、それに応じて対処するという考え方です。エラーですか? はい、コードが入るルックアップの列があります (ルックアップは、それらのコードがシート 1 に到達する方法です)。
エラーが表示された場合は、その行の項目がシート 2 のリストに含まれていないことを意味します。そのため、その行をすぐに追加し、シート 2 の 2 列目と 3 列目に入力します。エラーが修正されたら、準備完了です。エラーがないということは、新しいものはなく、データを追加した後、先に進むことができるということです (ルックアップ式によってコード列が自動的に入力されます)。
落とし穴は?ルックアップで参照するテーブルが、シート 2 の資料全体より小さくならないようにすることです。数十行、または数百行追加して記述します。新しい資料を貼り付けて行に記入しても、テーブルに残ります。時々チェックしてください。または、動的参照式を使用して、テーブルを常に完璧で正確なものにすることをお勧めします。
しかし、これを見ると、マッピング シートの既存の列 A の必要性がわかりにくいです。役に立たないように思えます。しかし、役に立つのであれば、残しておいても問題はありません。
代替案としては、その列に、最初のシートの列 A とより便利につながるマテリアルを含めることが考えられます。そうすれば、直接検索の信頼性が高まる可能性があります。そうでない場合は、そうではありません。しかし、実際の世界で検索が非常に困難または不可能になる場合は、実際に何かをマッピングしてもあまり役に立たないと思われます。
長くて複雑ですか? それぞれの検索に対する 1 つのアプローチは、ネストされたFIND()
、SEARCH()
、またはSUBSTITUTE()
数式を記述することです。これらの数式は、最初のシートのエントリの一部を取得し、一致するものが見つかるまで 2 番目のシートのすべての列を検索します。ただし、これは入力データの最大文字数が 20 文字であっても膨大な作業であり、たとえば「Toyota」が 1 種類だけではなく 2 種類のエントリで見つかった場合 (テキストに「Toyota」が含まれる自動車の支払いとメンテナンスなど)、間違った結果が返される可能性があるため、信頼性の問題が生じます。
最近気に入っているのは、文字列を 1 文字ずつ、または 2 文字ずつ、あるいは 16 文字ずつ取得し、生成されたテキストを使用する方法ですMID()
。1SEQUENCE()
文字ずつ使用する場合に最も便利ですが、2 枚目のシートに対してすべての文字をテストするために使用することもできます。つまり、5000 万通りの可能性があります... または、ファイルを開くたびにコンピューターが停止することもあります...
ああ、私が言及しているルックアップは標準的なもので、おそらくXLOOKUP()
今や素晴らしい新機能です。上で述べたすべてのテストですか? 5000 億通りの可能性ですか? それぞれが選択されたルックアップに入力され、最初に成功したものから使用する結果が得られます。つまり、その 2 倍以上の操作が必要になります...
結局のところ、素材を再構築する必要があるように見えます。
それが自分のものでなく、データもロードしていなくても、あまり問題にはなりません。作業中に再構築することはできます。私が説明したテーブルを含む 2 番目のファイルを用意します。そのファイルまたは別のシートに、実際の検索を実行する数式を設定します。次に、その結果 ( Copy|Paste|Special: Values
) をコピーして、現在のスプレッドシートに貼り付けます。これで、設計者の完璧さという概念を回避できました。スプレッドシートが変更されないにもかかわらず、設計者は望んだ結果が得られることに気付きません。Win-Win です。