2013-03-28 1 views
2

하나의 문자열로 쓰기 : 열 FI에서Excel 수식은 말할 수 알파벳순으로 정렬, 셀 범위에서 값을 가지고 나는 현재 번역 및 언어의 목록을 가지고

| A |  B  |  C  |  D  |    F    | 
    +-------+------------+------------+------------+---------------------------+ 
1 | Name | Language 1 | Language 2 | Language 3 | Combined     | 
    +=======+============+============+============+===========================+ 
2 | John | English | Chinese | Spanish | English, Chinese, Spanish | 
3 | Wendy | Chinese | French  | English | Chinese, French, English | 
4 | Peter | Spanish | Chinese | English | Spanish, Chinese, English | 

는 다음 공식을 사용하고 있습니다 각 언어에 대한 모든 언어를 함께 사용 :

=$B2&", "&$C2&", "&$D2 

피벗 테이블에서이 열을 사용하여 동일한 언어 조합을 말할 수있는 사람에 대해보고합니다. 내 문제는 언어가 다른 순서 (예 : 행 2 및 4)로 입력되면 보고서가 다른 조합으로 표시된다는 것입니다. 세 언어 셀을 알파벳순으로 정렬하고 문자열로 쓰는 데 사용할 수있는 수식이 있습니까?

희망이 있습니다.

답변

2

나는 잠시 시간을 보냈지만 마침내 공식 솔루션을 알아 냈습니다.

=CONCATENATE(INDEX(B2:D2,1,MATCH(SMALL(COUNTIF(B2:D2,"<"&B2:D2),1),COUNTIF(B2:D2,"<"&B2:D2),0)),", ",INDEX(B2:D2,1,MATCH(SMALL(COUNTIF(B2:D2,"<"&B2:D2),2),COUNTIF(B2:D2,"<"&B2:D2),0)),", ",INDEX(B2:D2,1,MATCH(SMALL(COUNTIF(B2:D2,"<"&B2:D2),3),COUNTIF(B2:D2,"<"&B2:D2),0)))

E2

넣어이 식 다운 CTRL+SHIFT+ENTER

드래그 눌러 수식을 입력.

enter image description here

이것은 SMALL() 기능과 연계 COUNTIF() 함수를 사용하여 배열을 가진 세 개의 열을 정렬하여 작동한다. 그런 다음이 번을 세 번 반복하여 SMALL() 기능을 사용하여 표시 할 색인을 변경합니다. 그것은 따라 조금 어렵습니다,하지만 여기에

이 같은 공식이 작동하는 방법에 대한 자세한 설명에 대한 링크입니다 : 수행 작업 가져옵니다

http://www.get-digital-help.com/2009/03/27/sorting-text-cells-using-array-formula/

+0

감사합니다, 그건 분명 내가 그것을 원한대로 정확하게 작동합니다. – McShaman

+0

당신은 환영합니다 :) 재미있는 도전이었습니다 –

1

가장 좋은 방법은 VBA를 사용하는 것입니다. 쉼표 구분 기호로 각 언어를 배열로 추출하고, 정렬하고, 셀로 다시 읽어내는 루프를 작성하십시오.

EDIT : 실제로 배열에 별도의 언어를 읽는 것이 더 합당합니다. 늦어지고 있습니다

3

코드를 사용하지 않고 각 행을 선택하고 Sort을 사용하고 옵션에서 기본값 대신 Left to Right을 선택하십시오. 한 번에 한 행씩 처리해야하므로 많은 행이있는 경우 지루할 수 있습니다.이 경우 VBA 기반 솔루션이 더 실용적입니다. VBA를 솔루션에 대한

Sort left to right

,이 같은 뭔가를해야한다. 정렬해야하는 데이터가 들어있는 셀을 모두 선택한 다음 아래 매크로를 실행하십시오. 그런 다음 하나의 문자열에 결합하기 위해 사용한 것과 동일한 수식을 사용할 수 있습니다.

Sub SortEachRowAlpha() 

'First, select the range that needs to be sorted. 
' 
Dim r As Long 'row iterator: 
Dim keyRange As Range 

For r = 1 To Selection.Rows.Count 
    Set keyRange = Range(Selection.Rows(r).Address) 

    ActiveSheet.Sort.SortFields.Clear 
    ActiveSheet.Sort.SortFields.Add Key:=keyRange, _ 
     SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    With ActiveSheet.Sort 
     .SetRange keyRange 
     .Header = xlGuess 
     .MatchCase = False 
     .Orientation = xlLeftToRight 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
Next 

End Sub 
+1

것은 나를 이길 :) 조셉에 대한 너무 많은 아주 좋은 –

4

당신이 접근 할 수 있습니다를 다른 방법.

언어 이름을 함께 연결하는 대신 코드 (이진)에 vlookup을 입력 한 다음 해당 단어를 합하여 해당 조합을 나타내는 코드를 만들어야합니다. 여기서 핵심은 영어가 어디에 배치되는지는 중요하지 않다는 것입니다 (1, 2 또는 3). 별도의 시트에 Working Example

, 목록을 정의 (및 범위 "언어"이름) :

다음은 작업 예입니다. 이는 언어 입력의 유효성을 검증하는 데에도 유용합니다. ID는 2^n 씩 증가하며 여기서 n은 1,2,3 등입니다.

Languages table

배후 공식. vlookup을 수행합니다. 첫 번째 인수는 입력 테이블에서, 두 번째 인수는 조회 테이블 (위에서 정의 된 언어)이며, 세 번째 인수는 언어 테이블의 두 번째 열이며 정확하게 일치합니다 (정확히 일치하면 n/a를 반환합니다). 값이 언어로 정의되지 않았습니다).

Fomrulas behind the scenes

+0

+1 질문이 내 것이라면 이것은 분명히 대답 할 것입니다! – pnuts