zorbas81
Goto Top

Aus einer ausgewählten Zeile nur bestimmte Werte in eine neue Datei rauskopieren

Hallo liebe Excel-Profis,

momentan verzweifle ich gerade an einer Aufgabe die folgendermaßen lautet:

Eine Teile-Tabelle mit vielen Spalten und noch mehr Zeilen…..

Durch anklicken einer Zeile sollen die Werte aus Spalte 3 und Spalte 5 in eine bereits existierende Excel-Datei kopiert werden. Wert aus Spalte 3 soll in die neue Datei in Zelle A1 kopiert werden und der Wert aus Spalte 5 in Zelle B2 der neuen Datei.

Diese „neue“ Datei ist ja bereits beschrieben, und es soll sich immer wieder diese gleiche Datei öffnen, nach dem man eine Zeile der ersten Excel-Datei ausgesucht hat.

Über jegliche Hilfe bin ich Euch sehr dankbar.

Viele Grüße
Alex

Content-Key: 123849

Url: https://administrator.de/contentid/123849

Printed on: April 27, 2024 at 15:04 o'clock

Member: bastla
bastla Aug 31, 2009 at 16:28:52 (UTC)
Goto Top
Hallo Zorbas81!

Das Auslesen der Zellen ließe sich (ohne zu berücksichtigen, ob sich in der gewählten Zeile überhaupt Daten befinden) grundsätzlich so umsetzen :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Zeile = Target.Row
MsgBox Cells(Zeile, 3).Value & vbCrLF & Cells(Zeile, 5).Value
End Sub
Dieser Code ist dabei dem Tabellenblatt zuzuordnen und nicht in ein Modul zu legen - dazu einfach nach Rechtsklick auf das Registerblatt der Tabelle per "Code anzeigen" in den VBA-Editor wechseln.

Wie es dann allerdings weitergehen soll, ist mir nicht ganz klar - zum Einen erwähnst Du eine "bereits existierende Excel-Datei", dann wieder soll "in die neue Datei" kopiert werden - was genau hast Du also vor?

Grüße
bastla
Member: Zorbas81
Zorbas81 Sep 01, 2009 at 08:51:11 (UTC)
Goto Top
Hallo Bastla,

der Wahnsinn, wie hilfsbereit du hier bist, Respekt!!
Und VIELEN DANK im Voraus für deine Hilfe (mal wieder face-wink ).

So und jetzt zu meinem Mini-Problemchen:

In der Teile-Tabelle sind ca. 400 unterschiedliche Teile untereinander aufgelistet.
In Spalte 3 steht zu jedem Teil die Benennung und in Spalte 5 zu jedem Teil die Versionsnummer. (evtl. noch Materialart usw. aber das kann ich ja dann nach belieben hinzufügen).

Hierzu muss jetzt pro Teil eine eigene Excel-Datei erstellt werden, in dem die Benennung und die Version enthalten sein muss. Somit ca. 400 einzelne Excel-Dateien.

Die Idee ist jetzt, Zeit zu sparen, in dem in der Urpsrungsdatei das jeweilige Teil (somit die entsprechende Zeile) angeklickt wird, und automatisch sich die neue Excel-Datei öffnet und die Benennung und Version hineinkopiert werden.
Somit wird das schneller befüllt und das spart unheimlich viel Zeit, denn das muss öfter gemacht werden im Laufe des Jahres.

Thats it!

Die einzige Sache die es dabei zu beachten gilt ist, dass diese neu erstellten Dateien alle gleich aussehen müssen, und hierzu habe ich ein Layout entworfen, und die Werte „Benennung“ und „Version“ sollen immer in die gleichen Zellen (A1 und B2) hineinkopiert werden.
Wie schafft man es jetzt, dass man eine Zeile anklickt, und sich immer die Datei mit meinem Layout öffnet, in der die Werte hineinkopiert werden müssen?
Kann man diese Datei irgendwo abspeichern, auf die das Makro dann zugreift?
So muss das doch gehen, oder?

Ich hoffe ich habe es einigermaßen verständlich erläutert Bastla…: -)

Freue mich über deine Antwort…

Viele Grüße aus Stuttgart,
Alex
Member: bastla
bastla Sep 01, 2009 at 09:00:43 (UTC)
Goto Top
Hallo Alex!

