- ベストアンサー
連続する同じ値を削除する方法を教えてください(エクセル?テキスト?)
一つのセルの中で、「犬, 犬, 猫, 猫, 猫, 男性, 女性, 女性, 女性, 女性」というような連続する同じ値を、「犬, 猫, 男性, 女性」のように、スリムな形にしたいと思っています。 つまり、繰り返し同じ値が連続している場合に、その一つだけを残して、他を削除したいのです。 エクセルのカンマによるデータ区切りを利用して、区切ったあとに、行列を入れ替えて貼り付けて、フィルタオプションの設定で、同じ値を抽出しないなどの方法を行ってみたりはしたのですが、なにぶんセルの数が膨大なため、手間がかかります。 エクセルでなくても、正規表現を用いたテキストの置換方法などでも構わないのですが、何かいい方法を教えていただけませんでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
正規表現の置換を2回実行します。 (秀丸エディタVer5.00以降で確認) ■ 1回目 検索:「(.+, )\1+」 置換:「\1」 ■ 2回目 検索:「(.+), \1$」 置換:「\1」
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
'変換するデータのあるセルを選択して以下のマクロを呼び出す。 Public Sub reduce() 'カンマで区切られたデータを集約する Dim x As Range Dim aDic, a, s Set aDic = CreateObject("Scripting.Dictionary") For Each x In Selection a = Split(x.Value, ",") For Each s In a s = Trim(s) If Not aDic.Exists(s) Then aDic.Add s, True End If Next a = aDic.keys() x.Value = Join(a, ",") Next Set aDic = Nothing End Sub
お礼
ありがとうございます。できました。ただ、セルが複数ある場合(9千近く一列に並んでいます)、上手く処理できませんでした。・・・が一つのセルに関してはかなり有効でしたので、マクロに登録しておきました。ありがとうございました。
- nekotaru
- ベストアンサー率50% (22/44)
1行目にデータがあると想定して、2行目に犬, 猫, 男性, 女性を表示させれるようにするにはVBAだとこんな感じになると思います。 おおざっぱに作りましたので、本職のかたならもっと綺麗に実現できると思いますー。 Sub test() Dim strMae As String Dim strAto As String Cells(2, 1) = Trim(Cells(1, 1)) Dim L1 As Integer Dim L2 As Integer L1 = 2 L2 = 1 Do Until Cells(1, L1) = "" If Cells(2, L2) <> Trim(Cells(1, L1)) Then L2 = L2 + 1 Cells(2, L2) = Trim(Cells(1, L1)) End If L1 = L1 + 1 Loop End Sub
お礼
ありがとうございました。VBAの使い方がよく分からないものですから、まだテストできていないのですが、使ってみたいと思います。ご協力大変ありがとうございます。
お礼
ありがとうございます。簡単に出来て一気に解決しました。残業から少し解放されそうです。