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.

Erstellung einer Liste über mehrere Tabellenblätter
#1
Hallo Forum, 

bisher war ich immer ein stiller Mitleser und konnte schon viele Tipps aus dem Forum ziehen. Aktuell hänge ich aber an eine Problem, bei welchem ich ohne fremde Hilfe wohl nicht weiter komme. Leider sind meine letzten VBA Anwendungen auch schon wieder einige Jahre her, so dass ich mich gerade wieder sehr schwer tue in die Problematik einzusteigen. Ich hoffe gemeinsam kommen wir trotzdem zu einer schnellen Lösung.

Aufgabe ist eine Liste (Code) zu erstellen, bei der der Anwender aus verschiedenen Tabellenblättern per Drop Down Liste seine Komponenten zusammen sucht und diese dann per Button in die Liste eingetragen werden. Als Beispiel: 
Benutzer wählt Etage, Gewerk, Anlage und Baugruppe usw. per Drop Down aus, gibt dazu noch die Raumnummer ein und per Command Button werden diese Eingaben in die erste freie Zeile der Liste geschrieben. Weiterhin sollen z.B. automatisch die Anlagennummer (von 001 beginnend) in Abhängigkeit der Anlage (Spalte U-W) in der Liste (Spalte X,Y) eingetragen werden. 

Das klingt zwar einfach, aber ich habe gerade richtig große Probleme dies umzusetzen. Ich hänge an mehreren Stellen. Zum Beispiel weiß ich nicht, wie ich beim Eintragen in die Liste die nächste Zeile auswähle. Ebenso habe ich noch keine Ahnung, wie ich die Zählung Eintragung der Anlagennummer vornehme, da dies immer Abhängig von mehreren Zellen ist. 


Im Übrigen wäre es schön, auch wenn es sicher einfacher wäre wenn man Zellen zusammenfügt, wenn man die Struktur der Tabelle (jedes Zeichen eine Zelle) beibehalten könnte, wenn das überhaupt möglich ist. Einfacher wäre sicher, wenn man die einzelnen Vorgaben jeweils nur in eine Zelle schreibt. 

Vielen Dank schon einmal für eure Mithilfe.


Angehängte Dateien
.xlsm   Cigel.xlsm (Größe: 42,69 KB / Downloads: 15)
Antworten Top
#2
Moin,

einige Anmerkungen seien mir erlaubt:
  1. Bei "hoffentlich schnelle Lösungen ..." schalten einige Helfer (wie auch ich) auf Abwehr. Für schnelle Lösungen gibt es nur einen sinnvollen Weg: Du willst schnell Geld damit verdienen, dann investiere schnelle in einen Dienstleister, der dann auch die volle Verantwortung für die Lösung und die Geschwindigkeit übernimmt. - Hier ist alles gratis, dafür aber Schritt für Schritt.
  2. Das ist eigentlich eine Aufgabe für eine Datenbank, beispielsweise Access.
  3. Die Datenstruktur ist absolut ungenügend.
    a) In Auflistungen gehören keine Leerzeilen, die unterbrechen den Lesefluss jeglicher Routine.
    b) Zwischenüberschriften (beispielsweise Anlagenbezeichnungen) sollten in Spalte_A stehen und vor jeder Anlage wiederholt werden.
  4. Foren sind ein Medium  für die Hilfe zur Selbsthilfe. Aus meiner Sicht ist das ein ziemlich komplexes Teil. Frage: Was hast du bislang daran erarbeitet bzw. was kannst du nach "Anschubsen" durch uns Helfer selbständig weiter (weitgehend) eigenständig an dem Projekt machen? Oder erwartest du ein kostenloses "Fertighaus mit allen Installationen"?
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Antworten Top
#3
Hallo,

dass sollte nicht falsch verstandenen werden mit dem schnellen Lösung finden. Zum einen möchte ich die Lösung nicht vorgelegt bekommen sondern gern selbst miterarbeiten und so verstehen. Mit schnell wollte ich lediglich ausdrücken, dass ich nicht viel Zeit der anderen beanspruchen möchte. Es tut mir leid, wenn das anders rüber kam. Ich würde es auch lieber mit Access machen, aber ist bei uns nicht vorhanden. Eine Anschaffung und verteilen würde wahrscheinlich länger dauern, als die Lösung mit Excel zu finden. 
Zur Auflistung: Du meinst die Leerzeichen innerhalb der einzelnen Arbeitsblätter? Diese sind aus meiner Sicht notwendig da es sich dabei um Abgrenzung der einzelnen Anlagen/Baugruppen handelt. Übersichtlicher wäre es sicher, wenn man noch ein Zwischenschritt einfügt und für jede Anlage, jede Baugruppe ein eigenes Blatt anlegt, aber wenn du dann etwas bestimmtest suchst, kannst du schnell den Überblick verlieren. Dein Hinweiß mit den Zwischenüberschriften verstehe ich nicht. Du meinst also Anlagenbezeichnung Sanitärtechnik, Anlagenbezeichnung Feuerlöschanlagen usw. Wenn es so gemeint ist, dann verstehe ich nicht warum das so sein sollte? Der Anwender trägt am Ende per Dropdownauswahl die Anlage in Zelle D4 ein. Er weiß dass Gasanlagen keine Anlage sondern ein Oberbegriff ist. 
Ich habe bisher noch nicht so viel selbst erarbeiten können wie ich mir wünsche. Die Drop Down, der Button und die Eintragungen in der Liste waren fertig als ich gemerkt habe, dass ich mich gerade in ein Problem verrenne und irgendwo Hilfe brauche, wenn ich falsch abgebogen bin. Eigentlich sind es zwei Probleme die ich nicht Lösen, bzw auch noch nicht weiß wie ich sie angehen kann. 

Problem 1: Beim Drücken des Button soll die Auswahl in den die erste freie Zeile eingetragen werden. Bedeutet ich muss heraus bekommen welche Zeile die letzte beschriebene in der Tabelle ist und diese um eins erhöhen. Ich habe gestern schon mitbekommen, dass ich mit meinem Range("X").Select Befehl nicht weit komme und probiere gerade per VBA die letzte beschriebene Zeile einer Spalte zu ermitteln will diese um 1 erhöhen um diese dann zu beschreiben. 

Problem 2: Bei dem bin ich mir noch nicht einmal sicher ob man das lösen kann ist das automatische Aufwärts zählen der Anlagen- und Baugruppennummer. Selbst wenn es funktionieren sollte die Anlagennummer 0 1 - 9 9 in Abhängigkeit der Spalten U,V,W zu vergeben, so muss die Baugruppennummer nicht nur die Abhängigkeit der Spalten Z, AA, AB, haben, sondern auch eine Abhängigkeit von der Anlagennummer haben. Als Beispiel: Es gibt im ganzen Gebäude nur eine RLT(Anlage)01(Anlagennummer), eine RLT(Anlage)02(Anlagennummer) aber natürlich ist es möglich dass es eine RLT(Anlage)01(Anlagennummer)BSK(Baugruppe)001(Baugruppennummer) und eine RLT(Anlage)02(Anlagennummer)BSK(Baugruppe)001(Baugruppennummer) gibt.
Antworten Top
#4
Hi,

(13.05.2016, 05:06)iDiddi schrieb: Dein Hinweiß mit den Zwischenüberschriften verstehe ich nicht. Du meinst also Anlagenbezeichnung Sanitärtechnik, Anlagenbezeichnung Feuerlöschanlagen usw. Wenn es so gemeint ist, dann verstehe ich nicht warum das so sein sollte?

Leerzeilen und verbundene Zellen in Tabellen sind für automatische Bearbeitung per se schlecht, diese müssen raus. Optische Zentrierung horizontal über mehrere Spalten ist auch durch normale Formatierung möglich (Zellen formatieren - Ausrichtung - horizontal - über Auswahl zentrieren)
Jede Spalte benötigt eine Überschrift.

Du hast in jedem Blatt eine Überschrift und dann eine Leerzeile, dann kommen Daten.
Oder es sind lauter Anlagenbezeichnungen und Leerzeilen zwischen den Blöcken.
[edit]Außerdem solltest Du Dir noch eine immer gleiche Spalten-Sortierung überlegen: zuerst Kennziffer-Spalte, dann Bezeichnung oder anders rum.

Warum führst Du nicht eine zusätzliche Spalte ein und schreibst darin die Anlagenbezeichnung. Bei einem richtigen Datenbankprogramm wäre das ja auch so. Dann kann auch einfach nach den Bezeichnungen gefiltert, sortiert und ausgewertet werden.