Was spräche denn dagegen, alle 400 Dateien gleich in einem Scriptdurchlauf zu erstellen, anstatt sie "erst auf Anforderung" zu erzeugen?

Grüße
bastla
Member: Zorbas81
Zorbas81 Sep 01, 2009 at 09:40:02 (UTC)
Goto Top
Hallo Bastla,

klar, super Idee.
Aber was ist dann mit dem Dateinamen, unter dem die neu erstellte Datei abgespeichert wird?
Kann man automatisch die Versionsnummer und Benennung als Dateinamen abspeichern lassen?

Also, man gibt ein zielordner an, und es werden 400 Dateien automatisch abgespeichert.
Jede Datei hat somit die individuelle Benennung und Versionsnummer.

Ist sowas möglich?
Das würde ja dann ratzfatz gehen und spart unheimlich viel Zeit face-smile

Grüße
Alex
Member: bastla
bastla Sep 01, 2009 at 20:13:22 (UTC)
Goto Top
Hallo Alex!
Kann man automatisch die Versionsnummer und Benennung als Dateinamen abspeichern lassen?
Man wird können ... face-wink

Welches Format haben Versionsnummer und Benennung - lassen sich daraus unmittelbar Dateinamen erzeugen, oder müssen zB Sonderzeichen ausgefiltert oder Namensbestandteile gekürzt werden?
Dürfen/sollen übrigens bereits bestehende Dateien (beim nächsten Scriptlauf) überschrieben werden, bzw kann es zu Namenskollisionen kommen und wie soll dann verfahren werden?

Grüße
bastla
Member: Biber
Biber Sep 01, 2009 at 20:51:21 (UTC)
Goto Top
Moin Alex und bastla,
Zitat von @bastla:
> Kann man automatisch die Versionsnummer und Benennung als Dateinamen abspeichern lassen?
Man wird können ... face-wink
Aber nicht um jeden Preis müssen...
Welches Format haben Versionsnummer und Benennung - lassen sich
daraus unmittelbar Dateinamen erzeugen, oder müssen zB
Sonderzeichen ausgefiltert oder Namensbestandteile gekürzt werden?
Dürfen/sollen übrigens bereits bestehende Dateien (beim
nächsten Scriptlauf) überschrieben werden, bzw kann es zu
Namenskollisionen kommen und wie soll dann verfahren werden?
Diese beiden angedeuteten Problemfelder sind ja nur die Spitze des Eisbären.

Eine Datenkonsistenz in einem Datenwust von einer Excel-Mutter-Tabelle (mit in der Praxis mehreren "aufzuhebenden" Versionen pro Jahr) und 400+x Unter-Exceltabellen durch ein Mini-IF-THEN-ELSE-Regelwerk zu gewährleisten.... hey! Soll ich mich dazu ausführlicher äußern?

Diese Datensammlung und -verwaltung schreit nach einer relationalen/normaliesierten DatenBANKlösung.
Mit 1:1 oder (mit Versionspflege) 1:n-beziehungen, Referentieller Integrität etc.

Oder gibt es irgendwelche Details, die das ausschließen?
@alex:
  • Was für Details außer Benennung und Versionsnr sollen den noch in diese Detail-Sheets reingeklimpert werden?
  • Wie sieht denn das Gesamtbild bzw. der ganze abzubildende Prozess aus?
  • Ist denn der Datenfluss so wie beschrieben wirklich eine Einbahnstrasse (von Stammdatentabelle zu Detail-Daten) oder fließen auch Daten zurück?

Ich mische mich nur ein, weil Du zwar momentan konstruktive Lösungsansätze bezogen genau auf Deine Fragen bekommst, aber nicht jede beantwortete Frage auch wirklich eine "Lösung" sein muss.

Grüße
Biber
Member: Zorbas81
Zorbas81 Sep 02, 2009 at 07:26:56 (UTC)
Goto Top
Guten Morgen Bastla und Biber,

WOW, Danke!!! wie Ihr Euch damit beschäftigt. Weiß das sehr zu schätzen!

@bastla:
Folgende Attribute gibt es, die kopiert werden müssten (diesmal ganz exakt face-wink ):

