Autor
|
Thema: Tabellen Anzahl Zeilen übernehmen (4919 mal gelesen)
|
Ingo Struck Mitglied Holztechniker
Beiträge: 459 Registriert: 08.01.2010 Intel Core i7-3770 4 GB RAM AMD FirePro V3900 (FireGL V) Windows 7 Pro SP1 AutoCAD 2009 - deutsch MS-Office Standard 2010
|
erstellt am: 22. Jan. 2013 16:37 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, in einer "Mappenname.xlsm" habe ich auf dem Tabellenblatt "Register1" eine excel-Tabelle1, welche so aussieht: Auftrag1 Breite1 Höhe1 Gewicht1 Auftrag2 Breite2 Höhe2 Gewicht2 Auftrag3 Breite3 Höhe3 Gewicht3 Diese Tabelle ist dynamisch, so dass sich beim anlegen weiterer Aufträge (Auftrag4, Auftrag5, ...) die Anzahl ihrer Zeilen automatisch erhöht. Auf dem Tabellenblatt "Register2" befindet sich eine excel-Tabelle2, welche sich auf die erste Tabelle bezieht. Die erste Spalte ist in Überschrift und Eintragungen (Auftrag1, -2, -3, ...) gleich. Die Art und Anzahl der weiteren Spalten unterscheidet sich jedoch, so dass diese zweite Tabelle etwa so aussieht: Auftrag1 Name1 Straße1 Ort1 Telefon1 Auftrag2 Name2 Straße2 Ort2 Telefon2 Auftrag3 Name3 Straße3 Ort3 Telefon3 Nun möchte ich es gerne so einrichten, dass die Tabelle2 die Anzahl ihrer Zeilen an die Tabelle1 anpasst, also dass beide Tabellen immer die gleiche Anzahl Zeilen haben. Bis jetzt sehe ich 2 Ansätze: 1) Die Anzahl der Zeilen von Tabelle1 lässt sich über die Funktion "=zeilen()" ermitteln. Leider weiß ich nicht, wie ich der Tabelle2 diesen Wert übergeben kann. 2) Es gibt die Funktion "=bereich.verschieben()". Hierzu habe ich mir einige Beispiele angeschaut, welche sich aber alle auf demselben Tabellenblatt (Register) abgespielt haben. Ist mit dieser Funktion ein arbeiten über mehrere Tabellenblätter hinweg möglich? bis auf weiteres und Dank im Vorraus, Ingo ------------------ "Umwege erhöhen die Ortskenntnisse!" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 22. Jan. 2013 16:41 <-- editieren / zitieren --> Unities abgeben: Nur für Ingo Struck
Hallo Ingo, z. T. klingt das, was Du beschreibst, eher nach Datenbank als nach Tabellenkalkulation, aber gut . =Zeilen() sagt mir nichts; da es sich dabei um einen Formel handelt, mach' folgendes: Tippe "=zeilen(" - natürlich ohne die "" - und klicke mit der Maus in Dein Register 1. Dort wählst Du den gewünschten Bereich aus. Die allermeisten Formeln können ohne Weiteres registerübergreifend arbeiten, in der Formel heißt es dann "... Register 1!...". ------------------ DIN1055.de | Lastannahmen für Anwender Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 22. Jan. 2013 18:25 <-- editieren / zitieren --> Unities abgeben: Nur für Ingo Struck
woher weiss Register2 Name1 Straße1 Ort1 Telefon1 das es mit Register1 Auftrag1 v3erknüpft sein soll existiert da noch ein Blatt welches Auftrag 1, (2), (3) ist... =zeile() gibt einfach nur den Bezug zurück in der die Formel steht und nicht <Die Anzahl der Zeilen>... eventuell reicht auch =WENN(Tabelle1!A1<>"";Tabelle1!A1;"") und runterkopieren? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ingo Struck Mitglied Holztechniker
Beiträge: 459 Registriert: 08.01.2010 Intel Core i7-3770 4 GB RAM AMD FirePro V3900 (FireGL V) Windows 7 Pro SP1 AutoCAD 2009 - deutsch MS-Office Standard 2010
|
erstellt am: 23. Jan. 2013 08:50 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, @Paulchen: Die Bemerkung mit der Datenbank ist sicher richtig und hier im Forum auch schon oft genug diskutiert worden. Allerdings habe ich für meine Aufgabe halt lediglich Excel 2010 zu verwenden. Damit bekomme ich dann meine Aufgaben gelöst oder auch nicht . Unabhängig von Sinn oder Blödsinn sind das für mich Gelegenheiten, meine excel-Kenntnisse zu verbessern, ein guter Handwerker kann schließlich auch mit schlechtem Werkzeug brauchbare Ergebnisse erzielen . @beide: <=Zeilen[Matrix]> (nicht: <=Zeile[Bezug]>, diese liefert die Zeilennummer eines Zellbezuges.) ist IMHO eine definierte excel-Funktion, welche die Anzahl der Zeilen eines im Argument [Matrix] angegebenen Bereiches zurückgibt. Diese funktioniert problemlos, auch über verschiedene Register hinweg. Leider weiß ich nicht, wie ich die mit dieser Funktion ermittelte Zeilenanzahl der excel-Tabelle1 für andere excel-Tabellen oder dynamische Bereiche übernehmen kann. @Thomas: Die excel-Tabelle2 auf dem Tabellenblatt "Register2" weiß halt eben noch nicht, dass sie sich auf die excel-Tabelle1 auf dem "Register1" beziehen soll, genau das ist ja die Frage. Die Idee mit der wenn-Funktion klingt spannend. Wenn ich sie getestet habe, werde ich mich wieder melden. mfg, Ingo ------------------ "Umwege erhöhen die Ortskenntnisse!" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ingo Struck Mitglied Holztechniker
Beiträge: 459 Registriert: 08.01.2010 Intel Core i7-3770 4 GB RAM AMD FirePro V3900 (FireGL V) Windows 7 Pro SP1 AutoCAD 2009 - deutsch MS-Office Standard 2010
|
erstellt am: 23. Jan. 2013 09:13 <-- editieren / zitieren --> Unities abgeben:
Die Idee mit der wenn-Funktion klappt leider nicht, da in allen herunterkopierten Zellen ja die Funktion drinsteht, auch wenn diese als solche einen Leerwert ("") zurückgibt. Daher besitzt der zweite dynamische Bereich soviele Zeilen, wie die wenn-Funktion herunterkopiert wurde und eben nicht soviele Zeilen wie der erste dynamische Bereich besitzt. ------------------ "Umwege erhöhen die Ortskenntnisse!" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 23. Jan. 2013 13:34 <-- editieren / zitieren --> Unities abgeben: Nur für Ingo Struck
|
Ingo Struck Mitglied Holztechniker
Beiträge: 459 Registriert: 08.01.2010 Intel Core i7-3770 4 GB RAM AMD FirePro V3900 (FireGL V) Windows 7 Pro SP1 AutoCAD 2009 - deutsch MS-Office Standard 2010
|
erstellt am: 23. Jan. 2013 17:01 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, @ Paulchen: Die "wenn-Funktion" funktioniert so schon gut und gibt auch keine Fehler zurück. Falls die Zellen leer sind ("", kein Leerzeichen), wird auch dieses korrekt zurückgegeben. Trotzdem steht in den Zellen ja noch immer die Formel als solche drin, die Zellen sind also nicht leer. Den Aufbau der Arbeitsmappe möchte ich nicht mehr ändern, da sie mittlerweile recht komplex ist und auch schon seit eineinhalb Jahren im Arbeitsalltag gut funktioniert. Es kommt für die Sachbearbeiter lediglich ein weiteres Register "Statusliste" hinzu, damit die Arbeitsabläufe auf den anderen Registerblättern nicht umgestellt werden müssen. @all: gelöst habe ich jetzt die Aufgabe mit VBA. Im Tabellenblatt "Statusliste", welches die Werte vom Tabellenblatt "Auftragsübersicht 2013" übernehmen soll, habe ich im VBA-Editor den Aufruf des Makros "Zellen kopieren" reingesetzt: Private Sub Worksheet_Activate() Call ZellenKopieren End Sub im Modul1 steht folgendes Makro: Sub ZellenKopieren() ' ' kopiert die Zellen A4:A1000 vom Tabellenblatt "Auftragsübersicht 2013" in die Zellen A4:A1000 vom Tabellenblatt "Statusliste" ' Dim i As Integer For i = 4 To 1000 Sheets(2).Cells(i, 1).Value = Sheets(1).Cells(i, 1).Value Next i End Sub Dieses Makro funktioniert so wie gewünscht. Als i-Tüpfelchen möchte ich jetzt noch die Ausdrücke <Sheets(2)> durch <Sheets("Statusliste")> und <Sheets(1)> durch <Sheets("Auftragsübersicht 2013")> ersetzen, in diesem Fall bricht das Makro jedoch mit folgender Fehlermeldung ab: Laufzeitfehler '9': Index außerhalb des gültigen Bereichs vermutlich habe ich die Namenskonvention beim Aufruf von Tabellenblättern noch nicht richtig verstanden. Dank an euch beide und bis auf weiteres, Ingo ------------------ "Umwege erhöhen die Ortskenntnisse!" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 23. Jan. 2013 18:16 <-- editieren / zitieren --> Unities abgeben: Nur für Ingo Struck
Hi, freut mich, dass Du Dich an VBA wagst, wo die Bordmittel versagen ! Zwei prinzipielle Überlegungen, kein echter Code: 1) Ein Sheet1.Range("A4:A1000").Copy und Sheet.Range("A4").Paste mit ggf. xlContents tut's nicht? Ich behaupte, es dauert recht lange, jede einzelne Zelle zu kopieren und einzufügen. 2) Worksheet müsste Dein Vorhaben unterstützen? Falls Du das umsetzt, darf niemand mehr die Register nachträglich umbenamsen, sonst haut es Dir das Makro um die Ohren. ------------------ DIN1055.de | Lastannahmen für Anwender Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ingo Struck Mitglied Holztechniker
Beiträge: 459 Registriert: 08.01.2010 Intel Core i7-3770 4 GB RAM AMD FirePro V3900 (FireGL V) Windows 7 Pro SP1 AutoCAD 2009 - deutsch MS-Office Standard 2010
|
erstellt am: 24. Jan. 2013 10:52 <-- editieren / zitieren --> Unities abgeben:
Hallo Paulchen, 1) Ein anderer Weg, den ich aber nicht zum laufen gebracht habe. Allerdings verstehe ich auch nicht, wann ich "sheet", "sheets", "sheet1", "sheet(1)", "sheets(1)", "sheet("1")" oder "sheets("1")" schreibe. Auch die Benutzung der Namen der Tabellenblätter habe ich nicht hingekriegt, da ich immer (unterschiedliche) Fehlermeldungen bekomme, welche mir so erstmal nichts sagen. Die oben genannte Version läuft jedoch und benötigt auch weniger als eine Sekunde. Sie ist somit für unsere Zwecke hinreichend. 2) Worksheet habe ich auch getestet (naja, probiert), aber auch nichts nennenswertes hinbekommen. @all: Sicherlich wäre an dieser Stelle erstmal ein Grundkurs VBA angebracht, was aber in diesem Forum zu viel verlangt ist. Deshalb Dank für die Aufmerksamkeit und Hilfestellung hier auf cad.de! Mit Eurer Begleitung habe ich die Aufgabe ja auch lösen können. mfg, Ingo ------------------ "Umwege erhöhen die Ortskenntnisse!" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|