• ベストアンサー

エクセルの文字列で似たものを抽出する

いくつかあるエクセルの文字列のうち, 一番にてる文字列を抽出する方法を教えてください. たとえば,画像のように入力してある30通りの文字列のうち, ★の文字列に一番似ている文字列は1~30番の文字列のうちどれか, を知る方法について,具体的に教えていただけると嬉しいです. 関数は,不得意なのを踏まえて,教えていただけるとなお嬉しいです. どうぞよろしくお願いします.

質問者が選んだベストアンサー

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.5

規模は小さいですが、貼付画像のようなもので良いでしょうか? N2セルに次の数式を設定して下へ必要数コピーします。(一致数の最大値判定用) =SUMPRODUCT((B$1:M$1=B2:M2)*1) O2セルに次の数式を設定して右と下へ必要数コピーします。 =IFERROR(INDEX($A$1:$M$21,LARGE(INDEX(($N$2:$N$21=MAX($N$2:$N$21))*ROW(A$2:A$21),0),COUNTIF($N$2:$N$21,MAX($N$2:$N$21))+2-ROW()),COLUMNS($O2:O2)),"") 但し、データの数によって数式中の行番号を変更してください。 また、Excel 2007以降のバージョン用ですからExcel 2003以前のバージョンでは対応しない関数(IFERROR)を別の関数に置き換える必要があります。 セルの着色は条件付き書式で指定しています。 数式の解説が必要のときは補足で分らない部分を提示してください。

ayame_lovely
質問者

お礼

ありがとうございました! お礼とお返事が遅くなりまして,すみませんでした. 見えない画像に,わかりにくい質問に対して, 意図をくんだご回答をいただきましたことに,感謝しています. 早速試してみます.

その他の回答 (4)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 質問者様が添付された画像ではどのセルが何列の何行目のセルであるのか判りませんので、仮の話として1~30の番号が振られているのがB2~B31のセル範囲であるものとし、文字列が入力されている範囲がC2~BN31のセル範囲であるものとし、「★」が入力されているセルがB33セルであるものとします。  又、使用していないA列を作業列として使用するものとし、33行目のセルに入力されている文字列と同じ文字列が入力されているセルの個数が最も多い行のデータを36行目に表示し、その様な行が同数1位で複数存在する場合には、それらの行のデータを36行目以下に表示させるものとします。  その場合、まず、A2セルに次の関数を入力して下さい。 =IF(COUNTA($C$33:$BN$33)*COUNTA($C2:$BN2),SUMPRODUCT(($C$33:$BN$33=$C2:$BN2)*1),"")  次に、A2セルをコピーして、A3~A31のセル範囲に貼り付けて下さい。  次に、B36セルに次の関数を入力して下さい。 =IF(COUNTIF($A$2:$A$31,">0"),IF(ROWS($36:36)>COUNTIF($A$2:$A$31,MAX($A$2:$A$31)),"",VLOOKUP(MAX($A$2:$A$31),INDEX($A$1:$A$31,IF(ROWS($36:36)=1,ROW($B$1),MATCH(B35,$B$1:$B$31,0))+1):$B$31,2,FALSE)),"")  次に、C36セルに次の関数を入力して下さい。 =IF($B36="","",IF(ISERROR(1/(VLOOKUP($B36,$B$2:C$31,COLUMNS($B$2:C$31),FALSE)<>"")),"",VLOOKUP($B36,$B$2:C$31,COLUMNS($B$2:C$31),FALSE)))  次に、C36セルをコピーして、D36~BN36のセル範囲に貼り付けて下さい。  次に、36行目全体をコピーして、37行目以下に貼り付けて下さい。  以上です。

ayame_lovely
質問者

お礼

ありがとうございました! わかりにくい画像である上に,わかりにくいお願いだったにもかかわらず, 丁寧にご回答いただいて,ありがとうございました. とても助かりましす!!!

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