Version: 4.001
Sachnummer: A23874563
Trafotyp: Spiegelteil
Benennung: Kotflügel
Material: Stahl
Materialdicke: 1,7
Bearbeiter: Mustermann
Verantwortung EP: Musterfrau

Und im Dateinamen soll immer stehen: Bsp: „A23874563_4.001_Spiegelteil“

Für die Dateinamensvergabe müssen somit keine Sonderzeichen ausgefiltert oder Namensbestandteile gekürzt werden!

Und zu deiner zweiten Frage:
„Dürfen/sollen übrigens bereits bestehende Dateien (beim nächsten Scriptlauf) überschrieben werden, bzw kann es zu Namenskollisionen kommen und wie soll dann verfahren werden?“

Kann der Zielordner nicht jedes Mal neu bestimmt werden?
Dann gebe es ja keinen Konflikt mit Überschreibungen und Namenskollisionen dürfte es dann auch nicht geben, da jedes Teil in dieser Kombination nur einmal vorkommt.

@ Biber:

Zu deiner ersten Frage: „Wie sieht denn das Gesamtbild bzw. der ganze abzubildende Prozess aus“?

Stammliste öffnen – Makro starten und Zielordner auswählen – und nun werden ca. 400 Excel Dateien im Zielordner abgespeichert mit dem jeweils zusammengesetzten Dateinamen (siehe oben).

Das wars, mehr nicht! face-smile

Zur zweiten Frage: „Ist denn der Datenfluss so wie beschrieben wirklich eine Einbahnstrasse (von Stammdatentabelle zu Detail-Daten) oder fließen auch Daten zurück?“

Jep, nur in eine Richtung. Die Dateien werden erstellt und damit ist die Sache erledigt face-smile


Danke im Voraus für Eure Bemühungen...

Viele Grüße
Alex
Member: Zorbas81
Zorbas81 Sep 02, 2009 at 10:57:10 (UTC)
Goto Top
Hi Bastla,

Antwort siehe ganz unten face-smile .
Member: Zorbas81
Zorbas81 Sep 04, 2009 at 08:31:45 (UTC)
Goto Top
Hallo Bastla,

hast du mich vergessen? face-smile))
oder bist im wohlverdienten Urlaub?


Viele Grüße

Alex
Member: bastla
bastla Sep 04, 2009 at 13:05:37 (UTC)
Goto Top
Hallo Alex!

Sorry - aber Letzteres schon gar nicht face-sad - ich hoffe, am Wochenende etwas mehr Zeit zu haben.
Nur, um den Ablauf nochmals klar zu stellen:

Du hast eine Vorlage, in deren Zellen A1 und B2 der Wert aus Spalte 3 bzw Spalte 5 der jeweiligen Zeile eingefügt werden soll.

Gespeichert werden soll dann unter einem zusammengesetzten Dateinamen, dessen Teile aus welchen Spalten zu entnehmen sind?

Grüße
bastla
Member: Zorbas81
Zorbas81 Sep 04, 2009 at 14:27:43 (UTC)
Goto Top
Ich grüße dich Bastla face-smile

der Einfachheit halber hatte ich zu Beginn geschrieben A1 und B2.
Ich wollte nicht, dass mir alles vorgekaut wird face-wink

In Wirklichkeit sind die Daten in ganz anderen Spalten, aber das könnte ich ja dann alleine umändern face-wink

Aber nachfolgend schreibe ich es dir mal ganz exakt auf, der Vollständigkeit halber face-smile

Daten der Stammdatei:

Version: 4.001 Spalte 14
Sachnummer: A23874563 Spalte 13
Trafotyp: Spiegelteil Spalte 64
Benennung: Kotflügel Spalte 16
Material: Stahl Spalte 41
Materialdicke: 1,7 Spalte 42
Bearbeiter: Mustermann Spalte 21
Verantwortung EP: Musterfrau Spalte20

und in meine bereits existierende Datei (Zieldatei) sollen diese Werte in folgende Zellen kopiert werden:

Version: 4.001 Spalte: 2 Zeile: 5
Sachnummer: A23874563 Spalte: 2 Zeile: 3
Trafotyp: Spiegelteil Spalte: 2 Zeile: 6
Benennung: Kotflügel Spalte: 2 Zeile: 4
Material: Stahl Spalte: 4 Zeile: 3
Materialdicke: 1,7 Spalte: 4 Zeile: 4
Bearbeiter: Mustermann Spalte: 4 Zeile: 5
Verantwortung EP: Musterfrau Spalte: 6 Zeile: 4

