Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

verschachtelte If-Schleifen





Frage

Hallo Liebe Helfer so habe vor kurzen mit dem VBA´lern angefangen. habe jetzt eine verschachtelte if-Bedingung (welche so auch funktioniert) und wollte mal nachfragen ob es eine "saubere" bzw einfachere Lösung dazu geben würde. Also ich bekomme in mein activeSheet Daten aus einer Datenbank. In Spalte A kommt der Name des Produktes: In Spalte B, C und D jeweils eine Eigenschaft des Produktes als Zahl ausgegeben. In Spalte E die Anzahl der Produkte im Lager. Schaut so wie folgt aus: Spalte A Spalte B Spalte C Spalte D Spalte E test 1 1 0 22 1 1 1 43 2 1 4 14 3 1 1 4 3 1 2 35 3 1 20 37 3 1 8 5 4 1 20 19 4 1 5 521 4 1 8 13 Sorry für die Anzeige! Mein Produkt ist jetzt in diesem Fall "Test" Relevant nebem dem Produktnamen (SpalteA) sind Spalten B,D,E. So - alle Lagerbestände(SpalteE) die einen Wert von 4 in Spalte B haben und zusätzlich einen Wert von 5 oder 20 in Spalte D sollen Ausgegeben werden. In meinem Makro erstmal als debug.print. Mein makro schaut dann wie folgt aus: Public Sub Uebertrag_der_Daten() ´Dimensionieren der Variablen Dim dtm As Date Dim max1 As Integer Dim maxp09b As Integer Dim i As Integer Dim e As Integer ´Zuweisen der Variablen dtm = Date max1 = 60 maxtest = 10 i = 1 e = 1 ´Bei A10 fängt die Ausgabe der Daten an Range("A10").Select For i = 1 To max1 If ActiveCell.Value = "test" _ Then ActiveCell.Offset(1, 1).Activate For e = 1 To maxtest If ActiveCell.Value = 4 _ Then ActiveCell.Offset(0, 2).Activate If ActiveCell.Value = 20 _ Then ActiveCell.Offset(0, 1).Activate Debug.Print (ActiveCell) ActiveCell.Offset(0, -3).Activate ElseIf ActiveCell.Value = 5 _ Then ActiveCell.Offset(0, 1).Activate Debug.Print (ActiveCell) ActiveCell.Offset(0, -3).Activate Else ActiveCell.Offset(1, -2).Activate If ActiveCell.Value = Empty _ Then GoTo marker1 Else ActiveCell.Offset(-1, 0).Activate End If End If End If ActiveCell.Offset(1, 0).Activate Next e Else ActiveCell.Offset(1, 0).Activate End If Next i marker1: End Sub Ich hoffe ihr habt verstanden was ich damit bewirken will. Jetzt nochmal meine Fragen. 1. Kann man das o.g. Makro vereinfachen?? 2. optional: wie würde das makro aussehen wenn man nicht nur ein Produkt hätte. Angenommen man hätte 3 verschiedene Produkte (z.B. Test1, Test2, Test3). Jedes dieser Produkte hat wieder seine eigenen Eigenschaften und es werden auch unterschiedliche benötigt. Bei test2 z.b. folgendes test2 0 1 1 154 4 1 1 130 5 1 1 449 5 1 8 15 hier brauche ich z.b. 5/1 und 5/8. wäre es bei mehreren Produkten sinnvoll eine übergeordnete Schleife einzubinden, welche die verschiedenen produkte durchgeht? Ich glaube man versteht meinen Text nicht mehr 100%. Deswegen breche ich hier erstmal ab und warte auf Reaktionen und dann kann ich versuchen es weiter zu erklären. THX im voraus gez Hardwarehacker

Antwort 1 von Event

Hallo

Wenn ich´s richtig verstanden hab´ dann sollte das:

Option Explicit

Public Sub Uebertrag_der_Daten()

´Dimensionieren der Variablen
Dim dtm As Date
Dim max1 As Integer
Dim maxp09b As Integer
Dim i As Integer
Dim e As Integer
Dim maxtest%
´Zuweisen der Variablen
dtm = Date
max1 = 60
maxtest = 10
´Bei A10 fängt die Ausgabe der Daten an

For i = 1 To max1
Range("A" & CStr(i)).Select
If ActiveCell.Value = "test" Then
For e = i To i + maxtest
If ActiveCell.Offset(e, 1).Value = 4 And _
ActiveCell.Offset(e, 3).Value = 5 Or _
ActiveCell.Offset(e, 3) = 20 Then
Debug.Print ActiveCell.Offset(e, 4).Value
End If
Next
End If
Next
End Sub

funktionieren.

Weihnachtlichen Gruß

Antwort 2 von Hardwarehacker

Herzlichen Dank erstmal

leider funktioniert es nicht.
Wenn ich mir den QC ansehe scheint es schon das zu sein, was ich benötige bzw du hast es richtig verstanden.

Zu meiner Formatierung der Liste:
Das Produkt steht z.B. in Zelle A10
Die erste Eigenschaft steht in Zelle B11.

Da der 2.Wert beim activecell.offset den Wert der Spalten angibt hab ich meine liste kurzerhand geändert. Hab dann das Produkt in die gleiche Zeile wie die Eigenschaften. Als das nichts nüzte hab ich alle Möglichkeiten ausprobiert die mir einfielen.
Entweder hatte ich einen Denkfehler oder es passt etwas anderes nicht.

Da ich wie gesagt erst kurz das VBAlern angefangen hab, weiß ich nicht woran es sonst noch liegen könnte. Wäre dir also sehr verbunden, wenn du dir dien makro nochmal anschaust ob vlt ein Fehler enthalten ist oder vlt weißt du ja schon was ich falsch mache.

Danke
gez
Hardwarehacker

Antwort 3 von Hardwarehacker

Hi Event

hab jetzt ein wenig rumprobiert und bin auf die Lösung gestoßen.

Nach der Zeile mit:
For e = i To i + maxtest

hab ich folgendes eingefügt
Range(A1").Select"
Somit passen die Zellsprünge (activecell.offset).



Also herzlichen Dank nochmal. Es klappt jetzt schon wie es wollte. Hab jetzt wieder ein paar andere Anregungen. Werde ich aber in einem neuen Thread aufmachen.

PS: Wenn noch andere Vorschläge sind würde ich mich sehr freuen.


gez
Hardwarehacker

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: