Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1472to1476
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zellwert soll variabel bei Prozentangabe erfolgen

Zellwert soll variabel bei Prozentangabe erfolgen
14.02.2016 14:58:16
Rolf
Hallo Excel Spezialisten
Ich bräuchte eure Hilfe
Vor ein paar Jahren habt ihr mir hier eine tollte VBA Programmierung gezaubert mit der ich seitdem unsere Dienstpläne erstelle.
Achtung ich glaube es klingt komplizierter als es ist, aber ich muss etwas ausholen.
In Monatstabellenblättern gibt es je drei Zeilen je Mitarbeiter.
U.a. werden diesen Zellen nach einer Eingabe eines Zeichen in der ersten Zeile z.B. F (Frühdienst) eine Stundenzahl wie z.B: 7 zwei Zellen darunter automatisch übertragen.
Die Eingaben erfolgen je Monat in einer Tabelle mit dem Namen z.B. Jan - Dez.
Die Daten werden mit einem anderen Tabellenblatt mit dem Namen „Data“ vergleichen und automatisch entnommen und z.B. in das Tabellenblatt „Jan“ eingetragen. Das funktioniert super.
Da ich die Daten im Tabellenblatt “Data“ Variabel eintragen kann, kann ich immer schnell alle Änderungen vornehmen. Je Mitarbeiter stehen so drei Zeilen zur Verfügung Beispiel K4-K6. Bisher reichte es wenn man z.B. in Jan in K4 ein S Eintrag und in K6 wurde eine Zahl ausgegeben. Wenn man nun in K5 ein Ur eintrug blieb in K6 die Zahl einfach stehen.
Soweit so gut. Jetzt kommt mein Problem.
Nun soll aber die Zahl in K6 durch eine Prozentangabe in Spalte B beeinflusst werden.
Also bei 100% soll natürlich auch 100 % der Zahl stehen bleiben wie bisher. Im Moment steht in Data Ur = 7,8
Wenn nun aber z.B. nur 50% in Spalte B des jeweiligen Datensatzes steht, soll auch nur 50% der Zahl ausgegeben werden.
Als Lösung habe ich nun versucht dies im Tabellenblatt Data einzugeben.
Beispiel
=WENN(B100;(7,8/100*B);7,8)
leider wird #Name? Ausgegeben
Wenn ich das ändere in
=WENN(B2:B10100;(7,8/100*B2:B10);7,8)
wird #Wert? ausgegeben.
Könnt ihr mir helfen?
Oder wäre es besser das Problem als VBA zu lösen?
Gruß Rolf

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Die 2.Fml fktioniert als MatrixFml, aber ob ...
14.02.2016 15:08:25
Luc:-?
…das dann auch deine Intentionen trifft, Rolf…?!
Gruß, Luc :-?

AW: Die 2.Fml fktioniert als MatrixFml, aber ob ...
14.02.2016 15:14:10
Rolf
Hi Luc,
du hast recht, ja ich bin da etwas doof in der Sache :-D
Deswegen brauche ich ja eure Hilfe.
Ich hoffe nur daß ich mich auch verständlich habe ausdrücken können ?
Ich weiß z.B. nicht ob die Angabe B auch in allen Tabellenblättern ankommt?
So wie du fragt wahrscheinlich nicht.
Soll ich mal eine Tabelle hochladen?
Ich weiß nur nicht ob ich das von der Größe her hinbekomme. Die Originale ist schon 4 MB groß
Gruß Rolf

AW: Zellwert soll variabel bei Prozentangabe erfolgen
14.02.2016 20:14:44
Rolf
Hallo zusammen, ich stelle euch die Datei als verkleinerte Version mal hier ein
https://www.herber.de/bbs/user/103540.xls
Gruß Rolf

Anzeige
AW: Zellwert soll variabel bei Prozentangabe erfolgen
17.02.2016 17:28:51
Rolf
Hallo zusammen,
habt ihr denn keine Idee für mich?
Kann man die Prozentangabe nicht in die Ausgabe mit einfließen lassen?
Gruß Rolf

