質問: エクセルvbaで文字列の重複を削除する方法? vbaでの質問でしゅ。エクセルは2000です。 変数mystrに全角カンマで区切られた文字列データが10種類程度あります。 現在、ある条件のもとに、mystr=mystr & cell(i,2) & "、"のように取り込んで、最後にmystr=left(mystr, len(mystr) - 1) で一番最後の「、」を削除しています。 例えば、mystrの中身は、 ok建設株式会社、goo工業合資会社、mm商事有限会社、aa合名会社、株式会社bb企画、ok建設株式会社、cc工業合資会社、dd商事有限会社、ee合名会社、株式会社bb企画 のような感じです。この中には重複したデータがある可能性があります。(例ではok建設株式会社と株式会社bb企画) これを重複を排除し、変数mystrの中身を、 ok建設株式会社、goo工業合資会社、mm商事有限会社、aa合名会社、株式会社bb企画、cc工業合資会社、dd商事有限会社、ee合名会社 と変える方法はないでしょうか? あるいは、変数 mystrにデータを取り込む際にすでにmystrに入っているデータは除くような方法でもかまいません。 お知恵をお貸しくださいませ。 (o。_。)oペコッ.
回答: こんにちは。 #2 さんの >素直に配列かなんかを使って重複除去プログラムをまじめに作ったほうがいいかも? 私もそうは思ったのですが、ここの掲示板では、あまりそういう雰囲気にないということと、excel vbaでは、こういう場合は、本来、advancedfilter を使ってしまいます。 あえて、後学のためにこんなコードを披露しておきます。以下のコードは、いろんなコードを十分に検討していればよいのですが、これしかないというようなコードではありません。 なお、本来、dictionary オブジェクトにセルの値から直接入れればよいです。 今回は、文字列として出来上がっているという条件の下で書きました。 sub dictionarymethod() dim objdic as object dim mytext as string dim ardata as variant dim i as long dim v as variant dim arout as variant '本来はセルから取る const strtext = "ok建設株式会社、goo工業合資会社、mm商事有限会社、aa合名会社、株式会社bb企画、ok建設株式会社、cc工業合資会社、dd商事有限会社、ee合名会社、株式会社bb企画" set objdic = createobject("scripting.dictionary") mytext = worksheetfunction.substitute(strtext, " ", "") '半角空白抜き ardata = split(mytext, "、") i = 1 for each v in ardata if objdic.exists(v) = false then objdic.add v, i 'i はダミーです。 i = i + 1 end if next v arout = objdic.keys '出力する方法 range("a1").resize(objdic.count).value = worksheetfunction.transpose(arout) set objdic = nothing end sub