質問の例文が読めない。 テキストで10文章書き上げるべきと思う。 ーー >★の文字列に一番似ている文字列・・ 「似ている」ということの「考え方」から、勉強(質問で説明)するべきでしょう。 「一番似ている」と判定できるためには、数量化(メトリックス的)ができれば一番良いと思う。 しかしその「アルゴリズム」は、私は少しは色々本を読んでいるつもりだが、本で解説したものは見たことがない。 関連した分野の大学院での勉強テーマぐらいになるのではないか。 ーー 「似ている」とは、その文字列の中の単語の意味の重要なものの一致が、有力な(決定的な)条件になるように思う.綴りの文字数の長短でもなく、(綴りで左から考えて、)早く出てくるというのでもないだろう。 そういうことを捉えるのは形に限っただけの比較では無理だと思う。 綴りの形式ではなく、単語の意味(セマンティック。内容。)を考えないとならないが、原理的にむつかしい分野だろう。 ーー この質問は決して、「エクセルの問題」ではないと思う。言語学などに関連した分野の質問に質問しなおすべきだ。そういうことに詳しい回答候補者が見るかもしれない。 ーー >関数は 見当はずれ。 エクセルのワークシート関数なんて、EXACT関数のような単純なものでは、役立たないと思う。 複数の関数を組み合わせても無理だろう また判定のロジックが明らかになっても、判定をするにはプログラムの作成が必要になるように思う。 >関数は,不得意なのを踏まえて,教えていただけるとなお・・ なんて言っているようでは道は遠いということは私でも判る。本件に小生は回答できないのだけれど。 ーー 判定のやり方で、理論的ではないが、質問者が考え付いていて、不十分でも、とりあえずこれで十分という方法があれば、その内容を文章で、書いて質問してみてはどうか。 回答者がそれを判定のプログラム化をしてくれるかもしれない。

ayame_lovely
質問者

補足

ご指摘ありがとうございます. 勉強します!

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

添付の画像は小さすぎて判りません。 1.各セルに入る文字or数値は1桁限定でしょうか? 2.1行内に同じ文字or数値が入ることはありますか? 3.文字or数値が 同列で一致する数<数列ずれて一致する数 の場合、どちらが似ていると判定しますか? 以上が判らないと判定基準を設定できません。 まあ、通常の関数の組合せで無理とは言わないけど、 ユーザー定義関数組んだほうが、間違いないかと思いますけどね。。。 例 1 123456789A 完全一致 8 組合一致 8 2 234516789A 完全一致 5 組合一致 9 3 6754B297A8 完全一致 0 組合一致 10 ★ B23456789A 上記の場合、どれが一番似てるとしたいですか?

ayame_lovely
質問者

補足

早速コメントをいただいてりがとうございます! 確かに,あいまいな質問でしたね. 大変失礼しました. 1.各セルに入る文字or数値は1桁限定でしょうか? はい.1桁の数字です. 2.1行内に同じ文字or数値が入ることはありますか? はい.1~6の同じ数字が入っています. 3.文字or数値が 同列で一致する数<数列ずれて一致する数 の場合、どちらが似ていると判定しますか? 同じ位置の数字が一致しているかどうかを判断したいと思っています. 例 1 123456789A 完全一致 8 組合一致 8 2 234516789A 完全一致 5 組合一致 9 3 6754B297A8 完全一致 0 組合一致 10 ★ B23456789A 上記の場合、どれが一番似てるとしたいですか? 1番です! こちらの例だと,1番が10個の数字のうち9個が一致していると判断します. 不十分な質問に対して,丁寧なコメントをありがとうございました. どうぞよろしくお願いします.

回答No.1

Q、一番似ている文字列を抽出する方法を教えてください。 A、一番似ている文字列と判定するロジックを提示すべき。 1、あいうえおかきくけこ。 2、あいうえおさしすせそ。→似てる度数=28 3、あいさしうえすせおか。→似てる度数=12 P:同じ位置に出現する文字の数。 1個連続=2 2個連続=2+4 3個連続=2+4+6 Q:異なる位置に出現する文字の数。  但し、順番は一致すること。 1個連続=1 2個連続=1+2 3個連続=1+2+3 このようなロジックだと2と3の似てる度数は28と12になります。問題は、ここに言う「似てる度数」の計算式かと思いますよ。そこんとこを提示されないと・・・。

ayame_lovely
質問者

補足

早速,コメントありがとうございます! おっしゃること,ごもっともですね. 大変失礼しました. 今回知りたいのは,「同じ位置に出現する同じ文字の数」です. 指摘をしてくださって,ありがとうございます. どうぞよろしくお願いいたします.

関連するQ&A