• ベストアンサー

一つのセルの中で重複しているキーワードを省く方法について

デジカメで撮った写真のキャプションをエクセルで管理しています。 A列に画像番号 B列にキーワード C列に撮影日 といった具合で入力して、データ管理しています。 問題はこのB列のキーワードのところです。 例えば、富士山の写真であれば、 「日本、静岡県、富士山、山、風景、自然、屋外・・・」と入力していくのですが、 たくさんキーワードを入力するので、そのうち最初に入力したのを忘れてしまって、 同じものを二回入力してしまい、一つのセルの中で重複が出てきてしまいます。 「日本、静岡県、富士山、山、風景、自然、屋外、山、日本・・・」といった具合です。(この例では山と日本が、一つのセルの中で重複しています) 教えていただきたいのは、この一つのセルの中で、 「、」(読点)で区切られているキーワードで重複しているものを、 一つを残して、それ以外を削除する方法です。 くどういようですがこういうことです。 前)「日本、静岡県、富士山、山、風景、自然、屋外、山、日本・・・」 ↓ 後)「日本、静岡県、富士山、山、風景、自然、屋外・・・」 おそらくエクセルの関数などの範疇を超えているものかもしれないので、 こちらで質問させて頂くのは大変恐縮ですが、 何かお知恵があれば、教えていただければと思います。 どうぞよろしくお願いします。

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

無理矢理ユーザー定義関数です。(本来ならVBAでループを回して処理するところです) Function test(target As String) As String Dim strArray As Variant Dim destArray() As String Dim i As Long Dim myDic As Object Dim myKey As String Dim myKeys As Variant Dim myItem As Variant Set myDic = CreateObject("Scripting.Dictionary") strArray = Split(target, "、") For i = 0 To UBound(strArray) myKey = strArray(i) If Not myDic.Exists(myKey) Then myDic.Add myKey, "" Next i myKeys = myDic.keys ReDim destArray(0 To myDic.Count - 1) For i = 0 To myDic.Count - 1 destArray(i) = myKeys(i) Next i test = Join(destArray, "、") Set myDic = Nothing End Function 先日覚えたJoin関数を使ってみたかったもので、ご参考まで。

tamaotto
質問者

お礼

ありがとうございました。 何が行われているかは全く理解できていないのですが、、、 見事解決しました。 本当にありがとうございました。

その他の回答 (3)

noname#70958
noname#70958
回答No.4

B列に元の文字列があり、キーワードの数は50以内であるとすると、 1.D1セル: =SUBSTITUTE(TRIM(BC1)," ","、") 2.E1セル: =" "&SUBSTITUTE(B1,"、"," ")&" " 3.F1セル: =IF(LEFT(E1,2)="  ",E1,SUBSTITUTE(E1,LEFT(E1,FIND(" ",E1,2))," ")&LEFT(E1,FIND(" ",E1,2))) として、 4.F1セルをBC1セルまで右方にフィル 5.D1:BC1セルを行数分下方にフィル 6.D列の結果をコピー ⇒ B列に形式を選択して貼り付け ⇒ 値 ※4で右にフィルする列数は、キーワードの数に応じて加減して下さい。 ※1で参照するセルは、4でフィルした最右のセルを指定して下さい。 以上ご参考まで。

tamaotto
質問者

お礼

ご丁寧な回答、ありがとうございました。 「重複せずに入力すればいいじゃん」とあきれられても仕方ないかと思いましたが、教えて頂けて感謝しております。 別の方の回答で大変便利なものもありましたが、 こちらの意見も大変参考になりました。 ありがとうございました。

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.3