So, das sind die exakten Werte Bastla face-smile

Und der Dateiname setzt sich aus Sachnummer, Version und Trafotyp zusammen.
Die Werte kann man doch entweder aus der Stammliste entnehmen oder aus der fertig befüllten Zieldatei, oder?
Die exakte Angabe der Spalte/Zeile hab ich ja oben geschrieben (von beiden Dateien).

Und so ungefähr sollte der Dateiname aussehen: Bsp: „A23874563_4.001_Spiegelteil.xls

Ausser dem Zielordner, wo die Dateien hineingespeichert werden, muss man doch auch die Zieldatei auswählen, oder?
Denn diese enthält ja noch andere Daten, die ja nicht angefasst werden! Oder kann man das nur mit einer Pfadangabe machen?

Wie dem auch sei, ich wünsche Dir ein wunderschönes Wochenende Bastla.
Tausend Dank für die Mühe, die du da hineinsteckst. Respekt!

Wenn du Mal in Stuttgart vorbeikommst, würde Dir liebendgern ein/zwei Bierchen ausgeben.

Bis nächste Woche dann...

Viele Grüße
Alex
Member: bastla
bastla Sep 04, 2009 at 20:57:11 (UTC)
Goto Top
Hallo Alex!
Ausser dem Zielordner, wo die Dateien hineingespeichert werden, muss man doch auch die Zieldatei auswählen, oder?
Denn diese enthält ja noch andere Daten, die ja nicht angefasst werden! Oder kann man das nur mit einer Pfadangabe machen?
Eigentlich war ich bisher davon ausgegangen, dass es eine Vorlage (wäre das die "Zieldatei"?) gibt, die mit den entsprechenden Werten befüllt und dann unter dem (aus einigen dieser Werte) zusammengesetzten Dateinamen in einem vorgegeben Ordner gespeichert werden soll ...

Grüße
bastla
Member: Zorbas81
Zorbas81 Sep 05, 2009 at 09:00:40 (UTC)
Goto Top
Schönen guten Morgen Bastla!

Ich hoffe ich habe dich nicht verwirrt face-smile

Damit wir uns mit den Dateinamen nicht verwurschteln, nachfolgend eine Erläuterung face-smile

Datei mit allen 400 Zeilen (Quelle): "Stammliste"
Zieldatei vor der Überschreibung: "Vorlage"
Zieldatei nach der Überschreibung: "Zieldatei"
Ordner, in dem alle 400 Dateien landen: "Zielordner"


Die "Vorlage" hat ja bereits beschriebene Zellen, und die sollen bleiben. Für alle 400 Zieldateien ist es die gleiche Vorlage!

Die "Zieldatei" ist das Resultat, nachdem das Makro die "Vorlage" mit den Werten aus der "Stammliste" befüllt hat (Bsp: „A23874563_4.001_Spiegelteil).

Das wars schon! face-smile


Ich hoffe ich konnte das einigermaßen verständlich erläutern face-smile

Ein schönes Wochenende noch Bastla!

Grüße aus Stuttgart,

Alex
Member: bastla
bastla Sep 05, 2009 at 17:57:41 (UTC)
Goto Top
Hallo Alex!

Etwas zum Testen: Speichere das folgende Script in einem Modul der "Stammliste.xls" und starte es von dieser Datei aus:
Sub ErzeugeEinzeldateien()

Vorlage = "D:\Vorlage.xls"  
Zielordner = "D:\Einzeldateien"  
Set Quelle = ThisWorkbook.Worksheets("Tabelle1")  
AbZeile = 2

Zieldatei = Array("B3", "B5", "B6")  

Zuordnungen = Array( _
"14>B5", _  
"13>B3", _  
"64>B6", _  
"16>B4", _  
"41>D3", _  
"42>D4", _  
"21>D5", _  
"20>F4" _  
)

