Excel에서 열의 행을 하나의 셀로 병합하는 방법은 무엇입니까?


81

A1:I
A2:am
A3:a
A4:boy 

모두 하나의 셀로 병합하고 싶습니다 "Iamaboy"
이 예제는 4 개의 셀이 1 개의 셀로 병합되는 것을 보여줍니다. 그러나 많은 셀 (100 개 이상)이 있습니다. A1 & A2 & A3 & A4무엇을 할 수 있는지를 사용하여 하나씩 입력 할 수 없습니까?


모두 수직 그룹 4 개입니까? 또는 단일 셀에 A 열을 모두 원합니까?
Alex K.

VBA에서 허용되는 답변을 고려할 때 Excel-VBA 태그도 포함하도록이 질문을 편집 할 수 있습니까? 또한 이와 같은 질문이 항상 제기 되며 여기에 답변이 있으므로 중복으로 표시하고 싶습니다.
bonCodigo

답변:


87

내 ConcatenateRange VBA 함수를 소개합니다 (이름 지정 조언에 대해 Jean에게 감사드립니다!). 셀 범위 (모든 차원, 모든 방향 등)를 가져 와서 단일 문자열로 병합합니다. 선택적 세 번째 매개 변수로 구분 기호 (예 : 공백 또는 쉼표로 분리됨)를 추가 할 수 있습니다.

이 경우 다음과 같이 작성하여 사용합니다.

=ConcatenateRange(A1:A4)

Function ConcatenateRange(ByVal cell_range As range, _
                    Optional ByVal separator As String) As String

Dim newString As String
Dim cell As Variant

For Each cell in cell_range
    If Len(cell) <> 0 Then
        newString = newString & (separator & cell)
    End if
Next

If Len(newString) <> 0 Then
    newString = Right$(newString, (Len(newString) - Len(separator)))
End If

ConcatenateRange = newString

End Function

2
이것은 불필요하지만 기능적으로 단순히 = A1 & A2 & A3 & A4를 추가하는 것으로 충분하고 A1 & ""& A2 & ""& A3 & ""& A4를 추가하면 각 셀의 값 사이에 공백이 생깁니다.
Michael Eakins 2011

3
+1하지만 나는 그것을 부를 것이다 ConcatenateRange! 어리석은 Excel CONCATENATE함수는 범위를 입력으로 받아들이지 않고 개별 셀 목록 만 별도의 인수로 받아들입니다 ...
Jean-François Corbett 2011

10
감사합니다 진! 나는 당신의 제안을 채택했습니다! 마이클, 당신은 요점을 놓쳤습니다. 수백 개의 세포에 대해 그렇게하는 것은 지루하고 무의미합니다.
aevanko

1
CHAR (10)을 전달하여 새 줄 문자를 전달함으로써 "= CocatenateRange (A1 : A10, CHAR (10))"를 수행해야합니다. :)
aevanko 2013-06-21

1
좋은 물건. Else newString = newString & (separator & Space(1))결과 문자열에서 고정 너비를 유지해야하므로로 수정되었습니다 .
Sir Crispalot 2014

149

VBA없이이 작업을 수행하려면 다음을 시도 할 수 있습니다.

  1. 데이터를 A1 : A999 (또는 그와 같은 셀)에 저장
  2. 셀 B1을 "= A1"로 설정
  3. 셀 B2를 "= B1 & A2"로 설정
  4. B2 셀을 B999까지 복사합니다 (예 : B2 복사, B3 : B99 셀 선택 및 붙여 넣기).

이제 셀 B999에 찾고있는 연결된 텍스트 문자열이 포함됩니다.


2
값을 복사하려면 :-마지막 셀 (B999)을 복사 (ctrl + c)하고 빈 셀을 클릭하고 홈 탭의 클립 보드 그룹에서 붙여 넣기 아이콘에서 값 붙여 넣기를 클릭합니다.
Kanishka

9
이것은 낭비이지만 훌륭합니다!
BH 2013

14
이것은 일회성 작업에 전혀 낭비되지 않습니다 (일반적으로 이러한 질문). 무슨 일이 일어나고 있는지 볼 수 있고 결합 작업을 쉽게 수정할 수 있기 때문에 갈 길입니다 (구분자 추가 등). 일회성 작업의 경우 VBA는 큰 망치를 사용하여 너트를 깨는 것과 같습니다.
PeerBr 2014 년