◆キーワードが10個まで可能な式です ★A1に「日本、静岡県、富士山、山、風景、自然、屋外、山、日本」が入力されているものとします C1=TRIM(MID(SUBSTITUTE($A1&"、","、",REPT(" ",40)),40*COLUMN(A1)-39,40))&" " D1=IF(COUNTIF($C$1:C1,TRIM(MID(SUBSTITUTE($A1&"、","、",REPT(" ",40)),40*COLUMN(B1)-39,40))&" ")>0,"",TRIM(MID(SUBSTITUTE($A1&"、","、",REPT(" ",40)),40*COLUMN(B1)-39,40))&" ") ★D1の式を右にL1までコピー B1=SUBSTITUTE(TRIM(CONCATENATE(C1,D1,E1,F1,G1,H1,I1,J1,K1,L1))," ","、") ★B1をコピーして、「形式を選択して貼り付け」で「値」にチェックして、OK ★これで、「日本、静岡県、富士山、山、風景、自然、屋外」になります ★なお、1セルに入力されている、キーワード数が10個より多ければ、これに式を対応するように修正してください ★不要な、C1:L1を削除します

tamaotto
質問者

お礼

ご丁寧な回答、ありがとうございました。 「重複せずに入力すればいいじゃん」とあきれられても仕方ないかと思いましたが、教えて頂けて感謝しております。 別の方の回答で大変便利なものもありましたが、 こちらの意見も大変参考になりました。 ありがとうございました。

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.1

replace関数で重複した文字を削除することは可能です しかし、重複した文字を見つけるのはチョット面倒ですので使いません 数が少ないのであれば、一つずつ修正されることをお奨めします 数が多くて(1000以上あるとか)とても一つずつ修正は無理というのであれば、次の操作でも可能です 結構手間が掛かりますから、本当に数が多いときにしかお奨めしません 「区切り位置」で "、" を区切り文字として複数の列に分解してはいかがでしょう □ A1セルに入力された文字列を複数の列に分ける方法  A1セルを選択する(A列にキーワードが入力されているならA列を選択してもOK)  データ → 区切り位置  「カンマやタブなどのい区切り文字によってフィールドごとに区切られたデータ」を選び「次へ」  区切り文字の「その他」を選び入力欄に "、" を入力して「完了」 <注意>分解された数だけ右の列に文字が強制的に上書きされますから、十分な空きセルを確保しておきましょう そして、関数では入力されている文字を操作することはできませんから 重複したセルの内容を直接消すことはせず、別のセルに結果を返すような関数を組みます 同じ内容のセルがあるかを判定する場合、COUNTIF関数が良く使われます □関数で重複文字(セル)を見つける方法 A2セルに次の関数を入力してみてください  =COUNTIF($A1:A1,A1) そして、A2セルを分解された文字のある列までコピーします (例:A2~J2) 2行目には1行目が重複している場合、2以上の数値が入ります □重複した文字列(セル)を空白に置き換える 続いて、A3セルに  =IF(A2>1,"",A1) と入力して、A3セルを分解された文字のある列までコピーします (例:A3~J3) 3行目には2行目に "1" の数値がある場合のみ1行目の文字列が入ります □文字列を結合する A4セルか 2行目、3行目の右端のセルに  =A2&"、"&B2&"、"&C2&"、"&D2&"、"&E2&"、"&F2&"、"&G2&"、"&H2&"、"&I2&"、"&J2 と入力 この場合、重複した文字がある場所には "、" が余分に入りますが気にしてはいけません 次の段階で処理します □余分に入った "、" を削除する 全ての重複した文字を削除したいセルを処理し終えたら、 最後にこの "、" が二つ以上になっているものを一つだけに置き換えます  編集 → 置換 検索文字に "、、" 置換文字に ""(何も指定しない) そして、「すべて置換」 3つ以上 "、" が繋がってしまっている場合もありますので、複数回繰り返してください 右端に "、" が一つだけ残ってしまうことがありますが、これも気にしてはいけません 次の段階で消します □右端の不要な "、" を見つけて削除する あとのことを考え、A列の右側に列を2列挿入しておきます C4セルに結合した文字列があるとします 挿入された列の B4セルに次の関数を入力します  =IF(RIGHT(C4,1)="、",LEFT(C4,LEN(C4)-1),C4) これで右端に付いた "、" を削除できます □関数を消して結果だけを残す 最後に関数を消して、文字列だけを残してみます B4セルをコピーしてA1セルを選択します  編集 → 形式を指定して貼り付け 「値」 を選択して 「OK」 これで、今まで入力した関数などは不要になりました 不要な列(例では B~L)を列単位で削除してしまってください 何を行っているのかをよく理解してから関数や編集操作を行ってください 間違って操作をするとレイアウトが大きく崩れてしまうことがあります ブックをコピーして、コピーした方を直すようにすると良いです