Sicher liegt das daran, ...
18.02.2016 01:11:45
Luc:-?
…Rolf,
dass man …
1. aus einem langen Text erst das Wesentliche herausfiltern muss und …
2. deine dann doch noch hochgeladene Datei …
A) unhandlich und wichtiger …
B) nicht so recht zu deinen Erläuterungen passen will.
a) Du hast deine Fml in Data!B41 eingetragen, was #NAME? ergibt, weil nur B für Xl ein solcher ist, der aber nicht definiert wurde. Eine komplette Spalte B muss als B:B angegeben wdn, was bei deiner XlVersion auch möglich, aber nicht immer sinnvoll wäre. Außerdem, was soll das, eine Fml in B41 einzutragen, die sich auf dieselbe Spalte bezieht (ZirkelBezug)! Und dann steht in der ganzen Spalte B nicht 1× 100!
b) Das Gleiche hast du dann in G42 versucht, nur diesmal als 1zellige MatrixFml. Dadurch wird eine syntaktisch falsche Fml aber nicht richtiger! Nur der ZirkelBezug ist dadurch weg.
c) Die richtigere Fml hast du in G41 ausprobiert, aber leider nicht als MatrixFml, weshalb sie #WERT! und nicht 0,624 liefert. Warum du dich aber auf die ganze Spalte (bzw hier nur auf B2:B10) beziehst, kannst nur du wissen; mir ist das schleierhaft.
Fazit: In Spalte B wird entweder etwas manuell eingetragen oder es steht eine Fml darin, die sich dann aber nicht auf dieselbe Spalte beziehen darf. Das ergibt keinen Sinn! Bei einer solchen Vorgabe musst du dich also gar nicht wundern, wenn niemand antworten will.
So, und nun mach was (Besseres) draus!
Gruß, Luc :-?

Anzeige
AW: Sicher liegt das daran, ...
18.02.2016 02:50:00
Rolf
Oh je Luc,
du meinst ich habe hier einigen vor den Kopf gestoßen?
Dabei wolle ich Dummy doch nur etwas Hilfe bekommen, zu einer für mich eigentlich einfachen Sache, die aber doch ziemlich verkorkst zu sein scheint.
Deswegen wollte ich es besonders gut machen und habe ziemlich ausgeholt, da hast du sicherlich recht.
Hatte hier auch schon Mecker bekommen weil ich nicht gleich alles auf den Tisch gelegt hatte. Wie man`s macht....
Dabei hatte ich mich jedes Mal sehr über die Hilfe gefreut und benutzte vieles noch heute.
Es tut mir leid. Ich entschuldige mich bei allen für mein unsensibles Verhalten.
Danke an dich Luc für deine Offenheit.
Es ist jetzt schon zu spät, vielleicht versuche ich Morgen mal die Frage einfacher zu formulieren, oder mit Hilfe deiner Anregungen doch noch alleine auf die Lösung zu kommen.
Gute Nacht
Gruß Rolf

Anzeige
Nee, nicht vor den Kopf gestoßen, ...
18.02.2016 03:58:24
Luc:-?
…Rolf,
nur Schütteln desselben ausgelöst. ;-]
In solchen Fällen antwortet dann keiner oder nur mit Bahnhof. Und deine Datei hat's leider nicht besser gemacht, zumindest die Platzierung und Art deiner FmlVersuche. Die Zusammenhänge wdn einfach nicht deutlich.
Luc :-?

AW: Nee, nicht vor den Kopf gestoßen, ...
19.02.2016 20:03:04
Rolf
Hallo Luc,
du hast recht mit dem was du geschrieben hast. Meine stümperhaften Versuche einer Lösung hätte ich vorher entfernen sollen und noch dazu angeben daß diese Formeln sich auf den Bereich Spalte B der anderen Tabelle beziehen sollen.
Ich habe meine Frage neu formuliert und bitte dich um Hilfe. Könntest du sie dir bitte mal durchlesen und sagen ob das so besser verständlich ist? Dann würde ich meine Frage neu posten.
Das wäre sehr nett von dir.
Frage:
Ich trage in einem Tabellenblatt z.B. mit dem Namen „Jan“ Buchstaben ein, durch die automatisch Zahlen aus einem anderen Tabellenblatt mit dem Namen “Data“ übertragen werden.
Dies erfolgt mittels VBO Code.
Nun möchte ich daß die Zahlenwerte bei Eintragung von Ur oder UrV, eine prozentuale Angabe die im z.B. Tabellenblatt „Jan“ in Spalte B zu finden ist, berücksichtigt wird.
Buchstabeneingabe z.B. im Bereich Tabelle „Jan“ ist K4:AO5
Zahlenausgabe z.B. im Bereich Tabelle „Jan“ ist K6:AO6
Die Daten stehen in „Data“ im Bereich A2:B57
Bei Ur oder UrV 100 % = 7,8
Im Bereich der Tabelle „Jan“ werden oft Änderungen vorgenommen, deswegen ist es da nicht möglich eine Formel einzugeben.
Meine Frage ist nun wie man das am besten umsetzen kann?
Sverweis in Tabelle Data?
Zum besseren Verständnis habe ich eine Testdatei hochgeladen.
https://www.herber.de/bbs/user/103540.xls
Vielen Dank im Voraus für eure Hilfe und vor allem auch an dich Luc
Gruß Rolf

Anzeige
...am besten umsetzen? Natürlich mit VBA, ...
21.02.2016 01:56:11
Luc:-?
…Rolf,
denn du trägst die Werte ja auch mit einem Pgm ein. Wahrscheinlich wolltest du dir aber das Durchklicken der Ur- und UrV-Werte im bereits vorhandenen Plan ersparen, aber dafür könntest du ja ein eigenes KorrekturPgm schreiben, das nur diese Werte einmalig ändert. Ansonsten reicht eine kleine Erweiterung von Eing2:
Sub Eing2()
Const kzlVglForm$ = " # ", relKzl$ = " ur urv "
Set xFind = Sheets("Data").Columns(4).Find(xWert, , , xlWhole)
If Not xFind Is Nothing Then
With Sheets("Data").Cells(xFind.Row, 5)
If .Value  "" Then
If CBool(InStr(relKzl, Replace(kzlVglForm, "#", LCase(xWert)))) Then
wks.Range(xZelle).Offset(1, 0) = Sheets("Data").Cells(xFind.Row, 5) * _
wks.Cells(Range(xZelle).Row, 2)
Else: wks.Range(xZelle).Offset(1, 0) = Sheets("Data").Cells(xFind.Row, 5)
End If
End If
End With
Else …
Das könntest du ja auch generell für alle diese %-Angaben machen, falls das möglich ist. Eine Anpassung per Fml in Data verbietet sich ja ohnehin, denn dort stehen allgemeine Werte für 100%, während die Einträge in den MonatsBlättern doch individuell/personen­bezogen sind. Anderenfalls müsstest du die Werte nach diesen %% gestaffelt in Data angeben und für ihre Identifizierung auch noch die individuelle %-Angabe hinzuziehen. Da ist mein Vorschlag wohl einfacher (falls er sachlich richtig ist).
Im Übrigen rate ich dir, im VBE das Deklarationshäkchen für Konstanten und Variablen müssen deklariert wdn o.s.ä. zu setzen bzw im Nachhinein in der 1.Zeile jedes Moduls Option Explicit zu einzufügen. Außerdem solltest du Zeilen- und SpaltenNr-Variablen stets As Long deklarieren. Eine Boolesche Variable muss auch nicht noch mal mit einem Wert vgln wdn, sie kann ja nur 2 haben, die ohnehin bei If-Vgln erzeugt und zur PgmVerzweigung genutzt wdn → If krank Then reicht also völlig aus!
Gruß, Luc :-?

Anzeige
AW: ...am besten umsetzen? Natürlich mit VBA, ...
21.02.2016 12:59:38
Rolf
Guten Morgen Luc,
du hast meine Intervention absolut richtig verstanden und toll umgesetzt. Ja genau ich habe ja noch 11 weitere Tabellenblätter und darüber sollte dies auch funktionieren. Dank deiner Änderung funktioniert dies auch hervorragend. Vielen vielen lieben Dank dafür an dich! Das ist genau das was ich brauchte.
Was ich nicht ganz verstehe ich deine Empfehlung zu den Deklarationshäkchen?
Ich habe diese gesucht sie sind mir aber noch nicht ins Auge gesprungen...wo finde ich diese denn genau? Sorry ich sehe zwar rechts oben die Anzeige Deklaration aber da kann ich kein Häkchen anklicken.
Ich bin auch deinem Rat gefolgt und habe in jedes Modul zum Anfang Explicit eingetragen. Allerdings bekomme ich nun beim Öffnen der Datei die Fehlermeldung "Fehler beim Kompilieren Außerhalb einer Prozedur ungültig" Dann wird ins Modul gesprungen und Explicit markiert angezeigt. Ich vermute stark, daß ich da auch noch etwas falsch gemacht habe? reicht das eintippen von Explicit nicht? Muss ich noch etwas anderes dazu eingeben?
Der Rest deiner Empfehlung sind leider böhmische Dörfer für mich. Bitte sehe es mir nach. Ich habe keine Ahnung von VBE
Ich habe jetzt den halben Vormittag lang versucht die Optionen zu Zeilen- und SpaltenNr-Variablen zu finden um diese als "stets As Long" zu deklarieren. ich finde dies nicht Luc. Kannst du mir dazu nochmal einen kurzen Tipp geben?
Gruß Rolf

Anzeige
Gewünschte nähere Erläuterung
22.02.2016 02:21:34
Luc:-?
Dazu Folgendes, Rolf;
VBA (Visual Basic for Applications) ist die auf VB (Visual Basic) basierende Programmier­Sprache, VBE der dazugehörige Editor, mit dem man ein VBA-Programm schreiben kann. Ihn erreicht man unter Xl über Entwicklertools und das zugehörige Menü, was du sicher weißt. Im VBE-Kopf gibt es ein DropDown-Menü unter Extras, in dem man den Punkt Optionen wählen muss, um in dessen Menü-Reiter Editor die CheckBox Variablendeklaration erforderlich anhaken zu können. Dadurch wird auf jedem neu eingefügten Modul als allererste KommandoZeile Option Explicit eingetragen. Wenn man das auch für bereits existierende ModulBlätter haben will, muss man diese Zeile manuell einfügen. Dadurch reagiert die Syntax-Überprüfung des VBE auf jede nicht-deklarierte Variable, wodurch auch Schreibfehler feststellbar sind.
Deklarationen musst du selbst vornehmen. Meine Empfehlung lief daraus hinaus, statt As Integer stets As Long zu verwenden, weil durch die hohe Zeilen- und Spalten­Anzahl es sonst ggf zu Überlauf-Fehlern kommen könnte, da Integer nur einen Ausschnitt von Long darstellt. Letzteres kann auch unbeschadet immer statt Integer verwendet wdn.
Eine Variable, die As Boolean deklariert wird, kann nur 2 Werte annehmen, False (⇒0) und True (⇒-1). Jeder Vergleich mit If liefert genau einen dieser beiden Werte. Wird beim Vergleich eine solche Variable verwendet, muss die nicht erst mit einem ihrer möglichen Werte (=Zustände) verglichen wdn, sondern kann direkt verwendet wdn. Soll auf den gegenteiligen Zustand geprüft wdn, verneint man sie einfach mit vorangestelltem Not. Statt If krank = True Then reicht also If krank Then. Falls das mal andersherum benötigt würde, könnte man statt umständlichem (aber nicht falschem!) If krank = False Then auch If Not krank Then schreiben, was der natürlichen Sprache auch viel näher käme, denn da sagt man ja auch Wenn du nicht krank bist, dann…!
Morrn, Luc :-?

Anzeige
AW: Gewünschte nähere Erläuterung
23.02.2016 10:28:23
Rolf
Guten Morgen Luc,
ich bedanke mich recht herzlich bei dir für deine gute Erklärungen in Sachen VB. Du wirst bestimmt lachen, aber jetzt habe ich endlich mal verstanden was der Unterschied ist zwischen VBA und VBE. Für dich Excel Profi mag das alles so leicht und verständlich sein. Aber für Leute wie mich die Excel oftmals nur vom Namen her kennen, blieben viele Geheimnisse nur im Verborgenen mit geheimnisvollen Bezeichnungen. Deswegen sind Gleichnisse in die natürliche Sprachumgebung sehr hilfreich.
Nochmals vielen Dank an dich. Es freut mich immer wieder daß ich hier wirklich gute Hilfe bekommen kann.Leute wie Du können wirklich stolz auf sich sein, so eine Berufung zu haben.
Und vergib mir meinen Fauxpas zu Beginn. Ohne deine ehrliche Erklärung dazu, hätte ich erst gar nicht verstanden was ich schon bei meiner Fragestellung falsch gemacht hatte.
Vielen Dank Gruß Rolf
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige