Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
900to904
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
900to904
900to904
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Fortsetz. Formel in VBA umschreiben @Beverly

Fortsetz. Formel in VBA umschreiben @Beverly
27.08.2007 09:15:04
Rainer
Hallo Karin
Hab vielen Dank für dein neues File. ich war leider das ganze Wochenende verhindert und kann erst jetzt weitermachen. da der letzte thread geschlossen wurde habe ich hier eine Fortsetzung eröffnet.
Ich habe jetzt das File angepasst damit es passt.
http://www.uploadagent.de/files/1188198664/45384_NEU.xls
Spalte F: ursprüngliche Version, bei der nicht die Gesamtsumme gebraucht wird, sondern das Summewenn. Die Kosten müssen nur auf Print verteilt werden. insofern bekommt der Bereich Viscom keine Werte. (Achtung: dass die Bereiche schön sortiert sind, ist danach nicht mehr so)
Spalte E: Vereinfachte Funktionalität, bei welcher einfach die Gesamtsumme genommen wird und KEINE summewenn Abfrage benötigt wird. Dies ist grundsätzlich eine Vereinfachung der ersten Version.
Viele Grüsse & ein guter Wochenstart.
Rainer

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fortsetz. Formel in VBA umschreiben
27.08.2007 18:07:00
Beverly
Hi Rainer,
habe deinen Beitrag leider erst jetzt gelesen.
Irgendwie habe ich ein Verständnisproblem bezüglich deiner Formeln. Ich habe das Ganze so interpretiert: ermittle die Gesamtsumme in Spalte B der Tabelle1. Schau in Tabelle Stammdaten Spalte B -&gt suche die 1. Kostenstelle in der Tabelle Main -&gt nimm den Wert aus Spalte C für diese Kostenstelle, multipliziere ihn mit 100 und teile ihn durch die schon ermittlte Summe aus Spalte B der Tabelle1. Laufe anschließend in Tabelle1 von der 2. bis zur letzten Zeile und multipliziere für alle Werte, die in Spalte A den Betriff aus Stammdaten Spalte D beinhalten mit dem Wert aus Spalte B der Tabelle1 (für die 1. Kostenstelle ist es PrintA) und schreibe das Ergebnis in Spalte C. Das ist ein Schleifendurchlauf. Das wird so oft wiederholt, bis in Spalte B der Tabelle Stammdaten kein Wert mehr steht.
Bei diesem Ablauf stimmen zwar die Ergebnisse für PrintA mit deinem Formelergebnis in Spalte E überein, aber dann nicht mehr.
https://www.herber.de/bbs/user/45440.xls
Bis später,
Karin

Anzeige
AW: Fortsetz. Formel in VBA umschreiben
28.08.2007 08:42:59
Rainer
Hallo Karin
Kein Problem dass du "erst" jetzt gesehn hast, ich möchte dich nämlich nicht stressen.
1. "Irgendwie habe ich ein Verständnisproblem bezüglich deiner Formeln. Ich habe das Ganze so interpretiert: ermittle die Gesamtsumme in Spalte B der Tabelle1. Schau in Tabelle Stammdaten Spalte B, suche die 1. Kostenstelle in der Tabelle Main, nimm den Wert aus Spalte C für diese Kostenstelle, multipliziere ihn mit 100 und teile ihn durch die schon ermittlte Summe aus Spalte B der Tabelle1. "
korrekt. (die Multiplikation mit 100 kann weggelassen werden, das habe ich vergessen zu entfernen)
2. "Laufe anschließend in Tabelle1 von der 2. bis zur letzten Zeile und multipliziere für alle Werte".
Genau, nicht mehr und nicht weniger. :-)
Dies ist die Formel, wenn die Kosten auf alle Bereiche gleich umgelegt werden.
Ich habe ja noch eine Spalte angehängt, mit einer andern Kostenstelle. Diese Kosten beziehen sich nicht auf alle Bereiche, sondern sind schon pro Bereich aufgeteilt.
Da passiert alles genau gleich, bis auf die Summenbildung. der zweite Kostenblock der in Tabelle1 Spalte F eingefügt werden soll, darf hier nur auf Print verteilt werden. Insofern muss die summe der Totalen Spalte gebildet werden, sondern nur die summe der Einträge die Print haben (PrintA & PrintB etc.).
Das Ergebnis wird dann mit allen zellen die auch diesem Bereich Angehören, multipliziert.
Bei dieser Berechnung bleibt ja dann einen Teil der Spalte leer, (hier Viscom = visual Communication, das ist ein anderer Bereich).
Für die leer gebliebenen Zellen soll dann ein anderer Kostenblock genommen werden und das gleiche gerechnet werden. Schön wäre natürlich, wenn das alles in einer Spalte Möglich wäre.
Die Auflistung der genauen Bereichsbezeichnung im Blatt Stammdaten, hab ich nur für diese Überprüfung aufgelistet. sonst braucht es sie gar nicht.
Falls etwas (vor allem der 2. Teil) noch etwas unklar war bitte ich dich um natürlich wieder nachzufragen.
Viele Grüsse
Rainer

