Daten->Gültigkeit.. nach einem Kriterium füllen??

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

berlon
*
Beiträge: 17
Registriert: Mi, 17.01.2007 07:06

Daten->Gültigkeit.. nach einem Kriterium füllen??

Beitrag von berlon »

Hallo,

habe ich die Möglichkeit die Gültigkeitsliste nach einem Kriterium zu füllen??

Als Beispiel:

A..1
B..2
C..1
D..2
E..3

wenn Zelle A1 = 1 ist soll in der Auswahlliste A und C stehen, ist A1 = 2 ist B und D drinn und bei A1 = 3 ist nur E zur Auswahl.

Hoffe es verständlich formuliert zu haben. Die Gesamtauswahlliste ist natürlich wesentlich länger als oben angegeben.

Gruß
Bernd
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Beitrag von turtle47 »

Hallo Bernd,

ich denke so etwas kann man mit einem Macro lösen.

Mit diesem wird zuerst die Zahl in A1 ausgelesen und dann die
vordefinierten Werte in einen Zellbereich eingetragen der wiederum
den Zellen A2, A3 usw. über die Gültigkeit "Zellbereich" zugeordnet wird.
Der Zellbereich für die Gültigkeit ist in diesem Falle B1:B2.

Hier der Code dafür:

Code: Alles auswählen

Sub Auslesen
myDoc = thisComponent
mySheet = myDoc.sheets(0)
mycell = mysheet.getCellByPosition(0,0)

myvalue=mycell.value
if myvalue = 1 then
Auswahlliste1
end if
if myvalue = 2 then
Auswahlliste2
end if
if myvalue = 3 then
Auswahlliste3
end if
End Sub

Sub Auswahlliste1
myDoc = thisComponent
mySheet = myDoc.sheets(0)
mycell = mysheet.getCellByPosition(1,0) 'Zelle B1
mycell.string="A"
mycell = mysheet.getCellByPosition(1,1) 'Zelle B2
mycell.string="C"
End Sub

Sub Auswahlliste2
myDoc = thisComponent
mySheet = myDoc.sheets(0)
mycell = mysheet.getCellByPosition(1,0) 'Zelle B1
mycell.string="B"
mycell = mysheet.getCellByPosition(1,1) 'Zelle B2
mycell.string="D"
End Sub

Sub Auswahlliste3
myDoc = thisComponent
mySheet = myDoc.sheets(0)
mycell = mysheet.getCellByPosition(1,0) 'Zelle B1
mycell.string="E"
End Sub
Viel Erfolg

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
berlon
*
Beiträge: 17
Registriert: Mi, 17.01.2007 07:06

Beitrag von berlon »

hmm..
danke schon mal für die schnelle Antwort.

Ist aber etwas unpraktikabel, da sich der Inhalt der einzelnen Bereiche ändern kann, was in diesem Fall auch eine Änderung des Macros bedeutet.

Meine nächste "Idee":
Kann ich mir bei Gültigkeit -> Zellbereich -> Quelle auch einen Zellnamen zusammenstellen??

Dann würde ich mehrere Bereiche definieren (Namen1, Namen2, Namen3) und in der Quelle würde dann "Namen+Inhalt Zelle A1" stehen??
Damit käme ich dann auch auf Namen1, Namen2 usw.

Gruß Bernd
FranzX
*****
Beiträge: 408
Registriert: Sa, 21.02.2004 16:17

Beitrag von FranzX »

Hallo Bernd,

falls es nicht mehr als 30 Kriterien gibt, kannst du dir mal die Funktion WAHL() anschauen.

Gruß
FranzX
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Beitrag von turtle47 »

Hi Berlon,

mit diesem Makro kannst Du mit Zellbereichen arbeiten deren Inhalt ausgelesen
werden und dann für den Zellbereich der Gültigkeitsprüfung zur Verfügung stehen.

Code: Alles auswählen


Sub Auslesen