tamaotto
質問者

お礼

ご丁寧な回答、ありがとうございました。 「重複せずに入力すればいいじゃん」とあきれられても仕方ないかと思いましたが、教えて頂けて感謝しております。 別の方の回答で大変便利なものもありましたが、 こちらの意見も大変参考になりました。 ありがとうございました。

関連するQ&A

  • エクセルでの重複セルの削除

    こんにちは いつもお世話になっています。 エクセル2003を使っています。 A列に文字列があり、条件付書式で重複データのセルに背景色を付けています。 A列は、ふりがなで昇順でソートしてあります。 条件付書式は数式に =COUNTIF(A:A,A1)>1としています。 B列にはA列の特定セルの行にだけ数字データがあります  A列の特定セルとはA列の重複セルの下側のセルです。 重複データは常に2つだけ出てきます。ソートしてあるのでB列にデータの無いセルが上側に配置されているのだと思います。 例えば、 A    B 事項 該当箇所 (見出しです) 愛知  秋田 秋田 12.23.34. 石川 愛媛 愛媛 5.68.78. (A列の秋田、愛媛のセルの背景色が条件付書式で黄色くなっています) という具合です。 ここで質問ですが、 重複セルの上側のセルだけを削除する方法を教えてください。上の例ではB列にデータの無い秋田、愛媛です。 フィルタオプションで「重複セルを無視する」にチェックをいれても重複セルの下側のセルが無視されてしまいます。また、検索で色つきセルだけを表示しようとしても条件付書式ではできないようです。 わかりにくい説明ですみません。よろしくお願いします。

  • 複数のセルの中からキーワードを含むセル数(ただしユニーク数)を求める方

    複数のセルの中からキーワードを含むセル数(ただしユニーク数)を求める方法 質問させて頂きます。 題記の通りですが、例として、 n1, n2, n3, n1, n1, n1, n2, m1, m2 が各セルに格納されていたとして、 "n"を含み、かつ重複を許さずカウントする方法を知りたく思います。 (この場合、n1, n2は複数回重複しているので2回目以降はカウントせず, 3が正しい。) ご助言のほど、よろしくお願い致します。

  • キーワードを入力すると、ExcelのVLOOKUP

    キーワードを入力すると、ExcelのVLOOKUP関数のように、表の中の一番左側の列からキーワードと同じ値のセルを探して、その行にある別のセルの文字列を、ある特定の場所に自動入力させることはできますか?

  • エクセル 重複セルについて

    住所リストを制作しておりまして、 全リストから、一定の人を削除したリストを作りたいのですが、 方法が分かりません。 重複しているセルをソートできればと思うのですが、 どなたかお教えいただけますでしょうか?   A列  B列 C列  D列  1 住所 田中     太田 2 住所 斉藤     田中 3 住所 太田     木村 4 住所 木村     渡邉 5 住所 小林  B列にある氏名の中にD列の氏名が重複していたら、 下記のようなことができますでしょうか? ●C列に”重複”と出る   A列  B列 C列    1 住所 田中 重複 または ●B列と重複するD列のセルが隣に並び変えられる   A列  B列 C列  D列  1 住所 田中     田中 なお、A列とB列は一緒にしたいので、 B列だけが並び変えられることは避けたいです。 緊急SOSです! よろしくお願いいたします。

  • 重複数字の数に応じてセルに色をつける。

    このカテゴリーのエクセルの達人の方々に質問です。 どなたか回答して頂ける方がお見えでしたらよろしくお願いします。 (ちゃんとした回答ではなく、文句やクレーム等を混ぜた記載はご遠慮ください。  また私の質問が気に入らない場合は無視して頂ければ結構です。) 【質問】  添付図のとおり、1列×25行の中に数字が1~31まであり、  重複数字を含んで昇順に並んでおり、それが4列あります。  1列毎に数字を見て以下の条件にあえばセルを塗り潰します。   2個重複⇒セルを黄色に塗り潰す。   3個重複⇒セルを青色に塗り潰す。   4個重複⇒セルを緑色に塗り潰す。   5個重複⇒セルを赤色に塗り潰す。   上記を実現する方法をVBAで実現する方法が知りたいです。   【注意事項】   ・1列×25行の中にある数字の並びは毎回異なります。   ・1列×25行の中に重複数字が無い場合があります。(例:A列)   ・VBAで実現する方法~、と書きましたが、    同様のことが他の方法でも実現できればそれを教えて下さい。   ・使用するエクセルは2021です。 以上、よろしくお願いします。

  • Excelでのシート間でのセルの重複を知りたいのです

    Excel2000です。 或るブックの中に2枚のシートがあって、 それぞれA列にはたくさんの日本語の言葉が入っています。 例えば A1には「こんにちは」 A2には「さようなら」 A3には「それでは、さようなら」 ・・・ という感じに、何百・何千もの言葉が書かれています。 (A列以外は空) 1枚目のシートと2枚目のシートには、同じ言葉があり、 その重複をとりたいのです。 重複しているかどうかは、セル単位で考えます。 (「さようなら」と「それでは、さようなら」は別の言葉です。) しかし、(重複していた場合に)その言葉を1枚目のシートと2枚目のシートのいずれかに置くかの判断は、 自動で行うことはできず、人(私)がしなくてはなりません。 そこで、「この言葉は2枚のシートの両方にある!」ということを知りたいのです (例えば、セルに色をつけてくれるとか) が、どうすればよいでしょうか。 なお、シート内での言葉の重複もとらなければならないのですが その方法は既に判明しているので、 シート内での重複はないものとお考えになってもかまいません。 「一度、新しい別のシートに2枚のシートにある言葉をすべて移して、 その新しいシート内で重複をとって、 私が元の2枚のシートのいずれに入れるか判断する」 という方法もあるのですが、 多くの言葉は既に2枚のシートに正しく分かれているので、 「今更混ぜたくない」と思っています。

  • 富士山があるのは・・・山梨県?静岡県?

    日本一の山、富士山。 山梨県と静岡県の間にあります。 「富士山は何県にあるか?」と問われ、貴方はどちらの県を答えますか? ちなみに私は山梨出身なので、当然「山梨にあります」と答えます。 静岡県の方とお会いすると必ず富士山の取り合いになります。 「山梨から見たほうが表富士だ」「いやいや静岡から見たほうが・・・」(笑) 皆様の感覚を知りたいです。 何故そう思われるのかもお答え頂けると幸いです。

  • エクセルマクロを使用して異なるセルの重複データを探したい

    エクセルに以下のような値が入力されています。 A~Bは列番号 1~100は行番号 1 A B 2 11 14 3 12 15 4 13 13 . 100行まで続く A1からB100までに入力された値の中で、重複している値のセルを探して、セルの色を変えたいと考えています。 VBAを使って処理したいのですが、どなたかご教授頂けないでしょうか。宜しくお願いいたします。

  • エクセルで重複チェック

    はじめまして。 エクセルで重複チェックをしたいのですが、ちょっと特殊なチェックの仕方が必要です。 A列の1~10とA列の11~20の重複チェックをしたいのですが、その際1~10の中では重複してても良くて、1~10の中のセルと11~20の中のセルが重複してるかチェックはできますでしょうか? よろしくお願いします。<(_ _)>

  • 可視セルの重複データを除いたデータをカウントする方法

    可視セルの重複データを除いたデータをカウントする方法 Excel2003を使用しています。 A列~N列までオートフィルタを設定しています。 K列である特定の文字が入力されているセルを抽出しているときに表示されているC列のデータのうち、重複するデータを除いた個数を求めたいのですが、どうしたらよいでしょうか? 上記の状態で、C列のプルダウンに表示されているリストのデータ数が求めたい個数と同じになりますが、プルダウンに表示されているリストのデータ数をカウントする方法などあるのでしょうか? よろしくお願いします。

専門家に質問してみよう