Hallo Micha,
ich habe mal ein kleines Makro (s.u.) geschrieben, welches das von Dir skizzierte Problem löst.
Da hier in den Liste-Mails die Makro-Layouts immer "versaubeutelt" werden an "Cc: michakuehn@habmalnefrage.de" die Dateianhänge:
+ "Name_Gruppe.txt" (Makro)
+ "Name_Gruppe.ods" (CALC-Beispieltabellen)
[1] Das 'Tabellenblatt 1' kann beliebig viele 'Gruppe'-Spalten beinhalten, wobei Du die Gruppen-Namen frei wählen kannst, muss also nicht "Gruppe 1", "Gruppe 2" ... sein.
[2] Das 'Tabellenblatt 1' kann beliebig viele Zeilen enthalten.
[3] Die Tabellenblätter kannst Du auch umbenennen, da die Tabellenblätter über Indizes angesprochen werden, müssen also nicht "Tabellenblatt 1" und Tabellenblatt 2" heißen.
[4] Der Wahrheitswert sollte von der Art 'Zeichen' sein. Wenn Du beispielsweise anstatt "x" als Wahrheitswert "ja" haben möchtest, musst Du im Makro folgende Zeile anpassen: Const WD = "x" => Const WD = "ja"
[5] Das SORTIEREN habe ich mir im Makro gespart, sind manuell eh nur wenige MausKlicks:
+ TB2 markieren Spalte "B"
+ [Daten]->[Sortieren]->[Erweiterte Auswahl]->[OK]
Und falls Dein Interesse an Makro-Programmierung "geweckt" worden sein sollte, hier findest Du Informationen:
StarBasic/OpenOffice.org Basic FAQ (einfache Beispiele zum direkten Ausprobieren)
http://www.dannenhoefer.de/faqstarbasic/index.html
BASIC-Makros für OpenOffice und LibreOffice (umfassendes "Standardwerk", manchmal nicht ganz leicht verständlich, inklusive Beispiele)
www.uni-due.de/~abi070/count.php?id=OOME_3_0_deutsch.odt
www.uni-due.de/~abi070/count.php?id=OOME_3_0_deutsch.pdf
Makro Grundlagen Band 1
https://www.tintal.de/index.php/buecher/fbuecher/31746-makro-grundlagen-band-1
Makro Grundlagen Band 2
https://www.tintal.de/index.php/buecher/fbuecher/31747-makro-grundlagen-band-2
Makro Kochbuch
https://www.tintal.de/index.php/buecher/fbuecher/31737-makro-kochbuch
Wenn noch Fragen, lass einfach hören ..
Viele Grüße
Hans-Werner :-))
==================== MAKRO ====================
Option Explicit
Sub Name_Gruppe
Dim aGN() As String ' arr Gruppen Namen
Dim iTB As Integer ' idx Tabellen Blatt
Dim oCur As Object ' obj Cursor
Dim oCD As Object ' obj CALC Dokument
Dim oTB1 As Object ' obj Tabellen Blatt 1
Dim oTB2 As Object ' obj Tabellen Blatt 2
Dim oZ As Object ' obj Zelle
Dim N As String ' Name
Dim W As String ' Wahrheitswert
Dim XaktTB1 As Long ' X aktuell Tabellen Blatt 1
Dim XaktTB2 As Long ' X aktuell Tabellen Blatt 2
Dim XmaxTB1 As Long ' X maximal Tabellen Blatt 1
Dim XmaxTB2 As Long ' X maximal Tabellen Blatt 2
Dim YaktTB1 As Long ' Y aktuell Tabellen Blatt 1
Dim YaktTB2 As Long ' Y aktuell Tabellen Blatt 2
Dim YmaxTB1 As Long ' Y maximal Tabellen Blatt 1
Dim YmaxTB2 As Long ' Y maximal Tabellen Blatt 2
Const WD = "x" ' Wahrheitswert Definition
oCD = ThisComponent ' initialisieren Object CALC Dokument
oTB1 = oCD.Sheets(0) ' initialisieren Tabellenblatt 1
oTB2 = oCD.Sheets(1) ' initialisieren Tabellenblatt 2
oCur = oTB1.createCursor ' TB1 Cursor initialisieren
oCur.GotoEndOfUsedArea(False) ' TB1 genutzer Bereich
XmaxTB1 = oCur.getRangeAddress().endColumn ' TB1 letzte Spalte
YmaxTB1 = oCur.getRangeAddress().endRow ' TB1 letzte Zeile
For XaktTB1=1 To XmaxTB1 Step 1 ' TB1 über Spalten "B" bis ...
oZ = oTB1.getCellByPosition(XaktTB1,0) ' TB1 Zelle initialisieren
ReDim Preserve aGN(XaktTB1-1) ' Array-Element initialisieren
aGN(XaktTB1-1) = oZ.STRING ' Zellinhalt in Array-Element
Next XaktTB1
oCur = oTB2.createCursor
oCur.GotoEndOfUsedArea(False) ' TB2 Cursor initialisieren
XmaxTB2 = oCur.getRangeAddress().endColumn ' TB2 genutzer Bereich
YmaxTB2 = oCur.getRangeAddress().endRow ' TB2 letzte Zeile
oTB2.clearContents(com.sun.star.sheet.CellFlags.STRING) ' TB2 alle Inhalte löschen
oZ = oTB2.getCellByPosition(0,0) ' "A1" initialisieren
oZ.STRING = "Name" ' "Name" => "A1
oZ = oTB2.getCellByPosition(1,0) ' "B1' initialisieren
oZ.STRING = "Gruppe" ' "Gruppe" => "B2"
YaktTB2 = 0 ' TB2 Y initialisieren
For YaktTB1=1 To YmaxTB1 Step 1 ' über TB1 Y
For XaktTB1=1 To XmaxTB1 Step 1 ' über TB1 X
oZ = oTB1.getCellByPosition(0,YaktTB1) ' TB1 'Name'-Zelle initialisieren
N = oZ.STRING ' 'Name' merken
oZ = oTB1.getCellByPosition(XaktTB1,YaktTB1) ' TB1 'Wahrheitswert'-Zelle initialisieren
W = oZ.STRING ' 'Wahrheitswert' merken
If (W = WD) Then ' 'Wahrheitswert' ist "x"
YaktTB2 = YaktTB2+1 ' TB2 nächste Zeile initialisieren
oZ = oTB2.getCellByPosition(0,YaktTB2) ' TB2 'Name'-Zelle initialisieren
oZ.STRING = N ' 'Name' => Zelle
oZ = oTB2.getCellByPosition(1,YaktTB2) ' TB2 'Gruppe'-Zelle initialisieren
oZ.STRING = aGN(XaktTB1-1) ' TB2 Array-'Gruppe' > Zelle
EndIf
Next XaktTB1
Next YaktTB1
For iTB=0 To oCD.Sheets.count-1 ' über TBs
oCD.Sheets(iTB).getColumns().optimalWidth = True ' optimale Spaltenbreite
oCD.Sheets(iTB).getRows().optimalHeight = True ' optimale Zeilenhöhe
Next iTB
End Sub
------ Originalnachricht ------
Name_Gruppe.txt (3.86 KB)