ZieldateiMax = UBound(Zieldatei)
Workbooks.Open Filename:=Vorlage
Zeile = AbZeile
Check = CInt(Split(Zuordnungen(0), ">")(0))  
Do While Quelle.Cells(Zeile, Check) <> ""  
    For Each Zuordnung In Zuordnungen
        Z = Split(Zuordnung, ">")  
        Range(Z(1)).Value = Quelle.Cells(Zeile, CInt(Z(0))).Value
    Next
    Zieldateiname = Range(Zieldatei(0))
    For i = 1 To ZieldateiMax
        Zieldateiname = Zieldateiname & "_" & Range(Zieldatei(i))  
    Next
    
    ActiveWorkbook.SaveAs Filename:=Zielordner & "\" & Zieldateiname & ".xls"  
    Zeile = Zeile + 1
Loop
ActiveWorkbook.Close
MsgBox "Fertig."  
End Sub
Um noch Optimierungspotenzial zu lassen face-wink wird der Zielordner im Script als Konstante angegeben und es wird auch nicht geprüft, ob er bereits existiert (was allerdings Voraussetzung für das Speichern darin ist face-wink).

Weitere Annahmen: Die Stammdaten stehen in der "Tabelle1" der Stammliste und die "Vorlage.xls" ist so gespeichert, dass beim Öffnen bereits die gewünschte Tabelle aktiv ist.

Grüße
bastla
Member: Zorbas81
Zorbas81 Sep 06, 2009 at 13:34:53 (UTC)
Goto Top
Hallo Bastla!

WOW! Mir fehlen die Worte, wirklich!!
Das ist wirklich unglaublich was du hier drin leistest! (zum wiederholten Mal sogar!)

Ich freue mich wahnsinnig das morgen früh gleich auszuprobieren.
Hab diese Dateien bei der Arbeit leider nur. Aber sobald ich das getestet habe schreibe ich hier wieder rein...

Nochmals tausend DANK! Bastla! RESPEKT!

Wünsche Dir noch einen schönen Sonntag...
Bis morgen früh face-smile
Ich melde mich mit einem Feedback ob alles geklappt hat face-smile

Viele liebe Grüße
Alex
Member: Zorbas81
Zorbas81 Sep 07, 2009 at 11:48:41 (UTC)
Goto Top
Einen wunderschönen Guten Tag Bastla! face-smile

Oh ja, meine gute Laune hat einen Grund, und zwar ist dein Code einsame Spitzenklasse!!! Du bist der Wahnsinn!!
Danke,Danke Danke !!! Es funktioniert EINWANDFREI!!!!!!!!!

Die Lösung mit den Konstanten ist Prima!
Natürlich könnte man hier auch eine Art Abfrage machen, bei der man dann den Zielordner jedes mal auswählen kann,
aber mein Gott, eine eierlegende Wollmilchsau brauchen wir ja für so eine Aufgabe auch nicht! face-wink

Jedenfalls hast Du mir zum x-ten Mal wieder wahnsinnig geholfen Bastla, ich verneige mich vor Dir! Respekt !

Und nochmals VIEEELEN DANK!! face-wink

Wünsche Dir noch einen guten Start in die Woche!!!

Viele liebe Grüße

Alex
Member: bastla
bastla Sep 07, 2009 at 12:08:55 (UTC)
Goto Top
Hallo Alex!

Ich freu' mich ja auch, wenn Du Dich freust face-smile, aber trotzdem noch eine Erinnerung an Bibers Einwände:

Ohne im Detail zu wissen, was Du mit den einzelnen Tabellen so bewerkstelligst - eigentlich sieht das nach einer typischen Datenbankanwendung aus (wo Du dann anstelle von 400 vermutlich nur sehr kurze Zeit aktuellen Einzeldateien nur jeweils ein Formular / einen Bericht benötigen würdest und darin immer den aktuellen Datenstand vorfinden könntest) ...

Grüße
bastla
Member: Zorbas81
Zorbas81 Sep 07, 2009 at 14:23:04 (UTC)
Goto Top
Hallo Bastla!

Klar, Ihr habt Recht, aber die Herrschaften hier brauchen keine Berichte, sondern diese einzelnen Excel-Dateien, da diese weiterbearbeitet und an verschiedene Personen verschickt werden.

Somit ist die jetzige Lösung "PERFEKT" ! Thx again ;)

Bin glücklich und zufrieden face-wink)

In diesem Sinne Bastla, machs gut... face-smile

Viele Grüße
Alex