benutzerdefinierte funktion "wenn über mehrere spalten&

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

benutzerdefinierte funktion "wenn über mehrere spalten&

Beitrag von kannenklaus »

hallo ng,

ich suche den code für eine funktion die folgende auswertung leistet:

die zellen a1, b1 c1 d1 bis x1 sind mit den werten sehr hoch, hoch, mittel und gering gefüllt. in y1 soll,

wenn der wert "sehr hoch" vorkommt
- sehr hoch stehen

wenn "hoch" und "mittel" vorkommt
- hoch stehen


und wenn nur "mittel"
- mittel stehen.

hat calc diese funktion (außer über mehrer wenn abfragen) schon drin oder muß diese in basic geschrieben werden.

freue mich auf eine antwort

grüße

klaus
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

wenn der wert "sehr hoch" vorkommt
- sehr hoch stehen

wenn "hoch" und "mittel" vorkommt
- hoch stehen


und wenn nur "mittel"
- mittel stehen.
das ist ein wenig ungenau, denn es können ja (es sei denn das wäre aus Gründen nicht möglich die ich nicht kenne) alle 3 Dinge vorkommen - was soll dann sein?
hat calc diese funktion (außer über mehrer wenn abfragen) schon drin
Naja, als Funktion sicher nicht, aber Dein "Wenn" zielt ja auf Formel, und da wäre es eine Frage meines Ehrgeizes eine Formel ohne wenn zu finden - vielleicht möglich oder auch nicht. Ich bin heute nicht ehrgeizig und versuche keine Lösung zu finden und sage mal es geht nicht ohne Wenn.
oder muß diese in basic geschrieben werden.


ein einfaches "Ja" würde Dir wohl hier nicht genügen, deshalb Folgendes was nicht sehr toll geschrieben ist aber funktional OK sein sollte (außer ebend das Problem was ich oben schilderte und wo ich mir erlaubt habe mich für eine Variante zu entscheiden - wenn "sehr gut" vorkommt ist der Rest egal):

Code: Alles auswählen

Function A1X1(x as Variant)
for i=1 to UBound(x,1)
	for j=1 to UBound(x,2)
		if x(i,j) = "sehr hoch" Then
				sh = 1
			ElseIf x(i,j) = "hoch" Then
				h = 1
			ElseIf x(i,j) = "mittel" Then
				m = 1
		end if
	next j
next i
If m = 1 Then v = v + 1
If h = 1 Then v = v + 1
If sh = 1 Then v = 3
Select Case v
	Case 1
		A1X1 = "mittel"
	Case 2
		A1X1 = "hoch"
	Case 3
		A1X1 = "sehr hoch"
End Select
End Function
das würde somit erfordern in y1 die Funktion so aufzurufen:

=A1X1(A1:X1)


Gruß
Stephan
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo stefan,

danke für deine antwort. mein internetzugang war lahm gelegt. deswegen komme ich erste heute dazu, dir zu antworten.

Code: Alles auswählen

das ist ein wenig ungenau,
die funktion soll immer den höchsten wert ermitteln, egal wieoft er vorkommt. d.h. wenn einmal sehr hoch vorkommt, reicht dies für den gesamtwert sehr hoch aus.

deine funktion test ich noch

grüße klaus
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo stephan,

Code: Alles auswählen

      end if 
   next j 
next i
dort steigt die funktion aus. basic moniert j bzw.i. ich habe keine erklärung dafür. hast du eine idee?

grüße

klaus
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

hast du eine idee?


Nein, leider nicht. Ich habe die Funktion jetzt auch nochmal hier aus dem Forum rauskopiert um Schreibfehler auszuschließen, nur bei mir ist das in Ordnung. Ich sehe auch leider keinen Ansatz, da i und j innerhalb der Funktion bestimmt werden und i.d.S. nicht falsch sein können.

Somit:

Du bist Dir sicher das Du die Funktion so:

=A1X1(A1:X1)

aufrufst? (Also nicht etwa =A1X1(A1;X1) oder =A1X1(A1:K1; M1:O1))

Gibt es eine explizite Fehlermeldung wenn der FEhler auftritt?



Gruß
Stephan
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo stephan,


der fehler lag in der falschen zuweisung des zellbereiches. nun klapt es. danke für den tipp.

grüße

klaus
Antworten