プロが教える店舗&オフィスのセキュリティ対策術

例えばセルA1に
「りんご;ばなな;すいか;りんご」
と入力されており、重複値を除いて
セルB1に「りんご;ばなな;すいか」
と表示させたい場合の対処法を教えて頂けないでしょうか。
こうした重複値を除きたいセルが膨大にあります。

関数に乏しく、ググっても解決出来なかった為。
よろしくお願いいたします。

A 回答 (3件)

こんにちは



比較的簡単な方法を・・・

◇手操作(+関数)による方法
1)A列を選択して、「データ」-「区切り位置」でセミコロンを選択して実行
 (上記で、各語ごとにセルに分解されます)
2)各行に対してUNIQUE関数で重複を省く。
3)2の各セルに対して、TEXTJOIN関数でセミコロンを区切りとして結合

※ 最初のデータは分解されますので、残しておきたい場合は、別シートで操作するなどが必要です。
※ UNIQUE関数が使えない環境では、面倒な配列式を作成する必要があります。
※ 関数でなく重複を省く方法もあります。
 「データ」-「重複の削除」を利用することで可能ですが、列単位の処理となるため、1)でできた語群を「コピー」-「行列の入れ替え」で、一旦列に置き換える必要があります。


◇マクロによる方法
1)上記の操作を1行分で行い「マクロの記録」などで記録
2)1の内容を一般化して、ループで行数分繰り返すように修正する。

※ 質問者様がマクロが組める方なら、「マクロの記録」などは使わない方が効率の良いものができるはずです。
その場合は、元の文字列をSplitで分割して、重複を省き、再度Joinで結合すればよいでしょう。
    • good
    • 1

#2です


変数をまとめた時に間違いがあったので訂正します。
誤り
Dim s As String, k As String, i As Long, n As Long

Dim s As Variant, k As String, i As Long, n As Long
    • good
    • 0

こんにちは、


セミコロンで区切られたキーワード、データ数ってどのくらいあるのかな、、

手作業で区切り位置でデータとして作業用シートに行列の入れ替えでコピペ
、、工数多そうで私には具体的な回答が出来そうにありませんので
VBAが判れば、手っ取り早くVBAで
サンプルはA列のデータをB列に加工して出力します。
試す場合は、新規ブックで行ってください。

Sub sample()
Dim s As String, k As String, i As Long, n As Long
Dim Dic, iAry, oAry
Set Dic = CreateObject("Scripting.Dictionary")
iAry = Range(Cells(1, "A"), Cells(Rows.Count, "A").End(xlUp))
ReDim oAry(UBound(iAry, 1) - 1)
For n = 0 To UBound(iAry, 1) - 1
s = Split(iAry(n + 1, 1), ";")
For i = 0 To UBound(s, 1)
If Dic.exists(s(i)) = False Then
Dic.Add s(i), 0
If k <> "" Then
k = k & ";" & s(i)
Else
k = s(i)
End If
End If
Next
oAry(n) = k
k = ""
Dic.RemoveAll
Next n
Cells(1, "B").Resize(UBound(iAry, 1)) = WorksheetFunction.Transpose(oAry)
End Sub

念のため検証していますが、書き方は不問でお願いします。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!