Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Probleme bei der Code Erstellung (Syntax)
#11
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
Antworten Top
#12
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.
Antworten Top
#13
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

Antworten Top
#14
Und ganz dynamisch

Tabelle1

ABCD
1Anzahl ObjekteModifikationsintervallNutzungsdsauer
240,52
3
4Objekt 1Objekt 2Objekt 3Objekt 4
51,52,53,54,5
62345
72,53,54,55,5
83456

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

Antworten Top
#15
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
Antworten Top
#16
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.
Antworten Top
#17
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

ABCDE
1Anzahl ObjekteModifikationsintervallNutzungsdsauer
250,52
3
4Objekt 1Objekt 2Objekt 3Objekt 4Objekt 5
51,52,53,54,55,5
623456
73,54,55,56,5
84567

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
Antworten Top
#18
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.
Antworten Top
#19
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
Antworten Top
#20
Ich glaube ich hab's Huh 

Hatte gerade auch einen Knoten im Kopf.
Trifft das Deine Vorstellungen?

Tabelle1

ABCD
1Anzahl ObjekteModifikationsintervallNutzungsdsauer
240,52
3
4Objekt 1Objekt 2Objekt 3Objekt 4
50,52,54,56,5
61357
71,53,55,57,5

Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste