Open Office-Tabellenkalkulation (Calc) - Concatenate Textzellen mit Trennzeichen
-
22-07-2019 - |
Frage
Ich bin mit Tabellenkalkulationsprogramm Open Office und ich versuche, mehrere Textzellen verketten zusammen mit Trennzeichen. Zum Beispiel nehme ich die Zellen unter:
+--------+
| cell 1 |
+--------+
| cell 2 |
+--------+
| cell 3 |
+--------+
| cell 4 |
+--------+
| cell 5 |
+--------+
Ich mag sie mit Trennzeichen verketten, so dass das Ergebnis in einer Zelle wie dieser ist:
+----------------------------------------------+
| (cell 1),(cell 2),(cell 3),(cell 4),(cell 5) |
+----------------------------------------------+
Mein erster Gedanke war, zu versuchen, einen Makro oder etwas zu machen, aber ich glaube nicht, Open Office diejenigen unterstützt. Irgendwelche Ideen?
Lösung 2
Nun, nach viel mehr auf der Suche und Experimentieren, ich fand Sie Ihre eigenen Funktionen in Calc machen kann. Dies ist eine Funktion, die ich gemacht, dass das tut, was ich will:
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
Andere Tipps
Vielen Dank Markus für eine Lösung dieses Problems zu finden.
Hier sind einige etwas ausführlichere Anleitung zum Nutzen von Openoffice Basic-Neulinge wie mich. Dies gilt für Version 3.1:
Extras -> Makros -> Makros -> OpenOffice.org Basic ...
Und von dem Explorer-Baum wählen, wo Sie Ihre Funktion leben wollen, z.B. es kann in Ihrer eigenen Makro-Bibliothek sein (My Macros / Standard) oder direkt in der aktuellen Tabelle gespeichert.
Sie nun einen neuen Makronamen ein und klicken Sie Neu, um das OO.org Basic IDE zu öffnen. Sie erhalten eine REM sehen Erklärung und einige Stummel Sub-Definitionen. Löschen all das und ersetzen mit:
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
Der obige Code hat einige leichte Verbesserungen von Markus' original:
-
nicht mit einem Trennzeichen beginnen, wenn die erste Zelle im Bereich leer ist.
-
Ermöglicht optional Wahl des Trennzeichen (standardmäßig ""), und die Strings, die vor und nach jedem nicht-leeren Eintrag im Bereich gehen (Default auf "").
-
I umbenannt es strjoin seit "Join" ist der typische Name dieses Funktion in mehreren populären Sprachen wie Perl, Python und Ruby.
-
Variablen alle Klein
Sie nun das Makro speichern, in die Zelle, wo Sie die Verknüpfung angezeigt werden soll, und Typ:
=STRJOIN(C3:C50)
ersetzt C3:. C50 mit dem Bereich von Strings, die Sie anschließen möchten,
das Trennzeichen anzupassen, verwenden Sie stattdessen so etwas wie:
=STRJOIN(C3:C50; " / ")
Wenn Sie eine Reihe von E-Mail-Adressen verbinden wollen, könnten Sie verwenden:
=STRJOIN(C3:C50; ", "; "<"; ">")
und das Ergebnis wäre so etwas wie
<foo@bar.com>, <baz@qux.org>, <another@email.address>, <and@so.on>
Schon so oft würde ich die Leichtigkeit und Schnelligkeit ersetzen und Berechnungsoptionen sowie im Allgemeinen der schnellen Handhabung genießen & Modifizieren Optionen, wenn wieder einmal vor einer abgeladen-Datei-Listen sitzen oder was auch immer.
Ich habe nie verstanden, warum sie nicht enthalten, eine solche wesentliche Funktion von Anfang an, wirklich.
Es basiert auf Adams Skript, aber mit der Erweiterung CONCAT
von horizontal auf vertikal zu tauschen, während immer noch die Begrenzungszeichen in Ordnung zu halten.
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