möglich wäre:
1. Ermitteln, wie viele Einträge in Spalte B mit Namen gefüllt sind (z.B. mit =Anzahl2(B1:Bx)
2. Kopieren der Spalte B nach Spalte F
3. Mit einer for-next-Schleife in Abhängigkeit von der Anzahl der eingetragenen Namen in Spalte G (also direkt neben den neuen Namen) eine Zufallszahl generieren
4. Den Bereich in Spalte F und G nach der Zufallszahl sortieren
5. Die Zufallszahlen in Spalte F löschen
Probleme mit Aufgezeichnetem Makro
Moderator: Moderatoren
Re: Probleme mit Aufgezeichnetem Makro
Das sollte -an Deine Gegebenheiten angepasst- funktionieren:
Code: Alles auswählen
sub ZufallSort
' in den Zeilen B2:B9 stehen die Namen
' in Zelle B1 steht die Formel "=Anzahl2(B2:B9)"
' die Tabelle, in der sich das ganze abspielen soll, heisst "Tabelle1"
dim SortProps(2) as new com.sun.star.beans.PropertyValue
dim SortFeld(1) as new com.sun.star.table.TableSortField
dim MyRange as object
dim MyRangeAdresse as object
dim MyAdresse as object
MyTab = thisComponent.Sheets.getByName("Tabelle1")
LastRow = MyTab.getCellByPosition(1,0).value
' Kopieren der Namen aus Spalte B in Spalte G
MyRange = MyTab.getCellRangeByPosition(1,1,1,LastRow)
MyRangeAdresse = MyRange.getRangeAddress
ZielZelle = MyTab.getCellByPosition(5,1)
ZielAdresse = ZielZelle.getCellAddress
MyTab.copyRange(ZielAdresse,MyRangeAdresse)
' Einfügen der Zufallszahlen in Spalte G
for x = 1 to LastRow
MyTab.getCellByPosition(6,x).value = Rnd()
next x
'Sortieren des Bereichs F1:G9
SortFeld(0).field = 1
SortFeld(0).IsAscending = true
SortFeld(0).FieldType = com.sun.star.util.SortFieldType.ALPHANUMERIC
SortProps(0).Name = "SortFields"
SortProps(0).Value = SortFeld()
SortProps(1).Name = "SortColumns"
SortProps(1).Value = False
SortProps(2).Name = "ContainsHeader"
SortProps(2).Value = false
MyTab.getCellRangeByPosition(5,1,6,LastRow).Sort(SortProps())
'Löschen der Zufallszahlen in Spalte F
MyTab.getCellRangeByPosition(6,1,6,LastRow).ClearContents(255)
end sub
Re: Probleme mit Aufgezeichnetem Makro
Hi Marco,
ich kann nur vermuten, dass Du die Gegebenheiten am Anfang meines Makros überlesen hast:
Das Makro braucht am Anfang DEINER Kundentabelle die Formel '=Anzahl2(B2:B9)', damit der Wert für die for-next-Schleife in der Zeile
-> LastRow = MyTab.getCellByPosition(1,0).value
setzen kann.
Und ja: ich kopiere zuerst den Bereich mit den Namen, damit das Original erhalten bleibt (Du hattest selbst geschrieben, dass Du den sortierten Bereich in Spalte F haben wolltest ...
DANN lasse ich direkt hinter den kopierten Bereich hinter jeden einzelnen Namen (in Spalte G) ebensoviele Zufallszahlen schreiben, wie es Namen gibt
Als nächstes lasse ich den Bereich mit den Namen UND den Zufallszahlen nach den Zufallszahlen sortieren und wenn das erledigt ist, lasse ich die Zufallszahlen wieder löschen, da ich sie ja nicht meh brauche ...
MfG - Ralf
PS: Es gibt sicherlich auch andere Lösungen
ich kann nur vermuten, dass Du die Gegebenheiten am Anfang meines Makros überlesen hast:
Das Makro braucht am Anfang DEINER Kundentabelle die Formel '=Anzahl2(B2:B9)', damit der Wert für die for-next-Schleife in der Zeile
-> LastRow = MyTab.getCellByPosition(1,0).value
setzen kann.
Und ja: ich kopiere zuerst den Bereich mit den Namen, damit das Original erhalten bleibt (Du hattest selbst geschrieben, dass Du den sortierten Bereich in Spalte F haben wolltest ...
DANN lasse ich direkt hinter den kopierten Bereich hinter jeden einzelnen Namen (in Spalte G) ebensoviele Zufallszahlen schreiben, wie es Namen gibt
Als nächstes lasse ich den Bereich mit den Namen UND den Zufallszahlen nach den Zufallszahlen sortieren und wenn das erledigt ist, lasse ich die Zufallszahlen wieder löschen, da ich sie ja nicht meh brauche ...
MfG - Ralf
PS: Es gibt sicherlich auch andere Lösungen