Anlagenbezeichnung
AB
20SanitärtechnikTrinkwasser
21SanitärtechnikTrinkwarmwasser
22SanitärtechnikVE-Wasser
23FeuerlöschanlagenCO² -Löschanlage, Gaslöschanlagen (Kompaktanlage ohne Bezeichnung der Baugruppen)
24FeuerlöschanlagenFeuerlöschanlage (Kompaktanlage ohne Bezeichnung der Baugruppen)
25FeuerlöschanlagenFeuerlöschgeräte
26FeuerlöschanlagenSprinkleranlage (Kompaktanlage ohne Bezeichnung der Baugruppen)
27GasanlagenHeizgasanlage - Gasleitung für Brenngasversorgung
28GasanlagenGaswarnanlagen allgemein, Warnlagen ( `CO`, `CO²`, `NOX` ... usw.) (Kompaktanlage ohne Bezeichnung der Baugruppen)
29GasanlagenDruckluftversorgung (Kompaktanlage ohne Bezeichnung der Baugruppen)
30GasanlagenZentrale Gasversorgung
Excel-Inn.de
Hajo-Excel.de
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 19.08 einschl. 64 Bit



Ich habe aus den ganzen Listen intelligente Tabellen gemacht, dann sind sie besser handelbar.

.xlsm   Cigel - Rabe.xlsm (Größe: 47,95 KB / Downloads: 5)

Zu Deiner Frage 1:
     loErste = Worksheets("CIS Code").Cells(Rows.Count, 2).End(xlUp).Row + 1                               'erste freie Zelle in Spalte B (2)
Antworten Top
#5
heje excelfreunde.

muss das gesagte von rabe und GMG-CC unterstreichen.

.
.
21/sanitärtechnik/Trinkwasser
21/sanitärtechnik/Trinkwarmwasser
21/sanitärtechnik/VE-wasser
.
.
.
23/Feuerlöschanlagen/CO² -Löschanlage, Gaslöschanlagen (Kompaktanlage ohne Bezeichnung der Baugruppen)
.

24/Feuerlöschanlage (Kompaktanlage ohne Bezeichnung der Baugruppen)

.
25/Feuerlöschanlagen/CO² -Löschanlage, Gaslöschanlagen (Kompaktanlage ohne Bezeichnung der Baugruppen)

dagegen ein vorschlag meinerseit:

hier sollte ein eindeutige kennung (ID) als einleitendes element vorrangestellt werden. bsp.: 021001/Bezeichner01/Bezeichner02/...
021 erlaubt ein aufteilung in bis zu 999 hauptgruppen und mit 001 kann jede hauptgruppe bis zu wieder 999 untergruppen aufgedrösselt werde. also genügend spielraum. dh. der gesamte "artikelstamm" ist sehr flexibel wenn änderungen anstehen, dagegen muss nicht gesamte die formelei verändert werden, das wäre fatal..
diese prinzip (kommt excel sehr entgegen) kann auf vieles angewendet werden, wie personal, maschienenpark, leistungen, etc....

hier sollte vielleicht zuerst einmal darüber nachgedacht werden.
Vielen Dank
--Janosch
                                                     
Excel  2019 (64bit)  Win 10 Pro (64bit)                              
Antworten Top
#6
Hallöchen,

eine schnelle Lösung wird das sicher nicht. Das können wir auch deshalb sagen, weil wir hier tiefer im Excel stecken als mancher Fragesteller.  Aber man kann es sich ja erst mal wünschen, da sehe ich nichts verwerfliches dran :-)

