PDA

Vollständige Version anzeigen : Array if Prüfung und Zählen


MSOfficeAnwender
23.08.2017, 09:50
Hallo,

Ich komme an einer Stelle mal wieder nicht weiter. Vielleicht gibt es da ja eine ganz einfache Lösung.

Ich lese in ein Array eine Stückliste ein, in der die Artikelbezeichnungen stehen:


Option Explicit
Sub Automatischer_Uebertrag()

Dim KKStool As Workbook
Dim Stammdaten As Workbook
Dim Antwort As String
Dim Stueckliste(0 To 29) As String
Dim i As Integer

Set KKStool = ActiveWorkbook



For i = 0 To 29 'ließt die Stückliste aus Szenario 1 ein
Stueckliste(i) = Worksheets("Szenario 1").Range("AC7").Offset(i)
Next i


soweit kein Problem

Es gibt auf dem Worksheet "Szenario 1" genau drei Zellbereiche, in denen Artikel aus der Stückliste vorkommen könne und da jeweils nur ein mal.

Ich möchte jetzt in drei For Schleifen jeweils mit einer If Anweisung prüfen, ob der Artikel (sorry die Artikel) in dem Bereich vorkommt.
Vorher soll gezählt werden wie viele Elemente des Arrays in dem jeweiligen Bereich (der drei Bereiche) vorkommen. Mit dieser Zahl habe ich weitere Aktionen vor. Aber Schritt für Schritt.
Wenn ich die Zahl der Artikel pro Bereich habe soll der Code ausgeführt werden. Ich vermute, dass ich eine Schleife in der Schleife benötige. Erstmal zum zählen dann zum ausführen der jeweiligen Variable des Arrays

Ich habe mit dem Durchlauf von Arrays noch nicht die Erfahrung. wie bekomme ich sowas aufgebaut?

EarlFred
23.08.2017, 10:07
Hallo,

schau mal, wie schnell das geht, ganze Bereiche einzulesen:
Option Explicit
Sub Automatischer_Uebertrag()

Dim KKStool As Workbook
Dim Stueckliste As Variant

Set KKStool = ActiveWorkbook

Stueckliste = KKStool.Worksheets("Szenario 1").Range("AC7:AC36").Value

Set KKStool = Nothing
End Sub

Alles weitere verstehe ich nicht. Mal hast Du eine Liste von Artikel (Mehrzahl), dann redest Du von "DER" Artikel (Einzahl). Und was Du willst, bleibt schleierhaft.

Mach bitte eine kleine Mustermappe fertig und beschreibe noch einmal präzise, was der Code tun soll.

Grüße
EarlFred

MSOfficeAnwender
23.08.2017, 10:37
Hallo,
vielen Dank für deine Hilfe. Ich meinte natürlich nur "die Artikel"
Habe jetzt mal ein Muster (siehe Anhang) erstellt.

EarlFred
23.08.2017, 10:45
und die genaue Erläuterung um die ich bat, um zu wissen, was nun berechnet werden soll, hast Du Dir erspart. Ich frage ja nicht nach, um Dich zu ärgern, sondern weil ich sonst nicht helfen kann. Das kann ich mir also auch ersparen.

MSOfficeAnwender
23.08.2017, 10:48
Wie ich sehen kann, hast du die Datei noch nicht aufgerufen.
Die Erläuterungen habe ich in den Code geschrieben.

EarlFred
23.08.2017, 11:59
Wie ich sehen kann, hast du die Datei noch nicht aufgerufen.
Ich frage mich, woran Du das sehen willst. Das ist schlicht unwahr.

Ich bin aber nicht der Osterhase und spiele nicht verstecken mit Deinen Erläuterungen. Wenn Dir das alles zuviel Mühe bereitet, dann lass es.

MSOfficeAnwender
23.08.2017, 12:07
Ohh mann ..

sehen konnte ich es daran, dass zum Zeitpunkt meines letzten Posts der Anhand 0x aufgerufen wurde.

Ich habe in der Musterdatei genau ein Arbeitsblatt, ein Modul und ein Code. Mit verstecken hat das nichts zutun!
Ich hielt es für das Sinnvollste den Code direkt zu kommentieren, da meine Erläuterungen vom ersten Post so unschlüssig waren.

Jetzt würde es mich freuen, wen man wieder zur emotionalen Normalität zurückkommen könnte.

EarlFred
23.08.2017, 12:25
Selber "oh Mann"!

Ist es zuviel verlangt, die Aufgabe einfach mal klar und deutlich zu beschreiben und für alle lesbar zu posten? Wie kommt man überhaupt auf die Idee, das im Code zu verstecken?

EarlFred
23.08.2017, 12:37
das geht auch schleifenfrei
Dim vRet(0 To 2) As Variant
vRet(0) = Evaluate("=SUM(CountIf('[" & Stammdaten.Name & "]Szenario 1'!C38:C47,'[" & Stammdaten.Name & "]Szenario 1'!L3:M32))")
vRet(1) = Evaluate("=SUM(CountIf('[" & Stammdaten.Name & "]Szenario 1'!C52:C61,'[" & Stammdaten.Name & "]Szenario 1'!L3:M32))")
vRet(2) = Evaluate("=SUM(CountIf('[" & Stammdaten.Name & "]Szenario 1'!C66:C75,'[" & Stammdaten.Name & "]Szenario 1'!L3:M32))")

MSOfficeAnwender
23.08.2017, 12:42
Mach bitte eine kleine Mustermappe fertig und beschreibe noch einmal präzise, was der Code tun soll.

Genau das habe ich getan.
Aber lass uns das jetzt doch einfach aus der Welt schaffen.

Hier ist nochmal der Coder kommentiert. Ich hoffe dadurch ist verständlich, was ich machen möchte.
Wenn nicht, dann bitte ich um Präzisierung, was nicht verständlich ist.

Option Explicit
Sub Automatischer_Uebertrag()
Dim KKStool As Workbook
Dim Stammdaten As Workbook
Dim Antwort As String
Dim Stueckliste(0 To 29) As String
Dim i As Integer

Set KKStool = ActiveWorkbook
Application.Dialogs(xlDialogOpen).Show
Set Stammdaten = ActiveWorkbook

For i = 0 To 29 'ließt die Stückliste aus Szenario 1 ein
Stueckliste(i) = Worksheets("Szenario 1").Range("L3").Offset(i)
Next i

For i = LBound(Stueckliste) To UBound(Stueckliste)

' Prüfung ob Werte aus Stückliste (L3:L32) in Bereich 1 (C38:C47) vorkommen
' Wenn ja, dann zählen wieviele

' Dann mit den Werten aus C38:C47 im Nacheinander Code ausführen der noch geschrieben wird.

Next i

For i = LBound(Stueckliste) To UBound(Stueckliste)

' Prüfung ob Werte aus Stückliste (L3:L32) in Bereich 2 (C52:C61) vorkommen
' Wenn ja, dann zählen wieviele

' im Nacheinander Code ausführen der noch geschrieben wird.

Next i

For i = LBound(Stueckliste) To UBound(Stueckliste)

' Prüfung ob Werte aus Stückliste (L3:L32) in Bereich 3 (C66:C75) vorkommen
' Wenn ja, dann zählen wieviele

' im Nacheinander Code ausführen der noch geschrieben wird.
Next i





End Sub

Es geht mir wirklich nur darum, dass erklärt wird wie ich in eine Arrayschleife eine if Anweisung einfüge und wie ich in die Array Schleife eine Zählschleife integrieren kann.

EarlFred
23.08.2017, 12:53
Genau das habe ich getan.
Nun ja... Wie Du meinst.

Lösung liegt bereits vor. Siehe Beitrag #9.

Vielleicht magst Du Dir ja auch noch den (nicht versteckten) Hinweis aus Beitrag #2 anschauen?

drambeldier
23.08.2017, 12:58
Moin,
Es geht mir wirklich nur darum
erlaube, dass ich EarlFred hier beistehe:

Dein Denkansatz könnte falsch, ungeschickt, unsinnig, was auch immer sein, da hülfe dann der erläuternde Kommentar auch nicht weiter. Wer sich die Mühe macht, seine Aufgabe (nicht das aktuelle Problem!) mit verständlichen Sätzen zu beschreiben, findet dabei im besten Fall die Lösung selbst oder hilft andernfalls den Helfern, konstruktiv mitzuarbeiten.

Storax
23.08.2017, 14:11
Das übliche Problemthe users define their problem by
stating it in terms of a solution approach

MSOfficeAnwender
24.08.2017, 09:52
das geht auch schleifenfrei
Dim vRet(0 To 2) As Variant
vRet(0) = Evaluate("=SUM(CountIf('[" & Stammdaten.Name & "]Szenario 1'!C38:C47,'[" & Stammdaten.Name & "]Szenario 1'!L3:M32))")
vRet(1) = Evaluate("=SUM(CountIf('[" & Stammdaten.Name & "]Szenario 1'!C52:C61,'[" & Stammdaten.Name & "]Szenario 1'!L3:M32))")
vRet(2) = Evaluate("=SUM(CountIf('[" & Stammdaten.Name & "]Szenario 1'!C66:C75,'[" & Stammdaten.Name & "]Szenario 1'!L3:M32))")


Das mit dem "schleifenfrei" erleichtert die Sache wirklich. Ich habe dadurch zwar nicht gelernt, wie man if Schleifen mit Arrays verknüpft aber ich habe eine Lösung :-) Danke dafür!