2012-01-23 3 views
1

다른 셀에 두 개 이상의 동일한 값이 있으면 셀을 병합합니다. 내 데이터에는 하나의 셀을 제외하고 두 개 이상의 레코드가 있습니다. 예 A1 이름 = Joe, A2 = Joe하지만 B1 = 화요일, B2 = 수요일. A1 = Joe와 B1 = 화요일, 수요일 한 행을 표시해야합니다. 나는 C1 = B1 & B2와 같은 또 다른 행을 만들 수 있지만 A를 통해 루프를 만들고 어떻게 일치하는 레코드가 있다면 B에있는 두 값을 병합합니다. C1, C2에 넣는 것과 같을 것이라고 생각합니다. , C3 ... = IF (A1 = A2 ..., B1 & B2, "") 그러나 A2 대신에 A를 통해 어떻게 루프 할 수 있으며 일치하는 레코드에 대해 B의 결과를 합병 할 수 있습니까?Excel 다른 셀이 일치하면 셀을 병합합니다.

답변

2

가능한 해결책은 다음과 같습니다. (나는 당신의 설정을 올바르게 이해하고 있습니다.)

단계 1) A 열의 모든 고유 이름을 새 시트로, 다시 새 열의 A 열로 분리하십시오 - Excel 2007 또는 이후 버전을 사용하는 경우 전체 열을 복사 한 다음 중복 제거 도구를 사용하면됩니다.

2 단계) 새 시트에 다음을 B2 열에 추가하십시오. 그러면 각 Name의 발생 횟수가 계산됩니다. (주 : 원시 데이터가 Sheet1에 있고 새 복사본이 Sheet2에서 처리되고 있다고 가정합니다.)

=COUNTIF(Sheet1!$A$1:$A$5,$A2) 

3 단계) C3에 다음을 추가하십시오. 이렇게하면 이름이 처음 나타나는 행 번호를 찾습니다. (중요 :이 당신의 원시 데이터가 모두 함께 그룹화 나타나는 이름을 보장하기 위해 적용되는 정렬이 필요 의미) 다음과 같은 배열 수식을 추가해야합니다 J에 열 D에

=MATCH($A2,Sheet1!$A$1:$A$5,0) 

4 단계). 그 전에 배열 수식을 사용하지 않았다면 D2 : J2 (ii) D2가 활성 셀인지 확인합니다. (iii) 수식 입력 줄에 수식을 입력합니다. (iv) ctrl + shift + press

을 입력합니다.

이것은 B는 (열의 행 반전) 제 열 발생 (단계 3), 이름 (단계 2)의 카운트가 다시 크기 및 전치

=TRANSPOSE(OFFSET(Sheet1!$B$1:$B$5,C2-1,0,B2)) 
하여 오프셋 열에 데이터를 얻어 당신에 맞게 수

은 그대로 필요하지만 당신이 일을 분리하는 쉼표를 주장하는 경우,

=IF(ISNA(D2),"",D2)&IF(ISNA(E2),"",","&E2)&IF(ISNA(F2),"",","&F2)&IF(ISNA(G2),"",","&G2)&IF(ISNA(H2),"",","&H2)&IF(ISNA(I2),"",","&I2)&IF(ISNA(J2),"",","&J2) 
J.

에 B를 이용하여 열을 당신은 K2이를 추가 할 수 있습니다, 그냥 숨기기

나는 7 개 이상의 값을 함께 사용할 필요가 없다고 가정했습니다 (예 : 7 일). 그러나 그렇게하면 배열 수식을 더 많은 열로 확장해야합니다. 최대 세트가 없으면 VBA 솔루션을 조사하는 것이 좋습니다.

+0

단계 1, 2 및 3은 괜찮 았는데 셀 A2입니다. 더 나쁜 부분은 내가 도전적으로 7보다 많은 숫자를 무제한으로 필요로한다는 것입니다. 그래서 VBA를 태그에 추가하여 누군가가 나를 궤도에 올릴 수 있기를 바랍니다. – user745778

+0

@ user745778 귀하의 권리는 제가 3 단계에서 C2를 의미했습니다. 나는 좀 더 단순한 수식을 사용하여 다른 해결책을 찾았습니다. 난 다른 대답으로 게시했습니다 – Skytunnel

3

배열 수식을 사용할 필요가없는 다른 솔루션을 발견했으며 모든 가능성을 반복 할 수 있어야합니다. 다시 말하지만, 그것은 이름으로 분류되는 원시 데이터를 필요로합니다 (모든 이름을 함께 그룹화되도록), 다음 (나는 C2를 있으리라 믿고있어) 직접 원시 데이터 후

=IF(A1<>A2,B2,C1&","&B2) 

이를 열이 수식을 추가 위의 모든 항목을 쉼표로 결합하고 이름이 변경 될 때마다 결합을 다시 설정합니다. 이 영지를 통해 원하는 데이터가있는 이름이 항상 이름의 마지막 인스턴스와 비교됩니다. 이전 예제에서 단계 2 & 3의 결과를 사용하여 마지막 인스턴스를 찾은 다음 위 공식의 결과에 대해 색인을 생성합니다.위에서

=INDEX(Sheet1!$C:$C,COUNTIF(Sheet1!$A:$A,$A2)+MATCH($A2,Sheet1!$A:$A,0) -1) 

난 당신에게 최종 답변을 원하는 이름을 가정하고있어 (3 단계 나는 C2에 넣어)하지만, 4 단계는 0을 반환

+0

위의 짧은 IF 문 귀하의 모든 훌륭한 조언을 주위에 놀고 난 후에 내가 원하는 모든 있습니다. "= IF (A1 <> A2, B2, C1 &", "& B2)"는 동일한 사람의 레코드 인 경우 다음 날을 추가하지만 둘째 레코드를 사람의 두 번째 레코드 (세 번째 등)에 추가합니다. 루핑 할 때 어떻게해야하는지 이해하지만 첫 번째 레코드가 추가 일을 수신하게하는 방법입니다. 이유 :이 데이터를 읽는 시트는 = MATCH 및 OFFSET을 사용하면 훨씬 더 많은 작업을 수행하며이 정보가 필요한 셀은 첫 번째 레코드를 읽어야합니다. – user745778

+0

나는 첫 번째 기록에 여러 날을 보여주기 위해 스크립트를 조정하려고 노력했지만 스크립트는 꽤 잘리고 건조 해 보이고 길을 찾지 못한다. 가능한가? – user745778

+0

가능합니다. 짧은'IF' 문을 그대로두면 (열을 보이지 않으면 열을 숨긴다), 열에 두 번째 수식 ('= INDEX ... '로 시작하는 문법)을 추가한다. 바로 옆에 있으면 모든 레코드에 전체 결과가 표시됩니다. INDEX 명령문 앞에 followng을 추가하여 첫 번째로만 제한 할 수 있습니다. 'IF (A1 = A2, "", INDEX ...' – Skytunnel

관련 문제