1
이것은 큰 데이터 세트에서는 작동하지 않습니다. (메모리 부족)
다니엘

1
이것은 천재입니다.
Seeker

42

내부에서 CONCATENATE사용할 수있는 TRANSPOSE당신이 그것을 (확장하면 F9) 다음 주위의 제거 {}와 같은 괄호를 권장

=CONCATENATE(TRANSPOSE(B2:B19))

된다

=CONCATENATE("Oh ","combining ", "a " ...)

CONCATENATE (TRANSPOSE (B2 : B19))

마지막에 고유 한 구분 기호를 추가해야 할 수 있습니다. 예를 들어 열 C를 만들고 해당 열을 전치합니다.

=B1&" "
=B2&" "
=B3&" "

2
멋진 .gif 일러스트레이션에
투표

24

간단한 경우에는 함수를 만들거나 코드를 여러 셀에 복사 할 필요가없는 다음 방법을 사용할 수 있습니다.

  1. 모든 셀에서 다음 코드 작성

    =Transpose(A1:A9) 
    

여기서 A1 : A9는 병합하려는 셀입니다.

  1. 셀 프레스를 떠나지 않고 F9

그 후 셀에 다음 문자열이 포함됩니다.

={A1,A2,A3,A4,A5,A6,A7,A8,A9}

출처 : http://www.get-digital-help.com/2011/02/09/concatenate-a-cell-range-without-vba-in-excel/

업데이트 : 한 부분이 모호 할 수 있습니다. 셀을 떠나지 않으면 셀이 편집기 모드에있게됩니다. 또는 셀 편집기 패널에있는 동안 F9 키를 누를 수 있습니다 (일반적으로 스프레드 시트 위에 있음).


이것이 무엇이든간에 이것은 깔끔한 아이디어 였지만 저에게는 효과가 없었습니다. 내 텍스트에 특수 문자가 많이 포함되어 있기 때문에 올바른 출력으로 결합되지 않았을 것입니다. a1 & b1 & c1 & ......을 수동으로 입력하게되었습니다.
Chris Marisic 2013 년

1
Chris,이 솔루션의 이상한 부분은 F9를 누르기 전에 셀에 계속 집중해야한다는 것입니다. 그리고 "초점 유지"란 편집자 커서가 깜박이고 텍스트를 계속 입력 할 수 있음을 의미합니다.
y.selivonchyk

1
Mac 버전의 Excel에서는 F9 키를 눌러도 작동하지 않습니다.
Adam Eberlin 2014

15

VBA의 기존 Join기능을 사용하십시오 . VBA 함수는 Excel에서 노출되지 않으므로 Join해당 기능을 노출하는 사용자 정의 함수로 래핑 합니다. 가장 간단한 형식은 다음과 같습니다.

Function JoinXL(arr As Variant, Optional delimiter As String = " ")
    'arr must be a one-dimensional array.
    JoinXL = Join(arr, delimiter)
End Function

사용 예 :

=JoinXL(TRANSPOSE(A1:A4)," ") 

배열 수식으로 입력 (사용 Ctrl- Shift- Enter).

여기에 이미지 설명 입력


이제 JoinXL1 차원 배열 만 입력으로받습니다. Excel에서 범위는 2 차원 배열을 반환합니다. 위의 예에서는 TRANSPOSE4 × 1 2 차원 배열을 4 요소 1 차원 배열로 변환합니다 (이는 TRANSPOSE단일 열 2 차원 배열이 제공 될 때 문서화 된 동작입니다 ).

수평 범위의 경우 double을 수행해야합니다 TRANSPOSE.

=JoinXL(TRANSPOSE(TRANSPOSE(A1:D1)))

내부 TRANSPOSE는 1x4 2 차원 배열을 4x1 2 차원 배열로 TRANSPOSE변환 한 다음 외부 는 예상되는 4 요소 1 차원 배열로 변환합니다.

여기에 이미지 설명 입력

이 사용법은 TRANSPOSEExcel에서 2D 배열을 1D 배열로 변환하는 잘 알려진 방법이지만 끔찍해 보입니다. 더 우아한 해결책은 JoinXLVBA 함수 에서 이것을 숨기는 것 입니다.


