sourcetip

MS Excel - 구분 기호 포함

fileupload 2023. 4. 13. 21:05
반응형

MS Excel - 구분 기호 포함

숫자가 적힌 긴 스프레드시트가 있어요.

4364453;2432432;2342432와 같이 구분된 하나의 문자열로 가져와야 합니다.

제가 할 수 있는 일:

=concat(A1:A2000)

구분 기호 없이 하나의 문자열로 병합됩니다. 범위를 지정할 때 구분 기호 옵션을 찾을 수 없습니다.

감사해요.

대신 TEXTJOIN()을 사용합니다.

=TEXTJOIN(";",TRUE,A1:A2000)

OFFICE 365 Excel이 없는 사용자는 TEXTJOIN 함수를 모방한 이 UDF를 사용하십시오.

이를 워크북에 첨부된 모듈에 넣고 위의 공식을 사용하여 문의합니다.

Function TEXTJOIN(delim As String, skipblank As Boolean, arr)
    Dim d As Long
    Dim c As Long
    Dim arr2()
    Dim t As Long, y As Long
    t = -1
    y = -1
    If TypeName(arr) = "Range" Then
        arr2 = arr.Value
    Else
        arr2 = arr
    End If
    On Error Resume Next
    t = UBound(arr2, 2)
    y = UBound(arr2, 1)
    On Error GoTo 0

    If t >= 0 And y >= 0 Then
        For c = LBound(arr2, 1) To UBound(arr2, 1)
            For d = LBound(arr2, 1) To UBound(arr2, 2)
                If arr2(c, d) <> "" Or Not skipblank Then
                    TEXTJOIN = TEXTJOIN & arr2(c, d) & delim
                End If
            Next d
        Next c
    Else
        For c = LBound(arr2) To UBound(arr2)
            If arr2(c) <> "" Or Not skipblank Then
                TEXTJOIN = TEXTJOIN & arr2(c) & delim
            End If
        Next c
    End If
    TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim))
End Function

저와 같이 작업용 컴퓨터에 TEXTJOIN이 없는 이전 버전의 Excel이 있는 경우 매크로를 사용할 수 있습니다.여기 한 줄 또는 한 줄에 해당하는 간단한 모형이 있습니다.결과 문자열을 배치할 위치를 클릭한 다음 매크로를 실행하십시오.

예제 데이터와 같이 하나의 행 또는 하나의 열만 처리된다는 점에 유의하십시오.A1의 연결과 같은 작업을 수행할 경우:C3 다른 논리가 필요합니다.

Sub ConcatenateRange()

Dim resultCell As Range
    Set resultCell = Selection

Dim concatRange As Range
    Set concatRange = Application.InputBox("Select a range", "Obtain Range Object", Type:=8)

Dim optionalSeparator As String
    optionalSeparator = Chr(34) & InputBox("Any Separator?") & Chr(34)

Dim outputString As String
    outputString = "=TRIM(CONCATENATE("

Dim rangeSize As Integer
    rangeSize = concatRange.Columns.count + concatRange.Rows.count

For Each item In concatRange
    outputString = outputString & item.Address(RowAbsolute:=False, ColumnAbsolute:=False)

    rangeSize = rangeSize - 1

    If (rangeSize > 1) Then
        outputString = outputString & ", " & optionalSeparator & ", "
    Else
        outputString = outputString & "))"
    End If
Next

resultCell.formula = outputString

End Sub

TRANSPOSE 기능 사용:

=TRANSPOSE(A1:A200)

공식을 선택하고 히트합니다.F2기본 구분 기호가 있는 긴 문자열이 표시됩니다.','필요한 딜리미터로 대체할 수 있습니다.

Scott Craner의 답변에 대해 저는 작은 개선을 더하고 싶었습니다. 아무것도 수행되지 않고 빈 값을 건너뛸 수 있는 다양한 셀을 연결할 때 말입니다.결과를 할당하는 행 대신:

  TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim))

오류 없이 반품하기 위해 결과가 비어 있는지 확인했습니다.

    If TEXTJOIN <> "" Then
        TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim))
        Else
        TEXTJOIN = ""
    End If

제대로 찾아봤으면 많은 수고를 덜 수 있었을 텐데...2012년부터 여기에 쓴 'MyConCat()'이 있습니다.간단하지만 매우 효과적입니다.

언급URL : https://stackoverflow.com/questions/42165179/ms-excel-concat-with-a-delimiter

반응형