2014-09-17 3 views
3

내가 하나 개의 엑셀 셀에 다음 텍스트 문자열을 말해봐 다른 셀엑셀 셀 내에서 중복을 제거

John Mary 

어떻게하면됩니까?

제가 지금까지 시도한 것은 인터넷에 대한 문제였습니다. Excel의 기본 제공 중복 제거 또는 무언가가 countif과 중복되고 ""에 대한 중복이 포함 된 해결책을 찾을 수있었습니다. Excel 함수 목록, 특히 "텍스트"범주의 Excel 함수 목록을 살펴 보았지만 하나의 셀에서 수행 할 수있는 흥미로운 것을 찾을 수 없었습니다.

+1

당신이 무엇 해봤습니까? 어떤 접근 방식을 취하고 있습니까? VBA로 해결하는 것은 사소한 문제입니다. 수식만으로는 그렇게 간단하지 않습니다. 도우미 열을 사용하여 작업을 수행 할 수 있습니다. –

+0

@RonRosenfeld, 나는 문제를 푸는 시도로 내 Q를 업데이트 할 것이다. –

+0

수식 만 사용해야하는 필요성에 감사 할 수 있지만 시트의 모양이나 단추에 매크로를 연결하여 VBA를 사용할 수없는 이유를 묻습니다. 나는 순전히 호기심이 많다. 워크 시트에 내장 된 이벤트조차도. 흠? – peege

답변

0

내가 작성한 것처럼 VBA로 해결하는 것은 간단합니다. VBA를 사용할 수없는 경우 한 가지 방법은 도우미 열을 사용하는 것입니다. 귀하의 문자열은 다음 수식을 입력

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에 채워진 마지막 셀의 내용이 결과가됩니다. 공식없이

=LOOKUP(REPT("z",99),$E$1:$E$100) 
+0

고마워, 론. 내 실제 사례에 대해이 기능은 기본적으로 작동하지 않는 것으로 보이지만 추가 고려해 볼 것입니다. –

+0

@WaldirLeoncio 샘플 데이터에서 작동합니다. 샘플이 대표가 아닌 경우 원본 질문을 편집하여 실패에 대한 정보를 제공하십시오. –

0

: 자동 열 E 범위의 마지막 셀의 내용을 반환하는 셀을 가지고 싶다면

, 당신은 같은 수식을 사용하여 텍스트를 열으로 같은 공간 구분 기호를 사용하여 출력을 조 변경하고 각 열에 개별적으로 중복 제거를 적용한 다음 결과를 조 변경하십시오. 당신이 셀에 두 개 이상의 서로 다른 이름을 가질 수 없을거야 가정

+0

입력 해 주셔서 감사합니다. 사용자 개입없이 작업하려면이 기능이 정말로 필요합니다. 그것은 클라이언트를위한 복잡한 스프레드 시트이고 나는 그가 셀을 채우지 만 아무것도하지 않기를 바란다. –

0

이 작동합니다 :

John John John Mary Mary 
John Mary 
John Mary John Mary 
John Mary Mary 
John John Mary 

그것은 John 표시됩니다 :

=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 
John John John 

A1이 비어 있으면 아무 것도 표시되지 않습니다.

+0

실제로 두 개의 별개 이름에 대해 작동합니다. 나는 그것을 잠재적 인 16 명의 이름으로 일반화 할 수 있는지 알게 될 것이다. 감사! –

+1

이 특별한 전략은 3 개의 이름에 대해 정말 털이 나기 때문에 16 개의 이름을 사용하기 전에 몇 가지 Excel 제한을 오래 버틸 수 있습니다. 그것은 기본적으로 재귀 알고리즘입니다 : A) 첫 단어 가져 오기, B) 문자열의 나머지 부분에서 제거, C) A와 B를 연결합니다. [A ~ C 단계를 B 단계의 결과에 반복합니다. 귀하의 질문은 Excel의 문자열 연산의 약점을 강조합니다. (특히 정규 표현식을 사용할 수없는 경우) 또한 Excel에서는 '평가'와 같은 함수가 없기 때문에 VBA 또는 "숨겨진"셀을 사용하지 않고도 이러한 종류의 작업을 어렵게 만듭니다. –

+0

@RickHitchcock은 후행 쉼표없이 최대 3 개의 고유 문자열에 대해이 작업을 수행 할 수있는 방법이 있습니까? – Devil07

2

답은 여기에 있습니다 : 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는 로 구분 반복 텍스트 당신은 구분 기호를 변경할 수 있습니다 포함하는 모듈에 위의 코드를 넣어

+0

13 자의 숫자로이 기능이 작동하지 않습니다. – Devil07