Hallo Katte,
Du arbeitest wohl mit LO (LibreOffice 4.4.2.2). Auch wenn LO einige Excel eigenarten übernommen hat, so ist dennoch solch eine Formel nicht wirklich empfehlenswert.
Code: Alles auswählen
=WENN('Datenblatt 2016_FS2016'.B4="";"";SVERWEIS('Datenblatt 2016_FS2016'.$B$4:$B$1493;$Hersteller.$A$3:$C$1505;3; ))
Denn da sind 2 Sachen in der SVERWEIS drin die unter umständen dir noch zusätzlich das Leben versauern können.
Die Formel ist in den 3 'Saison Datenblättern' in deiner abgespeckten Beispieldatei in der Spalte C.
1.
Das Suchkriterium ist eine Zelle und kein Zellbereich.
Also nicht
Code: Alles auswählen
SVERWEIS('Datenblatt 2016_FS2016'.$B$4:$B$1493;$Hersteller.$A$3:$C$1505;3; ))
sondern
Code: Alles auswählen
SVERWEIS('Datenblatt 2016_FS2016'.$B4;$Hersteller.$A$3:$C$1505;3; ))
Natürlich könnte auch ein feststehendes Kriterium gesucht werden, asber hier geht es um eine Zelle.
2.
Auch wenn es funktioniert, so ist es dennoch empfehlenswert den 4. Parameter in der SVERWEIS einzutragen. Denn in LO funktioniert das, aber nicht in AOO.
Also nicht
Code: Alles auswählen
SVERWEIS('Datenblatt 2016_FS2016'.$B4;$Hersteller.$A$3:$C$1505;3; ))
sondern
Code: Alles auswählen
SVERWEIS('Datenblatt 2016_FS2016'.$B4;$Hersteller.$A$3:$C$1505;3;0))
Und dadurch wurde dann die gesamte Formel wie folgt aussehen.
Code: Alles auswählen
=WENN('Datenblatt 2016_FS2016'.B4="";"";SVERWEIS('Datenblatt 2016_FS2016'.$B4;$Hersteller.$A$3:$C$1505;3;0))
Ach ja, noch etwas wichtiges, auch wenn es dir nicht gefallen wird.
Mach deine Datei noch mal komplett neu, bis auf die Makros. Denn Du überarbeitest eine wohl ehemalige Excel-Datei. Und von daher ist es besser wenn sie neu erstellt wird, da eventuelle Probleme sich einschleichen können, oder sich schon eingeschlichen haben (ist wohl nicht garantiert, aber Sicher ist Sicher). Und außerdem ist die Datei ja durch den Einsatz von StarBasic (Makro) so wie so nicht mehr zu 100% unter Excel lauffähig.
Und nun zu deinem Code, besser gesagt zu deinem Problem damit.
Wenn ich dich richtig verstehe, dann willst Du aus dem Blatt *Hersteller* den letzten Hersteller finden der gleichzeitig in der Spalte E den Marker X hat, um ihn dann auf das Blatt *Datenblatt 2015_FS2015* in die dortige erste freie Zelle nach der letzten benutzten Zelle zu kopieren.
Und wenn ich jetzt mal etwas weiter meine Gedanken freien Lauf lasse, möchtest Du im Endeffekt eigentlich viel lieber den letzten eingetragenen Hersteller in das, oder
die 'Saison Datenblättern' automatisch verteilen lassen da ein Hersteller durchaus in mehreren Blättern eingetragen werden kann. Wobei die Kürzel für die 'Saison Datenblättern' in der Kopfzeile (Zeile 2) stehen. Und Du hattest dir bestimmt gedacht, wenn Du das mit dem gegebenen Beispiel für 2015 hinbekommst, dann könntest Du das für die anderen Blätter einfach dementsprechend anpassen. Und aus diesem Grude ist der Button im Blatt *Hersteller* auch mit "Hersteller verteilen" beschriftet.
Die einfachste Methode wäre wie folgt.
a) Im Blatt *Hersteller* den letzten Hersteller finden
b) anschließend schauen in welchen Zellen der gleichen Zeile in den Spalten D bis J ein X-Marker steht
c) wenn Marker gefunden, dann in dem dementsprechenden Blatt die letzte benutzte Zeile finden, und aus dem Blatt *Hersteller* den Hersteller in dieses Blatt in die nächste leere Zelle nach der letzten benutzten Zelle kopieren
d) da ja ein Hersteller in mehreren Blättern vertreten sein kann/darf, die Schritte b) und c) so lange wiederholen bis man in der letzten Spalte (J) angelangt ist.
Ich habe deine Beispieldatei auf 7 'Saison-Datenblätter' erweitert, da Du ja im Blatt *Hersteller* eigentlich auch 7 vorgegeben hast; Spalte D bis J. Und dadurch liese sich folgendes Makro erstellen.
Code: Alles auswählen
Sub Main
Dim odoc as Object, oBlattHersteller as Object, oSucheBlatt as Object
Dim sSucheBlattName as String
odoc = ThisComponent
oBlattHersteller = odoc.Sheets().GetByName("Hersteller")
'------------------------------------------------------------------------------
With oBlattHersteller
x = .Columns(0).queryEmptyCells() 'Spalte A
iEndeQuelle = x(x.Count-1).RangeAddress.StartRow-1
End With
'------------------------------------------------------------------------------
for i = 3 to 9
if oBlattHersteller.getCellByPosition(i, iEndeQuelle ).string = "X" then
sSucheBlattName = odoc.Sheets.ElementNames(i-3)
oSucheBlatt = odoc.Sheets.GetByName( sSucheBlattName )
With oSucheBlatt
x = .Columns(1).queryEmptyCells() 'Spalte B
iEndeZiel = x(x.Count-1).RangeAddress.StartRow+1
End With
oSucheBlatt.getCellRangeByName( "B" & iEndeZiel ).string = oBlattHersteller.getCellByPosition( 0, iEndeQuelle ).string
end if
'------------------------------------------------------------------------------
next i
'------------------------------------------------------------------------------
print "Fäddisch :-)))"
End Sub
Ist wohl nicht schön und könnte man auch noch etwas überarbeiten, aber es funktioniert so wie ich es eben bei den Punkten a) bis d) beschrieben habe.
W I C H T I G !!!!
Die 'Saison-Datenblätter' müssen VOR dem Blatt *Hersteller* stehen! Also auf keinem Fall dahinter. Und außerdem müssen sie noch momentan mit der Reihenfolge der Spalten D bis J übereinstimmen.
Würde in der Zeile 2 die exakt gleichen Namen stehen wie in den Blattregistern (oder umgekehrt), dann könnte man das Makro noch etwas sicherer schreiben. Denn so besteht die Gefahr, das wenn man ein Blatt aus versehen verschiebt, die richtigen Daten in das falsche Blatt übertragen werden. Oder man müsste mein Makro dementsprechend kompliziert umschreiben, wozu ich jetzt keine Lust hatte.
Ach ja, beinahe vergessen.
Drücke auf den Button im Blatt *Hersteller*, und schon wird der dort als letzter eingetragene Hersteller auf 2 Blätter aufgeteilt. Das geht sehr schnell

, mit einer Rückmeldung. Du kannst aber auch mehr als 2 Blätter auswählen, einfach in den Spalten D bis J einen X-Marker setzen.
Viel Spaß damit
Gruß
balu