Autor
|
Thema: Bestimmte, wiederkehrende Zeilen automatisch in neue Tabelle kopieren (4570 mal gelesen)
|
snowboarder1 Mitglied
Beiträge: 12 Registriert: 26.06.2013
|
erstellt am: 26. Jun. 2013 10:05 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen! Da ich VBA nur mal kurz am Rande im Studium hatte, ich aber ein Problem habe, wo ich denke, dass eventuell mit einem Makro gelöst werden könnte, möchte ich hier fragen, ob jemand dafür vielleicht eine Lösung kennt :-) Es geht darum, dass ich mit einer OCR-Software immer identische Dokumente eingescannt habe, die in einer Exceltabelle untereinander eingefügt sind. Immer z.B. in Zeile 25 vom Anfang aus gesehen (dann in Zeile 50, 75, 100 etc.)ist eine Information, die ich gerne in eine neue Tabelle in eine bestimmte Tabelle kopiert hätte. Ebenfalls in Zeile 31 (62,...)usw. Dazwischen sind Infos, die ich nicht brauche. Die Informationen unterscheiden sich in ihrer Schreibweise, sind aber immer in derselben Zeile. Kennt jemand dafür ein Makro, welches die Tabelle bis unten durchläuft und immer in den enstsprechenden (z.B. Start bei 25, dann +25 dann 25+25+25 usw...)die Werte ausliest und dann in eine bestimmte Zelle in einer neuen Tabelle ausgibt?? Vielen Dank für eure Tipps! :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 26. Jun. 2013 10:40 <-- editieren / zitieren --> Unities abgeben: Nur für snowboarder1
Hi, das geht auch ohne VBA per Formel: Code: =INDIREKT("Tabelle2!A"&ZEILE(A1)*25)
bzw. Code: =INDIREKT("Tabelle2!A"&ZEILE(A1)*31)
Tabellenname musst du natürlich anpassen. ------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
snowboarder1 Mitglied
Beiträge: 12 Registriert: 26.06.2013
|
erstellt am: 26. Jun. 2013 11:32 <-- editieren / zitieren --> Unities abgeben:
danke für die schnelle Antwort! Es funktioniert so auch, aber was muss ich noch hinzufügen, dass es in der gesamten Spalte (in der die Formel in A1 steht) jeweils die entsprechenden Werte in dann A2 ausgibt usw.? Zur Verdeutlichung: In der Ausgangstabelle steht zum Beispiel in Zeile 25 "Auto", in 50 "schönes Auto" usw. Jetzt habe ich in der zweiten Tabelle in A1 augrund der INDIRKET-Formel automatisch den Wert aus der Ausgangstabelle. Aber muss ich jetzt jedesmal manuell die Formel anpassen, damit es auch die anderen Zeilen (50, 75, 100...) durchsucht und mir die Werte in der zweiten Tab. in A2, A3 usw. ausgibt?? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 26. Jun. 2013 11:45 <-- editieren / zitieren --> Unities abgeben: Nur für snowboarder1
sorry, verstehe leider nur Bahnhof. Die Formel musst du so weit nach unten ziehen bis eine 0 erscheint, dann werden alle Daten, die im Abstand von 25 Zeilen stehen, untereinander aufgelistet. Oder meinst du, dass vorher nicht bekannt ist, in welcher Zeile sich der erste Suchbegriff befindet? Eine hochgeladene Arbeitsmappe wäre nicht verkehrt, damit man besser nachvollziehen kann was du meinst. ------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
snowboarder1 Mitglied
Beiträge: 12 Registriert: 26.06.2013
|
erstellt am: 26. Jun. 2013 12:12 <-- editieren / zitieren --> Unities abgeben:
|
daniu Mitglied Mechanik-Entwickler
Beiträge: 866 Registriert: 03.11.2004 Intel Xeon W3550 12GB RAM; NVidia Quadro 4000 Win 7 Enterprise 64bit; NX7.5 TeamCenter 8
|
erstellt am: 26. Jun. 2013 12:46 <-- editieren / zitieren --> Unities abgeben: Nur für snowboarder1
|
snowboarder1 Mitglied
Beiträge: 12 Registriert: 26.06.2013
|
erstellt am: 26. Jun. 2013 13:24 <-- editieren / zitieren --> Unities abgeben:
Hi, da gebe ich dir Recht - dauert alles ein wenig. Besonders bei vielen Daten, die ich bearbeiten möchte. Gibt es denn noch eine andere Möglichkeit, die die Rechenleistung etwas reduziert? Eventuell doch VBA? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daniu Mitglied Mechanik-Entwickler
Beiträge: 866 Registriert: 03.11.2004 Intel Xeon W3550 12GB RAM; NVidia Quadro 4000 Win 7 Enterprise 64bit; NX7.5 TeamCenter 8
|
erstellt am: 26. Jun. 2013 13:52 <-- editieren / zitieren --> Unities abgeben: Nur für snowboarder1
Hi, bei VBA in Excel: immer einfach erst Mal den Makro-Rekorder nehmen, aufzeichnen, Code anschauen und dann, wenn Du was nicht verstehst, wieder hier her kommen. Ich gehe davon aus, dass Du weißt, wie Du es mit Maus und Tastatur machen würdest, oder? Ich würd in dem Fall die Originaldaten in eine neue Datei kopieren und dort dann die Daten löschen, die Du nicht haben möchtest. Im Gegensatz zu VBA hast Du natürlich immer nur einen aktuellen Stand, der sich nicht mehr mitändert. Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 26. Jun. 2013 14:08 <-- editieren / zitieren --> Unities abgeben: Nur für snowboarder1
Zitat: Original erstellt von daniu: Im Gegensatz zu VBA hast Du natürlich immer nur einen aktuellen Stand, der sich nicht mehr mitändert.
das ist falsch - bei Formeln ändern sich die Daten automatisch, bei VBA nicht, da muss der Code erst erneut ausgeführt werden. Es geht übrigens auch ohne INDIREKT: Code: =INDEX(A:A;25*ZEILE(A1);1)
Und wenn der erste Wert immer in Zeile 25 steht, dann in die 1. Zelle diese Formel: Code: =A25
und in die nächstfolgenden diese: Code: =INDEX(A:A;25+55*ZEILE(A1);1)
------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
snowboarder1 Mitglied
Beiträge: 12 Registriert: 26.06.2013
|
erstellt am: 26. Jun. 2013 14:28 <-- editieren / zitieren --> Unities abgeben:
Habe das mal ausprobiert mit dem Makro aufzeichen - kenne mich aber wirklich so gut wie gar nicht mehr damit aus und weiß nicht, wie ich da ein Automatismus reinbringe, sodass ich das nicht für jede Zeile aufzeichen muss, sonst könnt ich es ja gleich das machen, was ich aufzeichne. Habe es mal beispielhaft für drei aufeinanderfolgende Zeilen gemacht. Folgendes kam dabei raus (Abstand hat sich zu 55 geändert, bitte nicht wundern): Sub Makro1() ' ' Makro1 Makro ' ' ActiveWindow.SmallScroll Down:=-9 Range("A55").Select Selection.Copy Sheets("Tabelle1").Select Range("C1").Select ActiveSheet.Paste Sheets("Sheet1").Select ActiveWindow.SmallScroll Down:=66 Range("A110").Select Application.CutCopyMode = False Selection.Copy Sheets("Tabelle1").Select Range("C2").Select ActiveSheet.Paste Sheets("Sheet1").Select ActiveWindow.SmallScroll Down:=48 Range("A165").Select Application.CutCopyMode = False Selection.Copy Sheets("Tabelle1").Select Range("C3").Select ActiveSheet.Paste End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
snowboarder1 Mitglied
Beiträge: 12 Registriert: 26.06.2013
|
erstellt am: 26. Jun. 2013 14:42 <-- editieren / zitieren --> Unities abgeben:
|
daniu Mitglied Mechanik-Entwickler
Beiträge: 866 Registriert: 03.11.2004 Intel Xeon W3550 12GB RAM; NVidia Quadro 4000 Win 7 Enterprise 64bit; NX7.5 TeamCenter 8
|
erstellt am: 26. Jun. 2013 15:39 <-- editieren / zitieren --> Unities abgeben: Nur für snowboarder1
Zitat: Original erstellt von Beverly:
das ist falsch - bei Formeln ändern sich die Daten automatisch, bei VBA nicht, da muss der Code erst erneut ausgeführt werden.
natürlich hatte ich mich verschrieben und genau das gemeint ... Danke für die Korrektur. Na - Du wirst nicht ganz drum rum kommen, Dich ein klitzekleines Bisschen mehr mit VBA auseinander zu setzen. Ansonsten gibt es sicherlich auch Dienstleister, die Dir sowas programmieren ... Insofern, als dass "INDEX" nicht volatil ist, würde ich mir das VBA aufgrund des Vorteils mit der automatischen Aktualisierung sparen. Das VBA tutorial aber trotzdem nicht Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
snowboarder1 Mitglied
Beiträge: 12 Registriert: 26.06.2013
|
erstellt am: 26. Jun. 2013 16:05 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Beverly:
Es geht übrigens auch ohne INDIREKT:
Code: =INDEX(A:A;25*ZEILE(A1);1)
Und wenn der erste Wert immer in Zeile 25 steht, dann in die 1. Zelle diese Formel: Code: =A25
und in die nächstfolgenden diese: Code: =INDEX(A:A;25+55*ZEILE(A1);1)
Hi, habe das soeben auch mal noch ausprobiert, aber irgendwie ändert sich der Wert nicht. Müsste sich nicht theoretisch der Bezug ändern, sprich anfangs A1, dann A25, usw.?? Stehe gerade etwas auf dem Schlauch Nachtrag: =INDEX($A$1:$A$273;25+55+55*ZEILE(A1);1) funktioniert, aber dann muss ich jedesmal +55 eingeben...ich komm leider nicht drauf, wie das geht, dass sich der Zeilenbezug jeweils ändert auf A25, A55 etc.) ??
[Diese Nachricht wurde von snowboarder1 am 26. Jun. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
snowboarder1 Mitglied
Beiträge: 12 Registriert: 26.06.2013
|
erstellt am: 26. Jun. 2013 16:22 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von daniu:
Insofern, als dass "INDEX" nicht volatil ist, würde ich mir das VBA aufgrund des Vorteils mit der automatischen Aktualisierung sparen. Das VBA tutorial aber trotzdem nicht Grüße
Denke auch, das ist wohl die schneller umsetzbare Lösung (für mich) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 28. Jun. 2013 11:13 <-- editieren / zitieren --> Unities abgeben: Nur für snowboarder1
gib doch mal bitte alle die Zeilennummern (oder Zelladressen) an, welche wiedergegeben werden sollen - mit deiner Beschreibung kommt ja niemand so richtig klar. ------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
snowboarder1 Mitglied
Beiträge: 12 Registriert: 26.06.2013
|
erstellt am: 28. Jun. 2013 11:31 <-- editieren / zitieren --> Unities abgeben:
Hi! habe noch etwas rumprobiert und jetzt, wo alles in einer Tabelle ist funktioniert auch die vorgeschlagene Formel: =INDEX($A$1:$A$273;25+55*ZEILE(A1);1) Vielen Dank für eure Hilfe und ein schönes Wochenende! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 29. Jun. 2013 00:53 <-- editieren / zitieren --> Unities abgeben: Nur für snowboarder1
|