• ベストアンサー

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

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

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

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8248)
回答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/17068)
回答No.3

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

ayame_lovely
質問者

補足

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

全文を見る
すると、全ての回答が全文表示されます。
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答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

  • excel 文字列抽出に関する質問

    エクセル文字列抽出について質問です。 例えば、 "西郷 隆盛" この文字列から、" "の前後に分けて "西郷" と "隆盛" をユーザ定義関数を用いて、それぞれ別セルに抽出する場合、どのようにモジュールに入力すれば良いのでしょうか? ご教授願います

  • Excelで複数の文字列を抽出する方法

    Excel 2007で列に、[xxxA],[xxxB],[xxxC]... といった文字列があります。 例えば、この文字列の右端が、[A]か[B]で終わる文字列のみを抽出する方法をご教授ください。 一つの文字列であれば、RIGHT関数で抽出できたのですが、2つ以上の抽出方法が判りません。 どうぞよろしくお願いいたします。

  • エクセルで文字列の最大値を抽出する方法

    文字列の最大値を抽出したいのですが 4つのセルにA、B、C、Dが入力されている場合の文字列の最大値Dを抽出する関数式を知りたい エクセルヘルプで見るとMAXAとなっていたのですが抽出する答えは”0”となってしまいます。

  • エクセル 文字列抽出について質問です

    こんにちは^^ エクセル文字列抽出について質問です。 例えば、 "ボリュームサイズ=74.53GB" この文字列から、"="の前後に分けて "ボリュームサイズ" と "74.53GB" をそれぞれ別セルに抽出する場合、どんな方法があるでしょうか? 関数、VBAマクロどちらでも結構です。 教えて下さい。お願いします。

  • エクセルで文字列の抽出

    エクセルのデータの中から、「年.月付け」(例 2007.02付け)」という文字列を すべて抽出したいのですが、「****.**付け」で関数で式を作成しても エラーメッセージがでて、うまく抽出できません。 (関数がまちがってるのかもしれませんが。。。) どのようにしたら、抽出できるのでしょうか? ご教示のほどよろしくお願いいたします。

  • エクセルの文字列を抽出する関数を教えてください!

    テキストファイルから文字列をエクセルに貼りつけ、ある条件の単語のみを抽出する関数について教えてください。 (1)あらゆる文字・記号で構成されている文章のうち、” ”(二重引用符)で囲まれた中のその文字列だけを抽出するには、どのような関数があるのでしょうか。 (2)ある文章は、 (文字数はバラバラの文章).1-文章.doc、 (文字数はバラバラの文章).2-文章.doc、  ・・・ となっているテキストがあるのですが、そのテキストのうち、「数字ー」の形式は同じなのですが、その「(数字)‐」以降「.doc」までの文章のみ抽出するには、どのような関数になるのでしょうか。 マクロは組めませんので、関数で教えて頂ければ幸いです。 宜しくお願いします。

  • エクセル セルの表示形式「文字列」だけを抽出したい

    エクセル2007を使用しています。 A列に数字が入力されていますが、そのセルの表示形式は、「標準」「数値」「文字列」とバラバラです。 この「文字列」のセルだけを抽出したいのです。 例えば、関数などを利用して、B列に表示するなど。 よろしくお願いします。

  • Excelでハイフンが入った文字列の抽出について

    A列に『12-1』、『1-5-10』、『14-15-6-3』など1桁また2桁の数字がハイフンで区切られた文字列があるとします。 そこからB列には左から2番目の数字、C列には右から2番目の数字、D列には1番右端の数字を関数で抽出したいのですが、出来ないでしょうか。 全部半角で、必ず数字は二つ以上あり、桁数は2桁までです。下記の画像のようにしたいです。 http://uproda.2ch-library.com/801593yFu/lib801593.jpg

  • エクセル2000で文字列から数値を抽出したい。

    エクセル2000で文字列から数値を抽出したい。 ワークシートのA列に下記の文字列が入力されています。 A1セル="123456 日本男子 54,321 7,654,321 12,345" A2セル="234567 東京都子 1,234 2,345 5,321" A3セル="345678 大阪太郎 99 689 9,876" データ間はスペースで区切られています。 後方2番目の数値をB列に取出す方法を教えて下さい。 B1セル=7,654,321 B2セル=2,345 B3セル=689 よろしくお願い致します。

  • エクセルで列番号を抽出したい

    エクセルで、VLOOKUP関数を使ってデーターの抽出をしたいのですが 列番号が一定ではない場合、COLUMNなど他の関数を組み合わせたいのですが どの様にすれば良いのか教えていただけないでしょうか? 例えば、 A1に「黄」の文字があり A2に「赤」 B2に「青」 C2に「黄」 D2に「緑」とある場合 A1の「黄」と同じ文字は何列目になるかを知りたいのですが、 この場合はC2に入力されているので 3と結果を出したいのです。 何か良い方法はありますでしょうか? 宜しくお願いいたします。

PLALAとアハモの契約を変更したい
このQ&Aのポイント
  • PLALA光とアハモの二重契約による支払いが厳しくなり、契約変更を考えています。
  • 条件として、PLALAの継続とインターネット、ゲームの利用が必要です。
  • 安い通信会社の薦めに困っています。
回答を見る

専門家に質問してみよう