Programmieren - alles kontrollieren 4.937 Themen, 20.656 Beiträge

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

Christoph Maus / 17 Antworten / Flachansicht 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
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 Kolti
@Christoph Kolti
@Christoph Christoph Maus
@Christoph Christoph Maus
Ja aber, hallo Kolti
Ja aber, hallo Christoph Maus
Na gut. Kolti