2つのセルのテキストを1つのセルに一致させるにはどうすればよいですか?


1

異なる従業員名(「最後、最初」、「最初、最後」、「最後」)などをリストする複数のデータソースを1つのワークブックと1つのテーブルに結合しています。インポートされたデータの操作に多くの時間を費やすことを避けたい。

名前の表示方法に関係なく、誰かの名前が行(A)にあるかどうかを教えてくれる数式を使用したいと思います。以下は私が使用していた式ですが、同じセル/行で姓と名が一致することを保証するものではありません。(黄色の強調表示は、間違っている例を示しています。)

誰か提案やアイデアはありますか?

式:

=IFERROR(IF(MATCH("*"&C3&"*",$A$2:$A$6,0)>=0,IF(MATCH("*"&D3&"*",$A$2:$A$6,0)>=0,1,0)),0)

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


これは、データ構造の問題のように聞こえます。1つの方法は、「一致:タブまたはワークブックを作成することです。すべてのソースから名前を入力します。次に、式を使用して同様の形式に変換します。 。マクロは、ダクトテープでリーキー屋根を修正しようとしているようであるあなたはただそうy'allのは、再びダクトテープで行くことができます春に次のリークを待っている。
bvaughn

回答:


2
=SUMPRODUCT(ISNUMBER(SEARCH(C3,Certified))*ISNUMBER(SEARCH(D3,Certified)))

Certified列Aのリストはどこにありますか

下のコメントで@Scottが指摘した特定の例のように、大文字と小文字の区別が役立つ場合(誤検知を増やすことなく誤検知を減らすことを意味します)、式の代わりにFIND使用SEARCHします。

=SUMPRODUCT(ISNUMBER(FIND(C3,Certified))*ISNUMBER(FIND(D3,Certified)))

単語全体を一致させる必要がある場合は、VBAソリューションをお勧めします。

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

ISNUMBER(..関数は、の配列を返すTRUEか、FALSE姓または名前が行に見出されるかどうかに依存します。

=ISNUMBER(SEARCH(C3,Certified)) --> {FALSE;TRUE;FALSE;FALSE;FALSE}
=ISNUMBER(SEARCH(D3,Certified)) --> {TRUE;FALSE;FALSE;FALSE;FALSE}

2つの配列を乗算すると、同じ場所(同じ行)のforと他の組み合わせの1for TRUEが返さ0れます。

上記では、彼らは戻ります {0;0;0;0;0}

行があるCarl James場合、

{FALSE;FALSE;TRUE;FALSE;FALSE}
{FALSE;FALSE;TRUE;FALSE;FALSE}

乗算すると-> {0;0;1;0;0}

したがって、はSUMPRODUCT、2番目のテーブルでテストされている行と一致する姓と名の両方を持つ行の数のカウントを返します。これは、最初のテーブルに誰かが複数回入力された場合にも検出されます。


これは実際に機能していますか?私はそれを動作させることができません。その私には思えるSEARCH(私はエクセル2013を使用しています)引数として範囲や地域を受け入れていません。
スコット

@Scottはい。のwithin_text引数として範囲を使用すると、結果に一致するSEARCHいずれ#VALUE!かの配列または数値の配列が返されます。例えば:=SEARCH(C3,Certified){#VALUE!;1;#VALUE!;#VALUE!;#VALUE!}。そして、2013
ロンローゼンフェルド

OK; すべてではなく、あなたのフォーミュラの一部を試してみて恥ずかしい(D'oh!)。他のScottと同様に名前を(部分文字列として)単純に検索することで、多くの誤検知を招く危険があります。「Shelley Johnson」が列Aにある場合は「John Shelly」に対して1、「Antonio」がある場合は「Toni An」に対しても同様に1を返します。場合にも、「ローズEnfeld」のために1を返し、あなたの名前がA列にある
スコット

@Scottはい、不規則なデータでは、偽陽性と偽陰性の問題を比較検討する必要があります。それがOPの決定です。最後の2つの例に関しては、のFIND代わりにを使用することで回避できますSEARCH。繰り返しになりますが、データのばらつきの詳細をすべて把握していなければ、最も有用なソリューションを作成することは困難です。しかし、私はFIND答えに使用の提案を追加します。
ロンローゼンフェルド

2

両方の名前を同時に検索します。2つの検索を行う必要があります。1つは名の前に、もう1つは姓の前にあります。

=IF(OR(ISNUMBER(MATCH("*" & C3 & "*" & D3 & "*",A:A,0)),ISNUMBER(MATCH("*" & D3 & "*" & C3 & "*",A:A,0))),1,0)

ISNUMBERTRUEを返す一致が見つかりました。一致するものが見つからない場合、MATCHはエラー(非数値)を返します。

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


これらのワイルドカードから多くの誤検知を得る危険があります。「Shelley Johnson」が列Aにある場合は「John Shelly」に対して1、「Antonio」がある場合は「Toni An」に対しても同様に1を返します。
スコット

1

スコット・クレイナーの答えに基づいて、私は提案します

=IF(OR(ISNUMBER(MATCH(C3 & " " & D3,A:A,0)), ISNUMBER(MATCH(D3 & " " & C3,A:A,0)),
                ISNUMBER(MATCH(D3 & ", " & C3,A:A,0))),1,0)

(すべてを1行で入力します。)これは、質問で表示される3つの可能なプレゼンテーションのいずれかを探します。

  • 「名姓」(C3 & " " & D3
  • 「姓名」(D3 & " " & C3
  • 「姓、名」(D3 & ", " & C3

ワイルドカード(*)を使用することで生じる多くの誤検知の危険を冒すことなく。もちろん、名前が他の方法で入力された場合、これは偽陰性になるリスクがあります。


0

サマリーセルを上に移動し、テキストを列に使用してコンマとスペースで分割し、個別の区切り文字として扱います。再連結する列を追加します=IF(C2="",CONCATENATE(A2," ",B2),CONCATENATE(C2," ",A2))

画像


(1)などの機能はありませんCONCAT。私はあなたが意味すると思うCONCATENATE。(2)私があなたが達成しようとしていることを理解していない=CONCATENATE(B2," ",A2,C2)。(3)これは、John Smithが列Aに「Smith、John」として存在する問題をどのように処理しますか?
スコット

@Scott 'CONCAT`は、Excel 2016で導入された機能です
ロンローゼンフェルド

1
知っておくといい。しかし、質問にはタグが付けられています[Excel 2007]。
スコット

@Scott 2007を逃しました。Concatは本当に素晴らしいアップグレードです。concatenate代わりに新しいソリューションを使用して回答を修正しました。データをテキストで列に分割することにより、姓と名がどこにあるかを知り、ifステートメントを介してそれらを結合できます。
-atclaus

私は通常、連結を使用し、すべての従業員名を同じ順序で数日かけてから、ピボットとフィルターを使用して適切なレポートに名前をコピー/貼り付けます。私は、この四半期報告書に時間をかけすぎないようにしようとしていました。
クライニアック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.