1つのExcelセルに次のテキスト文字列があるとします。
John John John Mary Mary
別のセルに数式を作成したい(メニュー関数やVBAは使用しないでください)
John Mary
これどうやってするの?
私がこれまでに試したのは、インターネットを検索して、この問題についてSOでしたが、Excelに組み込まれている重複の削除を含む解決策、またはcountif
と""
の重複の置換。Excel関数、特に「テキスト」カテゴリの関数のリストも調べましたが、1つのセルで実行できる興味深いものは見つかりませんでした。
答えはここにあります: https://www.extendoffice.com/documents/Excel/2133-Excel-remove-duplicate-characters-in-string.html
_Function RemoveDupes2(txt As String, Optional delim As String = " ") As String
Dim x
'Updateby20140924
With CreateObject("Scripting.Dictionary")
.CompareMode = vbTextCompare
For Each x In Split(txt, delim)
If Trim(x) <> "" And Not .exists(Trim(x)) Then .Add Trim(x), Nothing
Next
If .Count > 0 Then RemoveDupes2 = Join(.keys, delim)
End With
End Function
_
上記のコードをモジュールに入れます
使用=remove(A2,",")
A2には、で区切られた繰り返しテキストが含まれています。区切り文字は変更できます。
数式なし:区切り文字としてスペースを使用してテキストを列に変換し、出力を転置し、各列に個別に[重複の削除]を適用してから、結果を転置します。
セルに3つ以上の異なる名前がない場合、これは機能するはずです。
=MID(A1&" ",1,FIND(" ",A1&" "))&
MID(SUBSTITUTE(A1&" ",MID(A1&" ",1,FIND(" ",A1&" ")),"")&" ",1,
FIND(" ",SUBSTITUTE(A1&" ",MID(A1&" ",1,FIND(" ",A1&" "))&" ","")))
これらすべてについてJohn Mary
が表示されます。
John John John Mary Mary
John Mary
John Mary John Mary
John Mary Mary
John John Mary
これらすべてについてJohn
が表示されます。
John
John John
John John John
また、A1
が空白の場合、何も表示されません。
私が書いたように、VBAで解決するのは簡単です。 VBAを使用できない場合、1つの方法はヘルパー列を使用することです。
仮定:あなたの文字列はA1にあります
次の数式を入力します。
C1: =IFERROR(INDEX(TRIM(MID(SUBSTITUTE($A$1," ",REPT(" ",99)),(ROW(INDIRECT("1:" & LEN($A$1)-LEN(SUBSTITUTE($A$1," ",""))+1))-1)*99+((ROW(INDIRECT("1:" & LEN($A$1)-LEN(SUBSTITUTE($A$1," ",""))+1))=1)),99)),ROWS($1:1),1),"")
D1: =IF(COUNTIF(C1:$C$5,C1)=1,C1,"")
C1とD1を選択し、空白が表示されるまで入力します
E1: =D1
E2: =TRIM(CONCATENATE(D2," ",E1))
E2を選択して記入します。
列Eに入力された最後のセルの内容が結果になります。
列Eの範囲の最後のセルの内容を自動的に返すセルが必要な場合は、次のような数式を使用できます。
=LOOKUP(REPT("z",99),$E$1:$E$100)
あなたがリストを作成しているのであれば、うまくいくかもしれない解決策を見つけました。
上記のセルを現在の行と組み合わせてリストを作成する場合、次のコードを使用して、値が上記のセルにすでに存在するかどうかを確認できます。
if(iserror(find(value_to_be_added,previous_concatenation)),
previous_concatenation&" "&value_to_be_added,previous_concatenation)