1
큰 테이블에서이 함수는 @aevanko의 함수보다 훨씬 빠릅니다.
Ricidleiv Tondatto

9

Excel 2016 (및 다음 버전)을 사용 하는 사람들을 위해 이제 CONCATENATE 함수를 대체 할 CONCAT 함수가 직접 제공됩니다 .

따라서 Excel 2016에서 올바른 방법은 다음과 같습니다.

=CONCAT(A1:A4)

다음을 생성합니다.

저는 남자입니다

이전 버전의 Excel 사용자의 경우 다른 답변이 관련이 있습니다.


1
나는 사무실 Windows 용 2016 PROPLUS가 설치되어 있고 없음이 CONCAT기능
oleksa

Microsoft는 CONCAT이 Excel 365 및 2019에서 사용할 수 있다고 말합니다. support.microsoft.com/en-us/office/…
Ray Woodcock

4

Mac 용 Excel 2011의 경우 다릅니다. 저는 3 단계 과정으로했습니다.

  1. A 열에 값 열을 만듭니다.
  2. B 열의 첫 번째 셀 오른쪽에서 열 값과 ","에 연결 함수를 사용하는 규칙을 만듭니다. 예를 들어 A1이 첫 번째 행이라고 가정하면 B1의 공식은 =B1입니다. N 행의 다음 행에 대한 공식은 =Concatenate(",",A2)입니다. 결과는 다음과 같습니다.
QA
, 세 쿨리
, 테스트
, Applitools
, 시각적 테스트
, 테스트 자동화
,셀렌
  1. C 열에서 모든 이전 값을 연결하는 수식을 만듭니다. 그것은 첨가물이기 때문에 당신은 결국 모든 것을 얻을 것입니다. 셀 C1의 공식은 =B1입니다. N에 대한 다른 모든 행의 경우 공식은 =Concatenate(C1,B2)입니다. 그리고 당신은 :
QA, Sekuli
QA, Sekuli, 테스트
QA, Sekuli, 테스트, Applitools
QA, Sekuli, 테스트, Applitools, 시각적 테스트
QA, Sekuli, 테스트, Applitools, 시각적 테스트, 테스트 자동화
QA, Sekuli, 테스트, Applitools, 시각적 테스트, 테스트 자동화, 셀레늄

목록의 마지막 셀이 원하는 것입니다. Windows 또는 Mac의 Excel과 호환됩니다.


하나의 수식에서 세 개의 값을 연결할 수 있습니다. A 열에 값이 있고 B1은 A1 및 B2와 같은 수식을 사용하는 복사본입니다 =CONCATENATE(B1;",";A2). 그런 다음 모든 행에 대해 셀의 오른쪽 아래로 점을 끌어 야하며 마지막 값이 결과가됩니다.
oleksa

2

SQL 문의 절 CONCATENATE을 빠르게 채우기 위해이 메서드를 사용하여 열 값을 가져 와서 그 사이에 열로 따옴표를 묶습니다 WHERE IN ().

나는 언제나 입력 =CONCATENATE("'",B2,"'",",")끌어 내려, 생성하는 것을 선택 후와 =CONCATENATE("'",B3,"'",","), =CONCATENATE("'",B4,"'",",")일반 텍스트 편집기에 붙여 따라서 행 분리를 제거, 필요한 경우 다시 붙여 복사, 등 그 전체 열을 강조 표시합니다. 작동하지만 다시 한 번 일회성 거래와 마찬가지로 항상 이것을 필요로하는 사람에게는 좋은 해결책이 아닙니다.


0

나는 이것이 정말 오래된 질문이라는 것을 알고 있지만, 나는 똑같은 일을하려고했고, "TEXTJOIN"이라는 엑셀에서 새로운 공식을 발견했습니다.

질문의 경우 다음 공식이 문제를 해결합니다.

=TEXTJOIN("",TRUE,(a1:a4))

"TEXTJOIN"의 서명은 TEXTJOIN (delimiter, ignore_empty, text1, [text2], [text3], ...)으로 설명됩니다.


Microsoft는 TEXTJOIN을 Excel 365 및 2019에서 사용할 수 있다고 말합니다. support.microsoft.com/en-us/office/…
Ray Woodcock
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.