Registriert seit: 21.07.2016
Version(en): 2007
Hiernochmal mit Automatisierung bei Änderung des Wertes in "A2" (aus meinem Beispiel) Private Sub Worksheet_Change(ByVal Target As Range)
Dim o As Long 'Anzahl Objekte
Dim nd As Double 'Nutzungsdauer
If Target.Address = "$A$2" Then 'in Deinem Fall ist Target.Address = "$B$17"
For o = 1 To Tabelle1.Cells(2, 1).Value
Tabelle1.Cells(4, o).Value = "Objekt " & o
zz = 5 'für die Ausgabe der Modifikationsintervalle
For nd = 0 To 1 Step 0.3 'Step definiert die Schrittweite der Schleife ist also das Intervall
If nd > 0 Then
Tabelle1.Cells(zz, o).Value = o + nd
zz = zz + 1
End If
Next nd
Next o
End If
End Sub
VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0 Ich kann Dir leider nicht sagen wo die Ergbenisse hingeschrieben werden sollen :32:. Die Antwort bist Du uns noch schuldig. Gruß Ich
Registriert seit: 24.09.2016
Version(en): Office 365 / Mac OS
24.09.2016, 11:05
(Dieser Beitrag wurde zuletzt bearbeitet: 24.09.2016, 13:35 von WillWissen.
Bearbeitungsgrund: Minischriftformatierung entfernt und Makro in Codetags gesetzt
)
Genau und das mit Variabler Anzahl an Objekten, Variabler Modifikationsintervall und Variabler Nutzungsdauer . Ich stelle mir das so vor: Code: Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("B17")) Is Nothing Then //In Zelle B17 wird ein Wert eingetragen, dann wird das Makro ausgelost
Dim i As Integer //Zähler 1 Dim j As Integer //Zähler 2 Dim Stück As Integer //Anzahl der Käufe die nacheinander getätigt werden Dim Nutzungsdauer As Variant // Nutzungsdauer Dim Modifikationsintervall As Variant // Modifikationsintervall
Stück = Range("B36").Value //Wird aus Zelle b36 eingelesen Nutzungsdauer = Range("B37").Value // Wird aus Zelle B37 eingelesen Modifikationsintervall = Range("B68").Value //Wird aus Zelle B86 eingeben
For j = 0 To j = Stück-1 // Benötigte Stückzahl - 1 da null als 1 gezählt wird
i = 1 //jedes mal wenn For Schleife aufgerufen wird soll wieder beim ersten Modifikationsintervall begonnen werden
Do While i * Modifikationsintervall <= Nutzungsdauer // Es muss so oft modifiziert werden bis das Ende der Nutzungsdauer erreicht ist Cells(100 + i, 1 + j).Value = 1 + j * Nutzungsdauer + i * Einschleifintervall //Die Ermittelten Zeitpunkte sollen für das Erste Objekt in Spalte A ab Zeile 101 ausgegeben werden, beim nächsten Objekt ab B i = i + 1 Loop
Next j
End If End Sub
Es funktioniert auch halbwegs. Problem ist, es wird immer eine Iteration zu viel ausgeführt und er geht nicht zurück in die for Schleife und macht dort weiter.
Registriert seit: 21.07.2016
Version(en): 2007
24.09.2016, 11:15
(Dieser Beitrag wurde zuletzt bearbeitet: 24.09.2016, 11:16 von IchBinIch.)
Ob das so deutlicher wird? Private Sub Worksheet_Change(ByVal Target As Range) Dim o As Long 'Anzahl Objekte Dim nd As Double 'Nutzungsdauer
'Wenn der Wert in "A2" geändert wird If Target.Address = "$A$2" Then 'in Deinem Fall ist Target.Address = "$B$17"
'Aufsetzen der Scheife für die Anzahl der Objekte (Anzahl der Durchläufe = Wert in "A2") For o = 1 To Tabelle1.Cells(2, 1).Value 'Das Objekt wird in Zeile 4 Spalte (o) (für den ersten Duchlauf der Schleife ist o = 1) ausgegeben Tabelle1.Cells(4, o).Value = "Objekt " & o zz = 5 'für die Ausgabe der Modifikationsintervalle 'Aufsetzen der Schleife für die Modifikationen während der Nutzungsdauer For nd = 0 To 1 Step 0.3 'Step definiert die Schrittweite der Schleife ist also das Intervall 'Wenn die das Modifikationsintervall größer 0 ist dann If nd > 0 Then 'gebe die Nutzungsdauer in Tabelle1 ab Zeile 5 in Spalte o aus (Spalte ergibt sich aus der Anzahl der Objekte) Tabelle1.Cells(zz, o).Value = o + nd 'Erhöhe den Wert für die Zielzeile um 1 zz = zz + 1 'Ende der Prüfung End If 'Nächstes Intervall Next nd 'Nächtes Objekt Next o
End If End Sub
VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0
Registriert seit: 21.07.2016
Version(en): 2007
24.09.2016, 11:21
(Dieser Beitrag wurde zuletzt bearbeitet: 24.09.2016, 11:22 von IchBinIch.)
Und ganz dynamisch Tabelle1 | A | B | C | D | 1 | Anzahl Objekte | Modifikationsintervall | Nutzungsdsauer | | 2 | 4 | 0,5 | 2 | | 3 | | | | | 4 | Objekt 1 | Objekt 2 | Objekt 3 | Objekt 4 | 5 | 1,5 | 2,5 | 3,5 | 4,5 | 6 | 2 | 3 | 4 | 5 | 7 | 2,5 | 3,5 | 4,5 | 5,5 | 8 | 3 | 4 | 5 | 6 | Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8 Private Sub Worksheet_Change(ByVal Target As Range) Dim o As Long 'Anzahl Objekte Dim nd As Double 'Nutzungsdauer
'Wenn der Wert in "A2" geändert wird If Target.Address = "$A$2" Then 'in Deinem Fall ist Target.Address = "$B$17"
'Aufsetzen der Scheife für die Anzahl der Objekte (Anzahl der Durchläufe = Wert in "A2") For o = 1 To Tabelle1.Cells(2, 1).Value 'Das Objekt wird in Zeile 4 Spalte (o) (für den ersten Duchlauf der Schleife ist o = 1) ausgegeben Tabelle1.Cells(4, o).Value = "Objekt " & o zz = 5 'für die Ausgabe der Modifikationsintervalle 'Aufsetzen der Schleife für die Modifikationen während der Nutzungsdauer For nd = 0 To Tabelle1.Cells(2, 3).Value Step Tabelle1.Cells(2, 2).Value 'Step definiert die Schrittweite der Schleife ist also das Intervall 'Wenn die das Modifikationsintervall größer 0 ist dann If nd > 0 Then 'gebe die Nutzungsdauer in Tabelle1 ab Zeile 5 in Spalte o aus (Spalte ergibt sich aus der Anzahl der Objekte) Tabelle1.Cells(zz, o).Value = o + nd 'Erhöhe den Wert für die Zielzeile um 1 zz = zz + 1 'Ende der Prüfung End If 'Nächstes Intervall Next nd 'Nächtes Objekt Next o
End If End Sub
VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0
Registriert seit: 24.09.2016
Version(en): Office 365 / Mac OS
Vielen Dank, ich Kennzeichne mal die Sachen die ich nicht verstehe und passe es an mein Dokument an (gekennzeichnet durch )
Private Sub Worksheet_Change(ByVal Target As Range) Dim o As Long 'Anzahl Objekte Dim nd As Double 'Nutzungsdauer
'Wenn der Wert in "A2" geändert wird Alles klar verstehe ich If Target.Address = "$B$17" Then 'in Deinem Fall ist Target.Address = "$B$17"
'Aufsetzen der Scheife für die Anzahl der Objekte (Anzahl der Durchläufe = Wert in "A2") For o = 1 To Tabelle1.Cells(17, 2).Value Modifikation zu Wert 17,2 'Das Objekt wird in Zeile 100 Spalte (o) (für den ersten Duchlauf der Schleife ist o = 1) ausgegeben Tabelle1.Cells(100, o).Value = "Objekt " & o zz = 5 'für die Ausgabe der Modifikationsintervalle Das Verstehe ich nicht 'Aufsetzen der Schleife für die Modifikationen während der Nutzungsdauer For nd = 0 To 1 Step 0.3 'Step definiert die Schrittweite der Schleife ist also das Intervall Das Modifikationsintervall möchte ich variabel gestalten 'Wenn die das Modifikationsintervall größer 0 ist dann If nd > 0 Then Wo wird geprüft ob ein neues Objekt gekauft werden musste? 'gebe die Nutzungsdauer in Tabelle1 ab Zeile 5 in Spalte o aus (Spalte ergibt sich aus der Anzahl der Objekte) Tabelle1.Cells(zz, o).Value = o + nd 'Erhöhe den Wert für die Zielzeile um 1 zz = zz + 1 'Ende der Prüfung End If 'Nächstes Intervall Next nd 'Nächtes Objekt Next o
End If End Sub
Registriert seit: 24.09.2016
Version(en): Office 365 / Mac OS
24.09.2016, 11:29
(Dieser Beitrag wurde zuletzt bearbeitet: 24.09.2016, 11:29 von LeibnizCasio.)
Ich sehe gerade deine zweite Antwort.
Wenn in dem Jahr ein neues Objekt gekauft werden muss, ist keine Modifikation notwendig. Auf dein Beispiel bezogen, sollen die Zeitpunkte der Modifikation wie folgt ausgegeben werden:
1,5 3,5 4,5 2 4 5 2,5 4,5 5,5
Vielen Dank für deine geduldige Hilfe.
Registriert seit: 21.07.2016
Version(en): 2007
Zunächst mal hierzu: Zitat:zz = 5 'für die Ausgabe der Modifikationsintervalle Das Verstehe ich nicht Ich gebe die erste Zeile in der die Intervalle ausgegeben werden statisch vor. zz = Zielzeile Wenn ich Dich richtig verstehe muss das bei Dir 101 sein. Zitat:If nd > 0 Then Wo wird geprüft ob ein neues Objekt gekauft werden musste? Das ergibt sich aus der Nutzungsdauer. Also hieraus Code: For nd = 0 To Tabelle1.Cells(2, 3).Value
siehe mein letztes Posting. Und schließlich Tabelle1 | A | B | C | D | E | 1 | Anzahl Objekte | Modifikationsintervall | Nutzungsdsauer | | | 2 | 5 | 0,5 | 2 | | | 3 | | | | | | 4 | Objekt 1 | Objekt 2 | Objekt 3 | Objekt 4 | Objekt 5 | 5 | 1,5 | 2,5 | 3,5 | 4,5 | 5,5 | 6 | 2 | 3 | 4 | 5 | 6 | 7 | | 3,5 | 4,5 | 5,5 | 6,5 | 8 | | 4 | 5 | 6 | 7 | Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8 Private Sub Worksheet_Change(ByVal Target As Range) Dim o As Long 'Anzahl Objekte Dim nd As Double 'Nutzungsdauer
'Wenn der Wert in "A2" geändert wird If Target.Address = "$A$2" Then 'in Deinem Fall ist Target.Address = "$B$17"
'Aufsetzen der Scheife für die Anzahl der Objekte (Anzahl der Durchläufe = Wert in "A2") For o = 1 To Tabelle1.Cells(2, 1).Value 'Das Objekt wird in Zeile 4 Spalte (o) (für den ersten Duchlauf der Schleife ist o = 1) ausgegeben Tabelle1.Cells(4, o).Value = "Objekt " & o zz = 5 'für die Ausgabe der Modifikationsintervalle 'Aufsetzen der Schleife für die Modifikationen während der Nutzungsdauer For nd = 0 To Tabelle1.Cells(2, 3).Value Step Tabelle1.Cells(2, 2).Value 'Step definiert die Schrittweite der Schleife ist also das Intervall 'Wenn die das Modifikationsintervall größer 0 und kleiner oder gleich Nutzungsdauer ist dann If nd > 0 And nd <= o Then 'gebe die Nutzungsdauer in Tabelle1 ab Zeile 5 in Spalte o aus (Spalte ergibt sich aus der Anzahl der Objekte) Tabelle1.Cells(zz, o).Value = o + nd 'Erhöhe den Wert für die Zielzeile um 1 zz = zz + 1 'Ende der Prüfung End If 'Nächstes Intervall Next nd 'Nächtes Objekt Next o
End If End Sub
VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0 Gruß Ich
Registriert seit: 24.09.2016
Version(en): Office 365 / Mac OS
Tut mir leid das ich so schwer von Begriff bin.
Aber deine Tabelle stimmt Meineserachtens nicht.
Zu den Zeitpunkten 3, 5 ,7 wird keine Modifikation vorgenommen.
Außerdem lassen sich bei dir ja Werte doppelt finden, das geht ja auch nicht.
Danke.
Registriert seit: 24.09.2016
Version(en): Office 365 / Mac OS
24.09.2016, 12:34
(Dieser Beitrag wurde zuletzt bearbeitet: 24.09.2016, 12:34 von LeibnizCasio.)
Ich verstehe nicht. Das muss doch einfach mit zwei ineinanderlaufenden Schleifen abgehandelt werden.
In c kriege ich das hin aber in VBA einfach nicht....
Ich versuche es einfach nochmal in Worten zu beschreiben.
Der Nutzer gibt folgende Parameter ein:
Lebensdauer: LD Modifikationsintervall: MI Objekte de er nacheinander Nutzen will: ON
Erste for Schleife: Soll angeben bei welchem Objekt wir uns befinden. Nutzung beginnt bei Jahr 1. Objekte eins beginnt bei Zählvariable 0.
Solange wie noch Objekte folgen wird die Schleife hoch gezählt.
Innere Schleife: Prüft wie viele Modifikationsvorgänge wahrgenommen werden müssen bis ein neues Objekt gekauft wird
Wenn der nächste Modifikationsvorang gleich oder außerhalb der Nutzungsdauer liegt , wird diese for Schleife abgebrochen, die erste Schleife hochgezählt und dann diese wieder begonnen.
Die Zahlen sollen dann in der Form ausgeben werden
Erster Kauf ->n-ter Kaufe Modifikationszeitpunkte zu dem jeweiligen Kauf gehörend
Registriert seit: 21.07.2016
Version(en): 2007
Ich glaube ich hab's Hatte gerade auch einen Knoten im Kopf. Trifft das Deine Vorstellungen? Tabelle1 | A | B | C | D | 1 | Anzahl Objekte | Modifikationsintervall | Nutzungsdsauer | | 2 | 4 | 0,5 | 2 | | 3 | | | | | 4 | Objekt 1 | Objekt 2 | Objekt 3 | Objekt 4 | 5 | 0,5 | 2,5 | 4,5 | 6,5 | 6 | 1 | 3 | 5 | 7 | 7 | 1,5 | 3,5 | 5,5 | 7,5 | Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
|