Anzeige
AW: Fortsetz. Formel in VBA umschreiben
29.08.2007 07:31:25
Beverly
Hi Rainer,
soll dann für jede Kostenstelle eine neue Spalte angelegt werden? Und wie ist das mit den Varianten?
Für 1 Kostenstelle (Zelle B5 aus Stammdaten) sollte der Code für die 1. Variante (Gesamtsumme) dann so lauten

Sub kostenstelle_feststellen_var1()
Dim raZelleMain As Range
Dim raZelleTab1 As Range
Dim loLetzteMain As Long
Dim loLetzteStamm As Long
Dim loLetzteTab1 As Long
Dim loZeileStamm As Long
Dim loZeileTab1 As Long
Dim inAnzahlKunden As Integer
Dim doSumme As Double
Dim doQuotient As Double
Dim strAdrTab1 As String
Dim wsMain As Worksheet
Dim wsTab1 As Worksheet
Set wsMain = Worksheets("Mainlist")
Set wsTab1 = Worksheets("Tabelle1")
loLetzteMain = IIf(IsEmpty(wsMain.Cells(wsMain.Rows.Count, 2)), wsMain.Cells(wsMain.Rows. _
Count, 2).End(xlUp).Row, wsMain.Rows.Count)
loLetzteTab1 = IIf(IsEmpty(wsTab1.Cells(wsTab1.Rows.Count, 2)), wsTab1.Cells(wsTab1.Rows. _
Count, 2).End(xlUp).Row, wsTab1.Rows.Count)
Application.ScreenUpdating = False
doSumme = Application.WorksheetFunction.Sum(wsTab1.Range("B2:B" & loLetzteTab1))
With Worksheets("Stammdaten")
loLetzteStamm = IIf(IsEmpty(.Cells(.Rows.Count, 2)), .Cells(.Rows.Count, 2).End(xlUp). _
Row, .Rows.Count)
Set raZelleMain = wsMain.Range("B2:B" & loLetzteMain).Find(.Cells(5, 2), lookat:=xlPart) _
For loZeileStamm = 5 To loLetzteStamm
If Not raZelleMain Is Nothing Then
If doSumme  0 Then
doQuotient = raZelleMain.Offset(0, 1) * 100 / doSumme
Else
doQuotient = 0
End If
For loZeileTab1 = 2 To loLetzteTab1
Set raZelleTab1 = wsTab1.Range("A1:A" & loLetzteTab1).Find(.Cells( _
loZeileStamm, 4), lookat:=xlWhole)
If Not raZelleTab1 Is Nothing Then
strAdrTab1 = raZelleTab1.Address
Do
raZelleTab1.Offset(0, 2) = doQuotient * raZelleTab1.Offset(0, 1)
Set raZelleTab1 = wsTab1.Range("A1:A" & loLetzteTab1).FindNext( _
raZelleTab1)
Loop While Not raZelleTab1 Is Nothing And raZelleTab1.Address   _
strAdrTab1
End If
Next loZeileTab1
Else
MsgBox "Kostenstelle " & .Cells(loZeileStamm, 2) & " in Tabelle 'Mainlist'  _
nicht gefunden"
End If
Next loZeileStamm
End With
Application.ScreenUpdating = True
End Sub


