bestsource

범위를 쉼표로 구분된 문자열로 변환

bestsource 2023. 8. 22. 22:18
반응형

범위를 쉼표로 구분된 문자열로 변환

내게 이런 칼럼이 있다면,

Col1
abc
def
ghi
jkl

다음과 같은 문자열로 변환하려면 어떻게 해야 합니까?:

"abc,def,ghi,jkl"

사용할 수 있습니다.Join()1차원 배열의 모든 요소를 구분 기호로 결합하는 함수입니다.

Transpose()함수는 아래에서 차원 배열을 구성하는 데 사용됩니다(이 접근 방식은 단일 열 또는 행에서 작동함).

Sub Main()
    Dim arr
    arr = Join(Application.Transpose(Range("A2:A5").Value), ",")
    MsgBox arr
End Sub

또는 UDF로서

Public Function Merge(r As Range) As String
    Merge = Join(Application.Transpose(r.Value), ",")
End Function

만약 더 무거운 기계가 필요하다면 아래 답변에 나와 있는 솔루션 중 하나를 사용하십시오.저는 수백만 개의 세포를 포함하는 범위에 대해 비슷한 도전을 했습니다.그런 경우에는JOIN충돌로 이어질 수 있습니다.

여기에서 질문을 확인하십시오.Excel 범위를 VBA 문자열로 변환

위 링크에서 제공된 모든 접근 방식을 테스트했습니다.기능 기반 솔루션JOIN성능이 느리거나 충돌로 이어질 수도 있습니다.

모든 셀을 통과하는 일반적인 루프는 보다 훨씬 빠릅니다.JOIN기능.인정된 답변에서 따끔한 건축가는 훨씬 더 빠릅니다.문자열 작성기를 사용하면 수백만 개의 셀로 구성된 문자열이 몇 초 만에 작성됩니다.이것이 제가 최종적으로 도달한 해결책입니다.

이중-트랜스포스는 단일 행 값에 대해 문자열 조인을 수행하는 데 사용됩니다.@user2140173과 @brettdj에 감사드립니다!

debug.print join(Application.Transpose(Application.Transpose(Range("A1:G1").Value)),",")

Public Function COLSASLIST(Rng As Range) As String
    Dim tempStr1 As String
    tempStr1 = Replace(Replace(Join(Application.Transpose(Application.Transpose(Rng.Value)), ","), ",,", ""), ",,", ",")
    If Right(tempStr1, 1) = "," Then tempStr1 = Left(tempStr1, Len(tempStr1) - 1)
    COLSASLIST = tempStr1
End Function

Public Function ROWSASLIST(Rng As Range) As String
    Dim tempStr1 As String
    tempStr1 = Replace(Replace(Join(Application.Transpose(Rng.Value), ","), ",,", ","), ",,", ",")
    If Right(tempStr1, 1) = "," Then tempStr1 = Left(tempStr1, Len(tempStr1) - 1)
    ROWSASLIST = tempStr1
End Function

새 동적 워크시트 기능 사용TextJoin()Microsoft 365/Excel 2019(+/-Mac) Excel for Web의 경우 다음과 같은 범위 인수를 사용하여 감사를 작성할 수 있습니다.

  • 종대 또는
  • 혹은 한 줄
  • 연속 범위 입력(예: "A2:C5")

선택적인 두 번째 인수ExcludeBlanks빈 값을 생략할 수 있습니다.

함수 결과는 쉼표로 구분된 목록입니다(경우에 중요).(3)판독 순서는 행 단위)입니다.

Function Rng2List(rng As Range, Optional ExcludeBlanks As Boolean = True) As String
    Rng2List = WorksheetFunction.TextJoin(",", ExcludeBlanks, rng)
End Function

텍스트 결합 기능의 도움말 참조

언급URL : https://stackoverflow.com/questions/22349945/convert-range-to-comma-delimited-string

반응형