myDoc = thisComponent
mySheet = myDoc.sheets(0)
mycell = mysheet.getCellByPosition(0,0)

myvalue=mycell.value
if myvalue = 1 then

oDocument = ThisComponent
   oSheet1 = oDocument.Sheets.getByIndex(0) 'Quelle Tabelle1
   oSheet2 = oDocument.Sheets.getByIndex(0) 'Ziel Tabelle1
' Quellbereich festlegen
   oQuelleRange=oSheet1.getCellRangeByPosition(6,0,6,5) 'Zellen G1:G5
   oQuellRangeAddresse = oQuelleRange.getRangeAddress
   oZiel = oSheet2.getCellByPosition(1,0) 'Ziel ab B1 bis Ende Quellbereich      
   oZielCellAdresse=oZiel.getCellAddress
   oSheet2.copyRange(oZielCellAdresse,oQuellRangeAddresse)
   end if
   
if myvalue = 2 then
oDocument = ThisComponent
   oSheet1 = oDocument.Sheets.getByIndex(0)
   oSheet2 = oDocument.Sheets.getByIndex(0)
' Quellbereich festlegen
   oQuelleRange=oSheet1.getCellRangeByPosition(7,0,7,5) 'Zellen H1:H5
   oQuellRangeAddresse = oQuelleRange.getRangeAddress
   oZiel = oSheet2.getCellByPosition(1,0)
   oZielCellAdresse=oZiel.getCellAddress
   oSheet2.copyRange(oZielCellAdresse,oQuellRangeAddresse)
   end if

End Sub
Jürgen


Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Karolus
********
Beiträge: 7440
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

Hallo

Vielleicht hab ich hier irgendwas überlesen, aber es sollte doch möglich sein, den Inhalt des Quellbereichs über eine WVERWEIS -funktion in Abhängigkeit von A1 zu verändern, - wozu ein Makro ?

Gruß Karo
berlon
*
Beiträge: 17
Registriert: Mi, 17.01.2007 07:06

Beitrag von berlon »

hmm.. ist alles nicht so ohne, eure Vorschläge.

Besteht nicht die Möglichkeit, das ich den Quellbereichsnamen irgendwie zusammensetzten kann??
Sowas wie ="Test"&Text(A1).
Diesen Beispiel funktioniert nicht, habe ich schon versucht. Aber irgend so was in der Richtung.
Damit könnte ich den Bereich steuern, den ich benötige.
Nur setzt Gültigkeit in dem obrigen Beispiel Test ein.

cu
Bernd
FranzX
*****
Beiträge: 408
Registriert: Sa, 21.02.2004 16:17

Beitrag von FranzX »

Hallo Bernd,

ein anderer Vorschlag (Die Gültigkeit wird in der Spalte A geprüft):

Bei Daten | Gültigkeit wählst du unter Zulassen: „Liste“

In das Eingabefeld gibst du folgende Formeln ein:

="Bauer"&" - "&INDIREKT(ADRESSE(ZEILE();SPALTE()+1))+INDIREKT(ADRESSE(ZEILE();SPALTE()+2))
="Meier"&" - "&INDIREKT(ADRESSE(ZEILE();SPALTE()+3))+INDIREKT(ADRESSE(ZEILE();SPALTE()+4))
="Hubertus"&" - "&INDIREKT(ADRESSE(ZEILE();SPALTE()+5))+INDIREKT(ADRESSE(ZEILE();SPALTE()+6))

Die Liste in Gültigkeit enthält also ganz normale Formeln.

In diesem Beispiel wird der Name und eine Summe ausgewiesen, z.B: „Bauer – 3“, die Summe aus der Spalte B+C.

Ich habe diese Formeln in Writer geschrieben und dann in die Gültigkeitsliste kopiert. So bleibt das „Ganze“ übersichtlicher.

Ich hoffe, dass du damit dein Problem lösen kannst!

Gruß
FranzX
Antworten