Für die 2. Variante wäre es dann derselbe Code, nur dass die Zeile für Summenbildung so aussehen müsste


doSumme = Application.WorksheetFunction.SumIf(wsTab1.Range("A2:A" & loLetzteTab1), "Print*", _
wsTab1.Range("B2:B" & loLetzteTab1))


Bis später,
Karin

Anzeige
AW: Fortsetz. Formel in VBA umschreiben
29.08.2007 10:22:00
Rainer
Hallo Karin
Hab vielen Dank für deine Programmierung.
Ich habe die Codes nun mal hier eingefügt (Variante 1 und Variante 2).
http://www.uploadagent.de/files/1188375195/45440.xls
Ich habe zudem noch einige Erläuterungen reingeschrieben.
Variante 1: Funktioniert gut. Es soll aber der ganze Kostenblock auf alle Bereiche umgeleitet werden.
Variante 2: Bisher haben wir eine Kostenstelle auf alle vom Bereich Print aufgeteilt. Das ist genau richtig. In der selben Spalte sollte zusätzlich noch der Wert einer anderen Kostenstelle auf alle Kunden vom Bereich Viscom aufgeteilt werden. Genau so wie vorher auf "Print" aufgeteilt wurde. (ich habe im File selbst noch mehr erläuterungen an entsprechender Stelle).
Nun habe ich noch folgende Fragen: Wo im Code kann ich einstellen, in Welche Spalte geschrieben wird? (habe weder den Index 3 (momentan Spalte C) noch ein "C" gefunden.
Ich habe ja eince grössere Filekonstruktion in die das Ganze eingebaut werden soll. Die Tabellenblätter heisen gleich, nur passiert das Ganze nicht alles in einem File. Ich werde, sobald es so tut wie gewünscht, das Ganze implemntieren und wäre natürlich froh, wenn du mir bei Fragen unterstützend beistehen kannst. Die idee ist aber schon, dass ich das dann einbaue. Weil irgendetwas muss ja auch ich machen.
Viele liebe Grüsse
Rainer

Anzeige
AW: Fortsetz. Formel in VBA umschreiben
29.08.2007 18:13:59
Beverly
Hi Rainer,
ich habe dir bereits einen Code geschrieben, wie man die Werte auf die Gesamtsumme aufteilt und auch einen Code, bei dem sich die Summe nur auf Print bezieht. Jetzt möchtest du noch dieses und noch jenes - was kommt noch alles? Inzwischen hat es sich schon zu einer Auftragsprogrammierung ausgeweitet, was den Rahmen eines Forums bei Weitem übersteigt.
In dieser Zeile aus dem Code im letzten Beitrag doSumme = Application.WorksheetFunction.Sum(wsTab1.Range("B2:B" & loLetzteTab1)) wird die Summe über alles in Spalte B gebildet und in der ergänzenden Zeile doSumme = Application.WorksheetFunction.SumIf(wsTab1.Range("A2:A" & loLetzteTab1), "Print*", _
wsTab1.Range("B2:B" & loLetzteTab1))
über die mit Print. Du musst also nur diese Zeile austauschen.
Zu deiner Frage: in dieser Codezeile

raZelleTab1.Offset(0, 2) = doQuotient * raZelleTab1.Offset(0, 1)


bedeutet raZelleTab1.Offset(0, 2) Gefundene Zelle in Spalte A mit Versatz um 2 Spalten - also Spalte C, d.h. in diese Spalte wird geschrieben.

Anzeige
AW: Fortsetz. Formel in VBA umschreiben
29.08.2007 18:35:00
Rainer
Hallo Karin
Danke für die Hilfe.
Ich bin auch gerne bereit dir etwas als Gegenleistung zu geben. Was hast du für einen Stundensatz? wie viel Arbeit hattest du bis jetzt schon?
Den code kann ich erst morgen Einbauen - ich werde somit wieder posten.
nimm doch per mail mit mir Kontakt auf:
rainer.kyburz@antalis.ch
Gruss
Rainer

326 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige