Prozess abbilden (komplex)
#1
Hallo zusammen,

ich habe hier eine kleine Herausforderung.

Es gibt eine Liste mit Maschinen in unterschiedlichen Produktionsstufen. Der Prozess läuft von "Angelegt" über "In Bearbeitung" zu "Abgeschlossen". 

In einer Übersicht sollen alle Maschinen die sich im Prozess befinden abgebildet werde. 
Wöchentlich werden die Quelldaten für Angelegt, In Bearbeitung, Abgeschlossen aktualisiert. 

Aus der Aktualisierung können folgende Änderungen resultieren:
- neue Maschine kommt hinzu
- Maschine ändert durch weitere Bearbeitung ihren Wert
- Maschine rutscht in den nächsten Prozessschritt

In der Übersichtsliste muss dementsprechend nach jeder Aktualisierung (automatisch) folgendes passieren:
- neue Maschinen müssen in der Tabelle unten angehängt werden 
- Wert aller Maschinen muss überprüft und ggfl. angepasst werden
- Status (Prozessschritt) muss ggfl. angepasst werden. 

Wichtig ist auch, dass Maschinen nicht doppelt in der Gesamtliste stehen. 
Steht eine Maschine gleichzeitig in "Angelegt" und in "In Bearbeitung" so darf sie nur einmal (aus in Bearbeitung) in der Gesamtliste auftauchen.



Ich habe euch mal eine Beispieldatei gebastelt. 
In der Übersicht seht ihr einmal eine bestehende Liste und einmal als Beispiel, wie die Liste nach der Aktualisierung aussehen muss.  
In den Quelldaten (Angelegt, In Bearbeitung, Abgeschlossen) sind die Werte, die bei der Aktualisierung hinzu kommen farblich markiert. 


.xlsx   Beispiel.xlsx (Größe: 18 KB / Downloads: 12)


Ich würde mich freuen, wenn mir jemand einen Tipp geben könnte wie man das am sinnvollsten / professionellsten umsetzten könnte. 
Schwierigkeiten habe ich aktuell v.a. damit, dass keine Datensätze doppelt erscheinen und damit, dass man neue Werte in der Gesamttabelle automatisch unten anfügt. 

Als Primärschlüssel dient die Seriennummer, die eindeutig ist. 
Die Gesamtliste soll als Tabelle formatiert sein, da man filtern können muss.
Top
#2
Hallo Max,

seit ich deine Excelprojekte kenne, fällt mir immer wieder auf, dass du einen gewissen Hang dazu hast, einfache Dinge kompliziert darzustellen. 

In deinem aktuellen Projekt würde diese Liste:
Zusammenfassung

GHIJ
2BezeichnungSeriennummerWertStatus
3Maschine 1B111500In Bearbeitung
4Maschine 5A6820Angelegt
5Maschine 18C472320In Bearbeitung
6Maschine 3U9840Angelegt
7Maschine 6B354275Abgeschlossen
8Maschine 2A7250Angelegt
9Maschine 10U1450Angelegt
10Maschine 7U3560Angelegt
11Maschine 8C1020Angelegt
12Maschine 20B547500In Bearbeitung
13Maschine 26C549750In Bearbeitung
14Maschine 23U444650In Bearbeitung
15Maschine 19A346850Abgeschlossen
16Maschine 33B102220In Bearbeitung
17Maschine 40A542500Abgeschlossen
18Maschine 41U223555Abgeschlossen
19Maschine 52B621211Abgeschlossen
20Maschine 43B496236Abgeschlossen
21Maschine 47C111854Abgeschlossen
22Maschine 12A212521Angelegt
23Maschine 15A314479Angelegt
24Maschine 17C998362Angelegt
25Maschine 98B732597In Bearbeitung
26Maschine 88U333318Abgeschlossen

Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8

doch völlig reichen.  Über den Autofilter kannst du die gewünschten Teildarstellungen problemlos vornehmen. In der Spalte Status kannst du per Datenüberprüfung festlegen, was da eingetragen werden darf. Der langen Rede kurzer Sinn: drei deiner vier Tabellenblätter sind überflüssig.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Top
#3
PHP-Code:
Sub M_snb()
   With CreateObject("scripting.dictionary")
      For Each it In Sheets
        
If Left(it.Name2) <> "Zu" Then
           sn 
it.Cells(1).CurrentRegion.Resize(, 4)
           For 2 To UBound(sn)
              sn(j4) = it.Name
              
.Item(sn(j2)) = Application.Index(snj)
           Next
        End 
If
     Next
     Sheet1
.Cells(301).Resize(.Count4) = Application.Index(.items00)
   End With
End Sub 
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • StrammerMax
Top
#4
@Klaus Dieter - und ich habe immer wieder festgestellt, dass du die Vorgaben nicht verstehst / verstehen willst. 

Meine Beispieldateien sind natürlich extrem vereinfacht um die Problemstellung aufzuzeigen. 
Die 3 Quellblätter kommen aus IT-Systemen und werden wöchentlich aktualisiert. In jeder der Quellen stehen mehrere hundert Positionen, die sich bei jeder Aktualisierung ändern können. 

Klar kann ich bei den 10 Beispielmaschinen auch manuell die Änderungen vornehmen - aber ich würde mir kaum die Mühe machen das zu automatisieren wenn es so einfach wäre. 

Die Quelldaten müssen einfach ausgetauscht/aktualisiert werden können - ich kann sie also nicht von Anfang an alle in eine Tabelle packen.

(29.11.2019, 12:30)snb schrieb:
PHP-Code:
Sub M_snb()
   With CreateObject("scripting.dictionary")
      For Each it In Sheets
        
If Left(it.Name2) <> "Zu" Then
           sn 
it.Cells(1).CurrentRegion.Resize(, 4)
           For 2 To UBound(sn)
              sn(j4) = it.Name
              
.Item(sn(j2)) = Application.Index(snj)
           Next
        End 
If
     Next
     Sheet1
.Cells(301).Resize(.Count4) = Application.Index(.items00)
   End With
End Sub 

Hallo snb - vielen Dank für deine Hilfe. 
Da ich bekanntlich (noch) kein VBA Profi bin will der Code leider nicht so wie ich :D 
Wenn ich ihn in die Arbeitsmappe kopiere und laufen lasse bekomme ich die Meldung "Objekt erforderlich". 

Wo/wie muss ich das Objekt definieren?
Top
#5
Der Fehler tritt übrigens an folgender Stelle auf:

Code:
Sheet1.Cells(30, 1).Resize(.Count, 4) = Application.Index(.items, 0, 0)

Die machen etwas ähnliches:
http://www.office-loesung.de/ftopic223175_0_0_asc.php


Habe den Code aus dem Link jetzt doch so weit umgebastelt, dass er zumindest so weit funktioniert, dass alle Maschinen in die Liste aufgenommen werden und die Seriennummer passend angezeigt wird. 

Die Werte, der Status und die Überschrift der Tabelle sind dadurch aber komplett zerschossen. 


.xlsm   Beispiel.xlsm (Größe: 27,48 KB / Downloads: 1)

Könnte bitte mal Jemand einen Blick darauf werfen?
Top
#6
ändere 'Sheet1' in 'Tabelle1'
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top
#7
Super, vielen Dank @snb

Auf den ersten Blick scheint es genau so zu funktionieren wie ich möchte. 

Gibt es auch noch die Möglichkkeit die Ausgabe automatisch als Tabelle darzustellen? 
Aktuell ist es nur eine Liste.

Eine Kleinigkeit ist mir noch aufgefallen:
Wenn man Maschinen in den Quelldaten löscht und den Code dann nochmal ausführt kommt der Algorithmus teilweise durcheinander und zeigt Datensätze doppelt oder löscht sie nicht. 

Gibt es dafür noch eine Lösung?

EDIT: Habe das Problem gefunden. Der Algorithmus arbeitet richtig - man muss die erzeugten Daten nur vorher löschen, damit er sie (korrekt) neu erzeugen kann.
Top
#8
Zitat:Gibt es auch noch die Möglichkkeit die Ausgabe automatisch als Tabelle darzustellen?
Verwende den Makrorecorder, dann siehst du wie das geht in VBA.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • StrammerMax
Top
#9
In meiner schönen Traumwelt funktioniert jetzt alles. 

Beim Übertrag auf die Realität komme ich allerdings nicht weiter. 

Die Quelldaten kommen alle aus unterschiedlichen Quellen und sehen dementsprechend unterschiedlich aus. 
Mal stehen noch andere Werte zwischen den gesuchten, mal werden Autofilter genutzt, mal ist es schon als Tabelle formatiert usw. 

Wie bekomme ich die Quelldaten automatisiert so zusammen, dass ich den Algorithmus anwenden kann?
Ich habe mir schon überlegt erstmal jeweils eine Pivottabelle pro Quelle anzuilegen und mir nur die gesuchten Werte anzeigen zu lassen. 
Aber auf die Pivottabelle kann ich mit dem Algoritmus wieder nicht richtig zugreifen. 

Anbei mal ein kleines Beispiel:

.xlsm   Beispiel.xlsm (Größe: 26,08 KB / Downloads: 4)
Top
#10
In die hochgeladene Datei.


PHP-Code:
Sub M_snb()
   With CreateObject("scripting.dictionary")
      For Each it In Sheets
        
If Left(it.Name2) <> "Zu" Then
           it
.Cells.Replace "#serialnumber""seriennummer"
           sn it.UsedRange
           
For jj 1 To UBound(sn2)
                If LCase(sn(1jj)) = "bezeichnung" Then y1 jj
                
If LCase(sn(1jj)) = "seriennummer" Then y2 jj
                
If LCase(sn(1jj)) = "wert" Then y3 jj
           Next
           
For 2 To UBound(sn)
              .Item(sn(jy2)) = Array(sn(jy1), sn(jy2), sn(jy3), it.Name)
           Next
        End 
If
     Next
     Tabelle1
.Cells(301).Resize(.Count4) = Application.Index(.items00)
   End With
End Sub 



Ich fürchte jedoch dass die Arbeitsblätter mehr enthalten als du gezeigt hast.
Repräsentativ sollen die hochgeladen Dateien sein.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • StrammerMax
Top


Gehe zu:


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