Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

Excel-Programmierung: Habe ein Problem - und zwar ein großes!

Christoph Maus / 17 Antworten / Baumansicht Nickles

Hi, ich hab ein ziemliches Problem mit Excel und einem 'Pogramm' dort.


Aber erst mal zum Auftrag:


Aufgabe ist/war es, eine Durckerbestandsliste in Excel zu entwerfen, wo dann alle Drucker gelisted werden, man einen Soll-Bestand für Patronen / Toner eingibt und das Teil dann aus der verbruchten Zahl berechnet ob neue Sachen bestellt werden müssen...
Dann sollten die Bestellsachen automatisch in eine Vorlage für eine Angebotsanfrage eingetragen werden und und und...


Ich hab mal die Sachen gezippt auf meinen Webspace geladen mit ner Datei, die verdeutlich, was alles drin sein muss. Liegt unter http://www.ew-h.de/drucker.zip


So, zu meinem Problem:
In der Tabelle "Übersicht" sollen die Kosten so ermittelt werden, dass man unter "Kosten" nur den Druckertyp einträgt und die Kosten für den Druckertyp.
Die Funktion sollte also prüfen, ob der Druckertyp von z.B. C6=Kosten!C10 ist und dann die Kosten ermitteln, also (E6*Kosten!D10)+(...)
Mein Problem ist die Prüfung! Ich braüchte da ne Funktion wie z.B. "SUMMEWENN" nur halt als "PRODUKTWENN" - aber die gibt's nicht!


Klar, ich könnte das auch mit der WENN-Funktion machen, aber die wäre extrem unkomfortabel und extem unübersichtlich (lang). Und VBA kann ich leider nicht...
Und ohne das Teil, stimmt die Sache vorne und hinten nicht!


Das größte Problem is aber, dass ich das am Montag, den 10. März 2003 funktionsfertig abgeben muss!!! *argh*


Ich hoffe ihr habt meine Erklärungen halbwegs verstanden...


JEDE HILFE IST ERWÜNSCHT!!! (Gerne auch mit VBA, dann aber mit guter Erklärung...)


thx!


cm

bei Antwort benachrichtigen
Kolti Christoph Maus „Excel-Programmierung: Habe ein Problem - und zwar ein großes!“
Optionen

Wieviel gibst Du denn von Deinem Gehalt ab?

bei Antwort benachrichtigen
Christoph Maus Kolti „Wieviel gibst Du denn von Deinem Gehalt ab? “
Optionen

100% wenn du willst...

Wird aber nicht vielbei rausspringen, weil das für die Schule is...

cm

bei Antwort benachrichtigen
Kolti Christoph Maus „Excel-Programmierung: Habe ein Problem - und zwar ein großes!“
Optionen

Mit =VERGLEICH(C6;Kosten!C6:C14;0) bekommst Du die Zeile, in der Dein Drucker steht.
Diese Zahl benötigst Du, um in den rechts daneben liegenden Nachbarspalten mit SVERWEIS die dazugehörigen Werte zu suchen.
Deine Formel mußt Du Dir nur noch selbst zusammenbasteln.

bei Antwort benachrichtigen
Christoph Maus Kolti „Mit VERGLEICH C6 Kosten!C6:C14 0 bekommst Du die Zeile, in der Dein Drucker...“
Optionen

Danke dir Kolti

Ich versuchs heute abend mal in Ruhe und meld mich wieder!

cm

bei Antwort benachrichtigen
Christoph Maus Nachtrag zu: „Danke dir Kolti Ich versuchs heute abend mal in Ruhe und meld mich wieder! cm“
Optionen

So, also ich hab's versucht:

Ich hab in irgendeine Zelle die Formel "=VERGLEICH(C6;Kosten!$C$6:$C$14;0)" gesetzt.

Die Formal liefert mir dann ne 1 (TRUE) oder ne 0 (FALSE) - klar!

Aber was is mit dem SVERWEIS???
Das kapier ich nicht so ganz...

Ich hab in ne Zelle daneben folgende Formel gesetzt: "=SVERWEIS(C6;Kosten!$C$6:$C$14;1;FALSCH)"

Richtig?

Oder wie? Oder muss das kombiniert werden oder was?

cm

bei Antwort benachrichtigen
Kolti Christoph Maus „So, also ich hab s versucht: Ich hab in irgendeine Zelle die Formel VERGLEICH C6...“
Optionen

Die Formel Vergleich mit dem Parameter 0 liefert Dir nicht TRUE oder FALSE, sondern die Zeile, in der der Wert gefunden wurde.
C6-C14, C6 ist 1, C7 ist 2, usw.

bei Antwort benachrichtigen
Christoph Maus Kolti „Die Formel Vergleich mit dem Parameter 0 liefert Dir nicht TRUE oder FALSE,...“
Optionen

OK, das hab ich auch gemerkt ;-)

Aber ich kapier nicht, was ich mit dem SVERWEIS anfangen soll...

cm

bei Antwort benachrichtigen
Uli M Christoph Maus „Excel-Programmierung: Habe ein Problem - und zwar ein großes!“
Optionen

Ich habe mir dein Teil mal angeschaut und - obwohl ich bestimmt kein Excel-VBA-Experte bin (und Excel auch sonst möglichst aus dem Weg gehe), habe ich ein bisschen was zusammen geschrieben. Leider habe ich zu spät bemerkt, dass die beiden benötigten Tabellen alles andere als durchgängig aufgebaut sind (Laser TS). Dieses Problem wirst du vermutlich aber auch bei jeder Berechnung via Formel haben.

Die Ereignisprozedur, einzubringen in "Tabelle 1 (Übersicht") reagiert auf veränderte Zellwerte in dieser Tabelle. Im Prinzip ist sie getestet, ein wenig kommentiert, aber praktisch ohne Fehlerbehandlung. "Richtig funktionieren" wird sie nur bei den Lasern, ich habe daher nachträglich Zeilen unterhalb Zeile 15 ausgeschlossen (iMaxLaser) (Namen waren in der Mappe nicht anzutreffen). Natürlich dürfen keine Änderungen am Aufbau der beiden relevanten Tabellen vorgenommen werden (z.B. Tabellen-Namen ändern, Spalten einfügen oder löschen, aber auch nichts in Spalte A der Kosten-Tab).

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim oÜbersicht As Worksheet, oKosten As Worksheet
Dim oUsedKosten As Range
Dim iSpalte As Integer, iZeile As Integer
Dim Y As Integer
Dim sModell As String
Dim bGefunden As Boolean
Dim lToner As Double, lWalzen As Double, lSumme As Double
Const iMaxLaser As Integer = 15

Set oÜbersicht = ActiveSheet
' Target ist der veränderte Zellbereich
iSpalte = Target.Column
iZeile = Target.Row
' nix passiert, wenn nicht Änderung in Spalte 3, 5 oder 6
If Not (iSpalte = 3 Or iSpalte = 5 Or iSpalte = 6) Then Exit Sub
' nachträglich wg. TS-Problem
If iZeile > iMaxLaser Then Exit Sub

' Modellbezeichnung schnappen und die betr. Spalte des benutzten Bereichs der Kosten-Tabelle danach durchforsten
sModell = oÜbersicht.Range("C" & iZeile)
If sModell = "" Then Exit Sub
Set oKosten = ActiveWorkbook.Sheets("Kosten")
Set oUsedKosten = oKosten.UsedRange
For x = 6 To oUsedKosten.Rows.Count
' jeweils 1 höher als reell, da die Spalte "A" offenbar nicht benutzt wird
If oUsedKosten.Range("B" & x) = sModell Then bGefunden = True: Exit For
Next x
' Modell nicht gefunden => nix passiert
If Not bGefunden Then Exit Sub

' Berechnungen:
lToner = oÜbersicht.Range("E" & iZeile)
lToner = lToner * oUsedKosten.Range("C" & x)
lWalzen = oÜbersicht.Range("F" & iZeile)
lWalzen = lWalzen * oUsedKosten.Range("D" & x)
lSumme = Format(lToner + lWalzen, "#.##") ' format event. unnötig
Debug.Print lToner & vbCr & lWalzen & vbCr _
& "oUsedKosten.Range: " & oUsedKosten.Range("D" & x) _
& vbCr & lSumme ' nur zum Test

' Ausgabe:
oÜbersicht.Range("G" & iZeile) = lSumme
End Sub

bei Antwort benachrichtigen
Christoph Maus Uli M „Ich habe mir dein Teil mal angeschaut und - obwohl ich bestimmt kein...“
Optionen

Hi!

Danke - ich werd's auf jeden Fall mal ausprobieren!

Ich weiß, dass das nicht alles so optimal is - finde die Aufgabe an sich mit Excel sowieso schwachsinnig (würd's mit PHP & MySQL machen, wenn ich könnte - oder mit Access-Backend...)

cm

bei Antwort benachrichtigen
Christoph Maus Nachtrag zu: „Hi! Danke - ich werd s auf jeden Fall mal ausprobieren! Ich weiß, dass das...“
Optionen

Sorry, komm damit nicht klar!

Also, ich hab die Mappe geöffnet, und das im VBA-Editor reinkopiert und dann gespeichtert - und dann?

cm

bei Antwort benachrichtigen
Kolti Christoph Maus „Excel-Programmierung: Habe ein Problem - und zwar ein großes!“
Optionen

Ich habe Dir doch das fertige Problem in Deiner Tabelle zugemehlt.
;O)

bei Antwort benachrichtigen
Kolti Nachtrag zu: „@Christoph“
Optionen

=SVERWEIS(C6;Kosten!$C$6:$C$14;2;FALSCH)*Wert1 + "=SVERWEIS(C6;Kosten!$C$6:$C$14;3;FALSCH)" * Wert2
=SVERWEIS(C7;Kosten!$C$6:$C$14;2;FALSCH)*Wert1 + "=SVERWEIS(C7;Kosten!$C$6:$C$14;3;FALSCH)" * Wert2
=SVERWEIS(C8;Kosten!$C$6:$C$14;2;FALSCH)*Wert1 + "=SVERWEIS(C8;Kosten!$C$6:$C$14;3;FALSCH)" * Wert2
=SVERWEIS(C9;Kosten!$C$6:$C$14;2;FALSCH)*Wert1 + "=SVERWEIS(C9;Kosten!$C$6:$C$14;3;FALSCH)" * Wert2

Der SVERWEIS findet in der ersten Spalte den Wert von C6 und in liefert den Wert aus der 2. und 3. Spalte zurück.
Jetzt kann es nur sein, daß es nicht $C6:$C14, sondern $C6:$E14 heißen muß. (Ganzes Array markieren).

bei Antwort benachrichtigen
Christoph Maus Kolti „@Christoph“
Optionen

Ja, hab gerade geguckt - is angekommen!

Das is ne Mail-Addy, di ich nur so einmal in der Woche nachgucke - bekomm da viel Spam...

Ich werd's morgen mal genauer unter die Lupe nehmen!

cm

bei Antwort benachrichtigen
Christoph Maus Nachtrag zu: „@Christoph“
Optionen

OK, fuktionieren tut's, aber kopierbar is die Formel nicht oder wie?

Weil, wenn ich die kopiere, dann bekomm ich da völlig unterschiedliche Werte raus...

Hab die hier verwendet:

=(SVERWEIS(C6;Kosten!$C$6:$E$14;2;FALSCH)*E$6)+(SVERWEIS(C6;Kosten!$C$6:$E$14;3;FALSCH)*E$7)

cm

bei Antwort benachrichtigen
Kolti Christoph Maus „Excel-Programmierung: Habe ein Problem - und zwar ein großes!“
Optionen

Falsch
=(SVERWEIS(C6;Kosten!$C$6:$E$14;2;FALSCH)*E$6)+(SVERWEIS(C6;Kosten!$C$6:$E$14;3;FALSCH)*E$7)

Richtig:
=SVERWEIS(C6;Kosten!$C$6:$E$14;2;FALSCH)*E6+SVERWEIS(C6;Kosten!$C$6:$E$14;3;FALSCH)*F6
In C6 stand doch der Drucker, in E6 stand 3 und in F6 auch 3 und in G6 die Summe oder?



C6, E6 und F6 müssen sich weiterschalten lassen.
Alles was in Kosten drinsteht, bleibt der selbe Bereich.
Die Klammer brauchen auch nicht, excel erkennt Punkt- und Strichrechnung.

Die Formel macht folgendes:
In C6 wird der Drucker vorgegeben. In Kosten C6 wird der Drucker in Spalte 1 gesucht. Wenn er gefunden wird, nimmt die Formel den Wert in Spalte 2 und multipliziert in mit E6, das gleiche nochmal mit Spalte 3 und F6. Beides wird zusammengezählt.
Jetzt dasselbe mit C7,

bei Antwort benachrichtigen
Christoph Maus Kolti „Ja aber, hallo“
Optionen

Danke dir Kolti - die Sache hat sich mittlerweile erledigt und ich hab auch die schnauze voll.

Der Sinn der gesamten Aufgabe bestand nämlich mehr oder weniger darin, dass wir merken sollte, das das alles gar nicht mit Excel geht sondern nur mit VBA als Hilfsmittel.
Toll! Die ganze Sache machen wir jetzt nämlich nochmal neu - ich hab nen dicken Hals & mir reicht's!

Trotzdem danke!

cm

bei Antwort benachrichtigen
Kolti Christoph Maus „Ja aber, hallo“
Optionen

Meine Lösung war eben Excel und nicht VBA.

bei Antwort benachrichtigen