ich habe eine Frage zur Visual Basic. Und zwar möchte ich bei einer Excel Tabelle bei einer kumulierte Menge folgendes machen.es existieren verschiedene Aufträge am z.B Auftragsnr: 01234
Datum: 01.09.11 2000st 03.09.11 3500 stk 04.09.11 4000stk
z.B Auftragsnr: 54321
Datum: 01.09.11 5000st 03.09.11 5050 stk 04.09.11 2000stk
Ich möchte in einer neuen Spalte folgende funktion.
Wenn die kumulierte Menge größer als 20000 ist soll die den Bedarf bis einschließlich 7 KalenderTage/ 5 Arbeitstage teilen und wenn die Menge kleiner als 20000 ist soll sie den Bedarf bis einschließlich heute + 2 Arbeitstage berechnen
sorry, Excel ist nicht mein Thema.
Da gibt es auch VBA, aber eben Excel-VBA.
Tut mir leid nicht helfen zu können.
Dennoch eine Idee:
Berechne doch die tatsächlich kumulierten Werte in eine weitere Spalte. In deiner Zielspalte kannst du doch dann den Inhalt der ‚temp-Spalte‘ als Bedingung für deine Ergebnisspalte nehmen?.
Ich hoffe, du bekommst bald eine ‚richtige‘ Lösung.
Grüße
Manfred
klingt im Prinzip machbar, nur weiß ich noch nicht genau was du meinst…
" Wenn die kumulierte Menge größer als 20000 ist soll die den Bedarf bis einschließlich 7 KalenderTage/ 5 Arbeitstage teilen und wenn die Menge kleiner als 20000 ist soll sie den Bedarf bis einschließlich heute + 2 Arbeitstage berechnen."
Bitte versuche das mal zu präzisieren und vor allem die spalten mit angeben…
klingt im Prinzip machbar, nur weiß ich noch nicht genau was du meinst…
" Wenn die kumulierte Menge größer als 20000 ist soll die den Bedarf bis einschließlich 7 KalenderTage/ 5 Arbeitstage teilen und wenn die Menge kleiner als 20000 ist soll sie den Bedarf bis einschließlich heute + 2 Arbeitstage berechnen."
Bitte versuche das mal zu präzisieren und vor allem die spalten mit angeben…
habe das Problem gelöst danke… Habe es bisschen umständlich erklärt. Habe statt den 7 Kalendertagen/5 Arbeitstage gleich durch 5 Arbeitstage genommen und eine manuelle Datumseingabe hinzugefügt bis welchen datum man die werte braucht. Für die die es interessiert. Hier ein Ausschnitt:
kum = 0 'Spalte L (kumulierte Menge eines Typs)
For j = 2 To max_Zeile
For i = 2 To max_Zeile
If Cells(i, „G“) = Cells(j, „G“) Then
kum = kum + Cells(i, „K“)
Cells(i, „L“) = kum
End If
Next i
kum = 0
Next j
i = 2
j = 2
While j „“ Then
If Cells(i, „L“) > 20000 Then 'Spalte N (kumulierter Bedarf, wenn Bedarf > 2000)
Cells(i, „N“) = Cells(i, „L“) / 5
Else 'Spalte O (kumulierter Bedarf, wenn Bedarf
Sorry, aber so ganz habe ich das noch nicht verstanden: Wie genau sind die Daten angeordnet? Sind Datum und Menge in einer Zeile? Und dann immer abwechselnd in den Spalten? Stehen da wirklich 2000st oder ist das st nur ein Format, will heißen: Sind echte Nummernwerte in den Spalten oder Zeichenketten (in letzterem Fall wirklich „2000st“ als Text)?
Und was genau soll dort berechnet werden? Mit der Menge 20000 ist klar (was passiert bei genau 20000?), nur verstehen ich die Berechnung nicht? Soll die Menge der letzten 7 Kalendertage (von heute oder vom letzten Eintrag) durch 5 Arbeitstage dividiert werden? Und bei
hier mein Lösungsvorschlag. Ich hoffe es hilft etwas, sofern ich die Aufgabenstellung richtig interpretiert habe.
Sub AuftrMenge()
Dim Auftr As Long
Dim Dat1, Dat2 As Date
Dim Tage, Tage2 As Integer
Dim menge1 As Long
Dim x As Integer
Dim i As Integer
'letzte Zeile ermitteln
x = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
'zellen für berechnete Werte im Blatt löschen
Range(„D:H“).Clear
i = 2
'Schleife für komplette Liste starten
Do While x > i
'Auftragsnummer einlesen
Auftr = Cells(i, 1)
'erstes Datum lesen
Dat1 = Cells(i, 2)
'Schleife starten bis Auftragsnummer anders
Do While Cells(i, 1) = Auftr
'Mengen addieren
menge1 = (menge1 + Cells(i, 3).Value)
i = i + 1
'Anzahl Tage mit Verkauf zählen
Tage = Tage + 1
Loop
'berechnete Werte ausgeben
'gesamte Menge in Zelle D4 ausgeben
Cells(i - 1, 4).Value = menge1
'Datum der letzten Buchung lesen
Dat2 = Cells(i - 1, 2)
'ist gesamt Menge 20000
Else
'Anzahl Tage von letzter Buchung + 7 Tage berechnen
Tage2 = Tage + 7
'gesamt Menge für kompletten Zeitraum berechnen
menge1 = (menge1 / Tage) * Tage2
End If
'Berechnete Gesamtmenge ausgeben
Cells(i - 1, 6).Value = menge1
'Zwischenspeicher löschen
menge1 = 0
Tage = 0
Tage2 = 0
Loop
End Sub
Spalte Auftrag > gib die Spaltebezeichnung ein, in denen die Auftragsnummern stehen, zB B:B (keine Anführungszeichen!)
Zelle Auftrag > ist die Auftragsspalte gemeint plus Zeilennummer in der du gerade die Formel eingibst zB. B2
Spalte Menge > die Spaltenbezeichnug in denen die kumulierte Menge steht, zB C:C
Bedarf > Zelle in dem die Bedarfmenge steht, zB. $K$1 - die $-Zeichen sind wichtig, damit beim Kopieren der Formel der Zugriff auf die Zelle bleibt. Du braucht dadurch nicht eine eigene Spalte nur für den Bedarf und du kannst den Bedarf einfacher ändern.
Aus der =wenn(Bedingung;„wahr“;„falsch“) Formel geht nun heraus, dass wenn die Menge größer 20000 ist „wahr“ ausgeführt wird (bis 20000 „falsch“). Solltest du hierzu weiter Hilfe benötigen, kannst du mich anschreiben.
Die Formel muss du nur noch in alle Zeilen (bis zur letzten Zeile deiner Tabelle) der Spalte hinein kopieren.
Für eine bessere Lesbarkeit für die kumulieren Mengen > 20000 hätte ich noch einen Tipp:
In der ersten Zeile deiner neuen Spalte, wo du die Formel eingegeben hast, für du folgendes aus:
Klicke auf´s „Menü“ dann weiter auf „Format“ und „Bedingte Formatierung“. Auf den erscheinten Dialogfenster änderst du von „Zellwert ist“ auf „Formel ist“. Rechst im Eingabefeld gibst du die Formel „=SUMMEWENN(Spalte Auftrag;Zelle Auftrag;Spalte Menge)>20000“ ein. Nun kannst du das Aussehen über „Format“ deinen Wünschen anpassen. Gut Lesbar ist die Schrift auf „Fett“ zu stellen und die Schriftfarbe zu ändern (Blau oder Rot). Solltest du dieses nachträglich machen, kannst du zum Kopieren der „Bedingten Formatierung“ den Pinsel (Format übertragen) nehmen.
tut mir leid, ich verstehe nicht, was du genau meinst. Was steht wo in welcher Zelle? Was genau ist kumuliert, bei Auftrag 54321 in deinem Beispiel ist der Wert am 04.09. kleiner als die bisherigen, also ist dieser nicht kumuliert, oder wie?
Deine Frage hört sich lösbar an, aber ich bräuchte ein konkretes Beispiel.
zunächst: Warum in Excel - Eine Datenbank in Access wäre hierfür m. E. weitaus besser geeignet.
Ohne Tabellenblatt bin ich ein wenig aufgeschmissen. Arbeitest Du mit Teilergebnissen?
Ein Funktion, die genau das macht, was Du brauchst, gibt es nicht, die mußt Du selbst schreiben. Also f11 drücken und VB-Editor starten: z. B.
function BerechneBedarf(menge as long) as long
if menge > 20000 then
menge durch tage
else
menge durch tage bis heute
end if
end function
Du kannst dann in einer Zelle die Funktion wie eine interne Funktion aufrufen: z. B. =BerechneBedarf(B4)
Welche Tage sollen genommen werden? Arbeits- oder Kalendertage. Wenn Du Kalendertage nimmst, dann kannst Du den letzten Datumswert vom ersten abziehen und erhältst eine Ganzzahl, die Du als Mengenteiler verwenden kannst.
also:
function BerechneBedarf(menge as long) as long
dim anzTage as integer
if menge > 20000 then
anzTage = Ende - Beginn
else
anzTage = Heute - Beginn
end if
BerechneBedarf = menge / anzTage
end function
hierfür gibt es den CurrentRegion Befehl um den belegten und zusammengehängten Tabellenbereich zu ermitteln. Auch musst du den Bereich nicht erst selektieren um dann dort eine Formel reinzuschreiben, geht auch einfacher.
Hier mal ein zusammengefasster Code:
Sub Programmcode
r = Range(„A1“).CurrentRegion.Rows.Count
Range(„I2:I“ & r).FormulaR1C1 = „=RC[-2]-RC[-1]“
Range(„J2:J“ & r).FormulaR1C1 = "=IF(RC[-1]
Dim letzte As Integer
'letzte verwendete Zeile in Spalte „A“(nach Anforderung ändern) ermitteln
letzte = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row