Für die Auswahlfelder würde ich DropDowns nehmen. Da stören Leerzeilen in den Datenbereichen weniger, es kann dann höchstens passieren, dass der Anwender eine leere Zeile auswählt, aber das sieht er ja :-) Das hast Du ja auch schon so gelöst.
Wenn Du mit den Datenblättern noch irgendwie anders arbeiten willst, dann wäre genau zu überlegen, wie man mit den Leerzeilen umgeht. Ralf hat dazu ja schon eine gute Lösung gepostet.
Lediglich als Ausdruck sieht es auf jeden Fall besser aus ;-) und nicht bei jeder Tabelle würden Seitenüberschriften reichen :-(. Aber da könnte man sich ja auch eine Ausgabe programmieren.

Damit die DropDowns gut sichtbar sind, hast Du Zellen verbunden. Würde ich in dem Fall auch so machen. Ansonsten müsstest Du die Spalte D breiter ziehen und das sieht dann unten im "Code"-Bereich bescheiden aus. Ich hab jetzt nicht geschaut, ob sich die Verbundenen Zellen in Deinem Blatt irgendwie negativ auswirken können. Aber wie die anderen schon schrieben, besser ist meistens, ohne auszukommen. Wenn man sich einmal dran gewöhnt, nimmt man die auch schnell mal an unpassender Stelle. Oder sie stören später ... Alternativ könntest Du eine ComboBox nehmen.

Du trägst in Zeile 19 Formeln ein, die sich auf den Eingabebereich in D2:D5 beziehen. Wenn Du den Eingabebereich änderst, müsstest Du allerdings die Formeln noch durch die Werte ersetzen.

Die Eintragung der Formeln könntest Du vereinfachen, z.B.
Range("M19").FormulaR1C1 = "=VLOOKUP(R1C4,Räume!R3C1:R8C4,2,FALSE)"
Select ist da nicht nötig.

Die letzte Zeile bekommst Du z.B. so anhand des letzten Eintrags in Spalte M, siehe auch Ralf's Vorschlag:
loLRow = Cells(Rows.Count, 13).end(xlUp).Row
und der Eintrag wäre dann so:
Range("M" & loLRow+1).FormulaR1C1 = "=VLOOKUP(R1C4,Räume!R3C1:R8C4,2,FALSE)"

Soweit erst mal dazu, jetzt schaue ich nach dem Essen und dann nach dem Rest :-)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#7
Danke erst einmal für eure Antworten. Ich werde diese am Wochenende mal durchschauen und sehen, wie weit ich komme. Heute wird nicht mehr viel, da ich erst einmal meinen Geburtstag feiern muss! 
@Radagast, dein Vorschlag klingt zwar sehr gut, allerdings ist das Format der Zellen nicht verhandelbar oder ich verstehe es einfach falsch. Die Anlagenbezeichnung besteht immer aus 3 Zeichen, dann kommen zwei Zeichen für die Anlagennummer, drei für Baugruppe und wieder drei für die Baugruppennummer. Eine Zusätzliche ID ist nicht möglich. Der "Code" wird genau so (entweder "Wartung" Zellen 13-31 oder "Fehlersuche" Zellen 13-44) von einem weiteren Programm übernommen. 

Ich wünsche schöne Pfingsten
Antworten Top
#8
Hallöchen,

wenn das übernehmende Programm so starr ist, dann ist doch auch noch die Frage, ob eine beliebige Zahl als Anlagenummer genommen werden kann oder wie ich A L T F U P addieren soll ...

Hier mal eine Zählung für eine einspaltige Ausführung der Anlagennummer. Die Formel vergleicht erst mal nur die Spalten U und V, ist aber nach dem Strickmuster auf die fehlenden 4 Spalten erweiterbar. Die erste Nummer wird per Hand eingetragen, die Formel ab X20. Wenn beim Übertragen der Werte der anderen Spalten die Formeln durch Werte ersetzt werden, muss man schauen, ob man die Formel dann ebenfalls ersetzt.

Arbeitsblatt mit dem Namen 'CIS Code'
 UVWXY
18AnlageAnlagen-
nummer
19ALT1 
20AV 2 
21LL 3 
22AL 1 

ZelleFormel
U19=SVERWEIS($D$4;Anlagenbezeichnung!$A$3:$D$116;2;FALSCH)
V19=SVERWEIS($D$4;Anlagenbezeichnung!$A$3:$D$116;3;FALSCH)
W19=SVERWEIS($D$4;Anlagenbezeichnung!$A$3:$D$116;4;FALSCH)
X20=WENNFEHLER(VERWEIS(2;1/($U$19:U19&$V$19:V19=U20&V20);$X$19:X19);MAX($X$19:X19)+1)
X21=WENNFEHLER(VERWEIS(2;1/($U$19:U20&$V$19:V20=U21&V21);$X$19:X20);MAX($X$19:X20)+1)
X22=WENNFEHLER(VERWEIS(2;1/($U$19:U21&$V$19:V21=U22&V22);$X$19:X21);MAX($X$19:X21)+1)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#9
(13.05.2016, 11:02)iDiddi schrieb: Der "Code" wird genau so (entweder "Wartung" Zellen 13-31 oder "Fehlersuche" Zellen 13-44) von einem weiteren Programm übernommen.

Moin,
dann erst einmal meinen Glückwunsch zum Geburtstag.
Und dann zum obigen Zitat: Was genau wird denn vom anderen Programm übernommen? - Wenn das einigermaßen intelligent programmiert worden ist, dann wird da nur eine Zeichenkette (alphanumerisch) übergeben, wo jede dieser Spaltenpositionen drin ist. Nicht mehr und nicht weniger.

Und wenn das so ist, dann würde ich da anders ran gehen. Ich hatte die Datei mal auf einem separierten Rechner geöffnet und ohne VBA-Beilage gespeichert, darum weiß ich nicht, was schon an VBA existiert. Meine Idee für den Fall: F+ür jeden Vorgang einen "Lieferschein" in Excel. Und zwar ist das dann eine UserForm mit diversen Registern drin, angefangen bei (vermutlich) Räume bis BMK. In jedem Register der UFo kann dann per Häkchen, DropDown oder wie auch immer festgelegt werden, welches Teil genutzt wird. Alles andere ist aus meiner Sicht viel zu intransparent.

Und ach ja, in den einzelnen Tabellenblättern sollten Index-Spalten durchaus möglich sein, entscheidend ist doch wohl, dass der "Code" hinterher stimmt. Excel "denkt" nun einmal nicht mit den Augen sondern mit mathematischer Logik.
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Antworten Top
#10
Hi,

alles Gute zum Geburtstag!

(13.05.2016, 11:02)iDiddi schrieb: allerdings ist das Format der Zellen nicht verhandelbar oder ich verstehe es einfach falsch. Die Anlagenbezeichnung besteht immer aus 3 Zeichen, dann kommen zwei Zeichen für die Anlagennummer, drei für Baugruppe und wieder drei für die Baugruppennummer. Eine Zusätzliche ID ist nicht möglich. Der "Code" wird genau so (entweder "Wartung" Zellen 13-31 oder "Fehlersuche" Zellen 13-44) von einem weiteren Programm übernommen. 

Die von Janosch vorgeschlagenen Bezeichnungen und IDs sind ja nur Zusatzspalten in den Datenbank-Blättern, das verändert nicht die Darstellung in der Ausgabetabelle.
Diese IDs erleichtern jedoch durch eine eineindeutige Bezeichnung und Verknüpfung die Zuordnung der jeweiligen Anlagen, Baugruppen, Daten, ...

Ich habe Dein Makro etwas verkürzt:
Code:
Private Sub CommandButton1_Click()
   Dim loErste As Long
  
   loErste = Worksheets("CIS Code").Cells(Rows.Count, 14).End(xlUp).Row + 1                               'erste freie Zelle in Spalte N (14)
  
   Range("M" & loErste).FormulaLocal = "=SVERWEIS($D$1;Räume!$A$3:$D$8;2;FALSCH)"
   Range("N" & loErste).FormulaLocal = "=SVERWEIS($D$1;Räume!$A$3:$D$8;3;FALSCH)"
   Range("O" & loErste).FormulaLocal = "=SVERWEIS($D$1;Räume!$A$3:$D$8;4;FALSCH)"
   Range("P" & loErste).FormulaR1C1 = "=IF(R2C4="""",0,R2C4)"
   Range("Q" & loErste).FormulaR1C1 = "=IF(R2C5="""",0,R2C5)"
   Range("R" & loErste).FormulaR1C1 = "=IF(R2C6="""",0,R2C6)"
   Range("S" & loErste).FormulaR1C1 = "=IF(R2C7="""",0,R2C7)"
   '    Range("S" & loerste).FormulaLocal = "=WENN($G$2="";0;$G$2)"
   Range("T" & loErste).FormulaLocal = "=SVERWEIS($D$3;Gewerke!$A$3:$B$18;2;FALSCH)"
   Range("U" & loErste).FormulaLocal = "=SVERWEIS($D$4;Anlagenbezeichnung!$B$3:$E$116;2;FALSCH)"
   Range("V" & loErste).FormulaLocal = "=SVERWEIS($D$4;Anlagenbezeichnung!$B$3:$E$116;3;FALSCH)"
   Range("W" & loErste).FormulaLocal = "=SVERWEIS($D$4;Anlagenbezeichnung!$B$3:$E$116;4;FALSCH)"
   Range("Z" & loErste).FormulaLocal = "=SVERWEIS($D$5;Baugruppenbezeichnung!$B$3:$E$198;2;FALSCH)"
   Range("AA" & loErste).FormulaLocal = "=SVERWEIS($D$5;Baugruppenbezeichnung!$B$3:$E$198;3;FALSCH)"
   Range("AB" & loErste).FormulaLocal = "=SVERWEIS($D$5;Baugruppenbezeichnung!$B$3:$E$198;4;FALSCH)"
End Sub

Die WENN-Formel habe ich auf die Schnelle nicht hinbekommen, da stimmt vermutlich die Anzahl der " nicht.
Antworten Top


Gehe zu:


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