문제

나는 Open Office의 스프레드 시트 프로그램을 사용하고 있으며 여러 텍스트 셀을 Delimeters와 연결하려고 노력하고 있습니다. 예를 들어, 아래에 세포가 있다고 가정 해 봅시다.

+--------+
| cell 1 |
+--------+
| cell 2 |
+--------+
| cell 3 |
+--------+
| cell 4 |
+--------+
| cell 5 |
+--------+

결과가 이와 같은 하나의 셀에 있도록 구분자와 연결하고 싶습니다.

+----------------------------------------------+
| (cell 1),(cell 2),(cell 3),(cell 4),(cell 5) |
+----------------------------------------------+

나의 첫 번째 생각은 매크로 나 무언가를 시도하고 만드는 것이었지만, 나는 Open Office가 그것들을지지한다고 생각하지 않습니다. 어떤 아이디어?

도움이 되었습니까?

해결책 2

글쎄, 훨씬 더 많은 검색과 실험을 한 후에, 나는 당신이 Calc에서 자신의 기능을 할 수 있음을 알았습니다. 이것은 내가 원하는 것을하는 기능입니다.

Function STRCONCAT(range)
    Dim Row, Col As Integer
    Dim Result As String
    Dim Temp As String

    Result = ""
    Temp = ""

    If NOT IsMissing(range) Then
        If NOT IsArray(range) Then
            Result = "(" & range & ")"
        Else
            For Row = LBound(range, 1) To UBound(range, 1)
                For Col = LBound(range, 2) To UBound(range, 2)
                    Temp = range(Row, Col)
                    Temp = Trim(Temp)
                    If range(Row, Col) <> 0 AND Len(Temp) <> 0 Then
                        If(NOT (Row = 1 AND Col = 1)) Then Result = Result & ", "
                        Result = Result & "(" & range(Row, Col) & ") "
                    End If
                Next
            Next
        End If
    End If

    STRCONCAT = Result
End Function

다른 팁

이것에 대한 해결책을 찾아 주셔서 감사합니다.

다음은 나와 같은 OpenOffice 기본 초보자의 이익을위한 약간 더 자세한 지침입니다. 버전 3.1에 적용됩니다.

도구 -> 매크로 -> Macros 구성 -> OpenOffice.org Basic ...

이제 기능 라이브를 원하는 Explorer 트리에서 선택하십시오. 예를 들어 마크로 라이브러리 (내 매크로 / 표준)에 있거나 현재 스프레드 시트에 직접 저장할 수 있습니다.

이제 새 매크로 이름을 입력하고 새로 클릭하여 OO.org 기본 IDE를 열십시오. REM 명령문과 스텁 하위 정의가 표시됩니다. 이 모든 것을 삭제하고 다음으로 대체하십시오.

Function STRJOIN(range, Optional delimiter As String, Optional before As String, Optional after As String)
    Dim row, col As Integer
    Dim result, cell As String

    result = ""

    If IsMissing(delimiter) Then
        delimiter = ","
    End If
    If IsMissing(before) Then
        before = ""
    End If
    If IsMissing(after) Then
        after = ""
    End If

    If NOT IsMissing(range) Then
        If NOT IsArray(range) Then
            result = before & range & after
        Else
            For row = LBound(range, 1) To UBound(range, 1)
                For col = LBound(range, 2) To UBound(range, 2)
                    cell = range(row, col)
                    If cell <> 0 AND Len(Trim(cell)) <> 0 Then
                        If result <> "" Then
                            result = result & delimiter
                        End If
                        result = result & before & range(row, col) & after
                    End If
                Next
            Next
        End If
    End If

    STRJOIN = result
End Function

위의 코드는 Markus의 원본에서 약간의 개선 사항이 있습니다.

  • 범위의 첫 번째 셀이 비어있을 때 구분 기호로 시작하지 않습니다.

  • Delimiter (기본값으로 ",") 및 범위의 각각 비 맹장 항목 (기본값으로 "")을 선택하는 문자열을 선택적으로 선택할 수 있습니다.

  • "Join"은 Perl, Python 및 Ruby와 같은 여러 인기있는 언어 로이 기능의 일반적인 이름이기 때문에 Strjoin으로 이름을 바꿨습니다.

  • 모든 소문자 변수

이제 매크로를 저장하고 조인이 나타나는 셀로 이동하여 다음을 입력하십시오.

  =STRJOIN(C3:C50)

C3 : C50을 교체하려는 문자열 범위로 교체합니다.

구분 기호를 사용자 정의하려면 대신 다음과 같은 것을 사용하십시오.

  =STRJOIN(C3:C50; " / ")

많은 이메일 주소에 가입하려면 다음을 사용할 수 있습니다.

  =STRJOIN(C3:C50; ", "; "<"; ">")

그리고 결과는 같은 것입니다

<foo@bar.com>, <baz@qux.org>, <another@email.address>, <and@so.on>

너무나 자주 나는 교체 및 계산 옵션의 용이성과 신속성뿐만 아니라 일반적으로 덤프 파일리스트 앞에 다시 앉아있을 때 빠른 처리 및 수정 옵션을 즐길 수 있습니다.

나는 그들이 왜 처음부터 그러한 필수 기능을 포함하지 않았는지 이해하지 못했습니다.

그것은 Adam의 대본을 기반으로하지만 스왑을 확장 할 수 있습니다. CONCAT 수평에서 수직으로, 구분자를 순서대로 유지하면서.

Function CONCAT2D(Optional range,   Optional delx As String, Optional dely As String, _
                                    Optional xcell As String, Optional cellx As String, _
                                    Optional swop As Integer)
    Dim xy(1), xyi(1), s(1) As Integer
    Dim out, cell, del, dxy(1) As String

    'ReDim range(2, 1)           'Gen.RandomMatrix 4 Debugging
    'For i = LBound(range, 1) To UBound(range, 1)
    '   For j = LBound(range, 2) To UBound(range, 2)
    '       Randomize
    '       range(i,j) = Int((100 * Rnd) )
    '   Next
    'Next

    out  = ""
    If IsMissing(delx)  Then : delx  = ","      : End If
    If IsMissing(dely)  Then : dely  = delx()   : End If
    If IsMissing(xcell) Then : xcell = ""       : End If
    If IsMissing(cellx) Then : cellx = xcell()  : End If
    If IsMissing(swop)  Then : swop  = 0        : End If
    dxy(0) = delx() : dxy(1) = dely()
    xyi(0) = 1      : xyi(1) = 2
    If swop = 0     Then :  s(0) = 0 : s(1) = 1
                    Else    s(0) = 1 : s(1) = 0 : End If

    If NOT IsMissing(range) Then
        If   NOT IsArray(range) _
        Then :  out = xcell & range & cellx
        Else    del = delx
                For xy(s(0)) = LBound(range, xyi(s(0))) To UBound(range, xyi(s(0))
                For xy(s(1)) = LBound(range, xyi(s(1))) To UBound(range, xyi(s(1))
                    cell = range(xy(0), xy(1))
                    If cell <> 0 AND Len(Trim(cell)) <> 0 _
                    Then :  If out <> "" Then : out = out & del : End If
                            out = out & xcell & cell & cellx
                            del = dxy(s(0))
                    End If
                Next :      del = dxy(s(1))
                Next
        End If
    Else        out = "ERR"
    End If

    CONCAT2D = out
End Function
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top