Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
|
22.01.17, 16:01
|
#1
|
Anfänger
Registriert seit: Apr 2013
Beiträge: 9
Bedankt: 0
|
Excel Daten von einer Tabelle in andere einfügen
Hallo,
ich habe eine Frage: ich würde gerne ein VBA Tool schreiben, mit dem ich die Werte aus einer Excel Tabelle in eine andere übertragen will. Die neue Tabelle sollte dabei automatisiert erstellt werden.
Wie gehe ich da vor? Bin leider noch nicht so sehr erfahren mit VBA.
Würde mich über jede Hilfe sehr freuen!!
|
|
|
22.01.17, 16:25
|
#2
|
Anfänger
Registriert seit: Aug 2009
Beiträge: 30
Bedankt: 4
|
Moin,
gibt viele Wege das zu lösen. Der Einfachheit halber würde ich dir empfehlen, die Daten vorerst von einem Tabellenblatt, in das nächste zu kopieren.
Excel hat diesen tollen Makrorekorder. Wenn du den anschmeißt, ein bisschen rumklickst, bzw. einige Zellen markierst (oder ganze Bereiche) und dir dann danach den Code anschaust, kommst du relativ schnell dahinter.
Du siehst dann oft solche Schlagworte wie
Zitat:
Worksheets("Tabelle1").Range("A1:B2").Select
|
Sprich er hat in der Tabelle1 (Tabellenblatt) den Bereich "markiert". Er wird diesen bereich jedesmal markieren, wenn du das Makro ausführst. (das kannst du dann auch auf einen Button legen)
Da ich deine Programmierkenntnisse nicht kenne erklär ichs einfach mal für "doofies":
Den Wert einer Zelle bekommst du durch den Befehl .Value. Den Wert einer Zelle schreibst du auch mit dem Befehl .Value. Du musst nur beide richtig anwenden.
Sagen wir du willst eine Zelle(Cell) oder einen Bereich(Range) von "Tabellenblatt1" nach "Tabellenblatt2" kopieren:
Zitat:
Worksheets("Tabellenblatt2").Cell('A1').Value = Worksheets("Tabellenblatt1").Cell('A1').Value
|
Das Gleiche eben auch für Range (aber vorsichtig sein). Wenn sich die Zellen ändern, müsstest du überlegen, wie du die richtigen Zellen ansprichst. Eventuell eine Variable als String (Dim xyz as String)?
Wenn das Makro Exceldateien übergreifend sein soll, brauchst du noch das Schlagwort Workbook:
Zitat:
Workbooks("Datei2.xlsx").Worksheets("Tabelle1").Ra nge("A1").Value = Workbooks("Datei1.xlsx").Worksheets("Tabelle1").Ra nge("A1").Value
|
Das ist zwar nicht die Musterlösung aber sollte vorerst reichen. Wenn du mehrmals kopieren möchtest (oder mehr als nur inhalte) schau dir das an:
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ] (Copy)
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ] (Paste)
|
|
|
22.01.17, 16:26
|
#3
|
Rente
Registriert seit: Oct 2015
Beiträge: 633
Bedankt: 445
|
Meinst du aus einem anderen Tabellenblatt, oder aus einer komplett anderen Excel-Datei?
Mir half es am Anfang immer den Recorder zu nutzen.
Du zeichnest also auf was du machst, und kannst dir nachher den entsprechenden Code anzeigen lassen und diesen nach deinen Wünschen bearbeiten
|
|
|
22.01.17, 19:43
|
#4
|
Agnostiker
Registriert seit: Dec 2009
Beiträge: 4.258
Bedankt: 4.527
|
Hier mal ein kleines Beispiel:
Lege dir einen Commandbutton auf das Blatt von dem die Werte stammen und füge folgendes als Code für das Blatt ein...
Code:
Private Sub CommandButton1_Click()
Dim myname
myname = "Werte_" & Format(Now, "dd-mm-yyyy_hhmmss")
Selection.Copy
Worksheets.Add.Name = myname
Sheets(myname).Range("C1").PasteSpecial xlValues
Application.CutCopyMode = False
End Sub
Damit werden die markierten Werte des aktuelles Blattes auf einem neu eingefügten Blatt ab Zelle C1 eingefügt. Das neue Blatt heißt immer Werte_ und hat als Zusatz das aktuelle Datum und die aktuelle Uhrzeit.
Ansonsten braucht man einfach mehr Infos, sonst raten wir hier ins Blaue...
__________________
Der Klügere gibt nach... deshalb regieren die Dummen die Welt
|
|
|
22.01.17, 21:29
|
#5
|
Atheist
Registriert seit: Sep 2010
Beiträge: 1.054
Bedankt: 668
|
Ich arbeite täglich mit Excel, aber wenn ich das lese, muss ich erkennen dass ich fast keine Ahnung von der Software habe...
__________________
Wünsche einen angenehmen Tag und danke für's Lesen!
|
|
|
23.01.17, 10:57
|
#6
|
Agnostiker
Registriert seit: Dec 2009
Beiträge: 4.258
Bedankt: 4.527
|
@Rasiererkönig
Mit Excel bzw. VBA geht "fast" alles incl. der Zugriff auf das Dateisystem. Man könnte sich quasi seinen eigenen Dateimanager programmieren. Ich war in VBA vor Jahren noch deutlich fitter, aber sooo oft arbeite ich damit auch nicht mehr.
Zu meinen Vorrednern Draien und ThreeChord muss ich noch anmerken, dass sie zwar Recht haben, dass der Makrorekorder als Einstieg recht nützlich ist, aber er stößt leider sehr sehr schnell an seine Grenzen. Aber auch ich habe damit mal angefangen und es mir dann peu a peu selbst beigebracht. Daher ist mein "Programmierstil" (wenn man ihn überhaupt so nennen kann ) nicht gerade professionell, aber Hauptsache es funktioniert...
Speziell zu Draien muss ich noch sagen, dass etwas so nicht funktionieren dürfte...
Dieser Befehl z.B. wird kaum ohne Fehler funktionieren (könnte es sein, dass das die Syntax aus OpenOffice ist?)
Code:
Worksheets("Tabellenblatt2").Cell('A1').Value = Worksheets("Tabellenblatt1").Cell('A1').Value
Folgende 3 Alternativen fielen mir ein, wenn man es denn überhaupt so lösen sollte.
Code:
Worksheets("Tabellenblatt2").Cells(1,1).Value = Worksheets("Tabellenblatt1").Cells(1,1).Value
Worksheets("Tabellenblatt2").Range("A1").Value = Worksheets("Tabellenblatt1").Range("A1").Value
Worksheets("Tabellenblatt2").[A1].Value = Worksheets("Tabellenblatt1").[A1].Value
Und es bringt auch nichts, einfach eine Variable zu definieren, wenn sich die Zeile oder Spalte einer Zelle ändert. Das muss man anders lösen.
__________________
Der Klügere gibt nach... deshalb regieren die Dummen die Welt
|
|
|
24.01.17, 17:15
|
#7
|
Anfänger
Registriert seit: Apr 2013
Beiträge: 9
Bedankt: 0
|
Also erstmal danke für die Antworten.
Was ich brauche ist folgendes: Und zwar habe ich mir da zwei Beispieldateien erstellt, wo ich das gerne anwenden würde.
Was ich machen will ist folgendes: ich habe eine Liste mit Monaten drin, welche in jeder Woche die Anzahl der Tage angibt, in welchen eine Maschine benutzt wurde und von welchem Hersteller die Maschine stammt. Jetzt habe ich noch eine andere Liste, wo auch die Wochentage angegeben sind. Die Anzahl der Wochentage will ich jetzt von der einen Liste in die andere übertragen und zwar per button. Das heißt, auf der einen Tabelle sind ja unsere Maschinen angegeben und z.B. im Monat März die Anzahl der Benutzung in der Woche ( z.B. 3-Mal). Das soll jetzt in die andere Tabelle übertragen werden. Die andere Tabelle enthält dann die Tage wo die Maschine benutzt wurde bzw. nicht benutzt wurde.
Die eine Tabelle enthält alle Monate, aber nur mit Wochen aufgeteilt. Da steht dann z.B. in der Woche 01 im März 2017 die Ziffer 3. Das bedeutet, die Maschine wird 3-Mal in der Woche genutzt. Die Tabelle wo diese Information hinsoll, enthält nur den Monat März, aber auch die Wochentage. Und das soll dann so aussehen, dass die Wochentage, in welchen die Maschine genutzt wird, farblich dargestellt werden und da wo nicht, weiß.
Und das will ich als Makro haben, wenn es geht.
EDIT: Da sind die beiden Beispiel-Dateien zu finden:
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
|
|
|
24.01.17, 19:23
|
#8
|
Agnostiker
Registriert seit: Dec 2009
Beiträge: 4.258
Bedankt: 4.527
|
Sorry, aber wer hat sich denn sowas einfallen lassen? Zum einen sind ja die Kalenderwochen flexibel und nicht deckungsgleich mit einem Monat. Fällt z.B. MO, Di noch in den Februar und der Rest in den März und an allen Tagen wird die Maschine benutzt, macht das doch schon wenig Sinn.
Zitat:
Zitat von Mixer007
Das bedeutet, die Maschine wird 3-Mal in der Woche genutzt. Die Tabelle wo diese Information hinsoll, enthält nur den Monat März, aber auch die Wochentage.
|
Und woher soll das Programm wissen, an welchen Tagen der Woche die Maschine benutzt wird, wenn man nur die Anzahl der Wochenbenutzungen kennt? Denn so habe ich dein Vorhaben verstanden. Andersherum würde ich es ja noch nachvollziehen können.
Warum sind dafür überhaupt mehrere Dateien notwendig? Und warum nicht für das ganze Jahr nur 1 Tabellenblatt, anstatt für jeden Monat eine Datei/Tabellenblatt? Entscheidend für das Makro ist die Wiederholbarkeit und Struktur der Tabelle. Für mich persönlich sieht das (und das ist nicht böse gemeint) irgendwie wenig durchdacht aus. Aber "theoretisch" und somit hier auch praktisch wäre "sowas in der Art" möglich.
__________________
Der Klügere gibt nach... deshalb regieren die Dummen die Welt
|
|
|
24.01.17, 19:45
|
#9
|
Anfänger
Registriert seit: Apr 2013
Beiträge: 9
Bedankt: 0
|
Ich kann leider keine Dateien von meinem Betrieb Posten. Daher auch das Beispiel mit der Maschinenbelegung. Ja, das Beispiel ist nicht gut durchdacht. Es geht hier nur um das Prinzip, Tabellenwerte rüberzukopieren. Bei den richtigen Tabellen geht es um Urlaubstage und diese sollen in eine Anwesenheitsliste übertragen werden.
Kannst du mir zeigen wie ich nun das so rüberkopieren kann per Makro ?
|
|
|
25.01.17, 11:23
|
#10
|
Agnostiker
Registriert seit: Dec 2009
Beiträge: 4.258
Bedankt: 4.527
|
Zitat:
Zitat von Mixer007
Ich kann leider keine Dateien von meinem Betrieb posten.
|
Das verstehe ich selbstverständlich.
Zitat:
Zitat von Mixer007
Kannst du mir zeigen wie ich nun das so rüberkopieren kann per Makro ?
|
Da gibt es nun ohne Ende Möglichkeiten, wie man das löst. Aber man muss genau wissen, was der Code tun soll. Hier mal ein ganz billiges Beispiel für deine geposteten Dateien. Angenommen es sind beide Dateien geöffnet. In der Datei "Maschinennutzung" sind angenommen in Zeile 9 KW11 am Mo, Mi und Fr jeweils eine 1 eingetragen. Mit folgendem Code werden die nun addiert und in "Maschinenbelegung" in Zelle O5 eingetragen.
Code:
Workbooks("Maschinenbelegung.xlsx").Sheets("Tabelle1").Range("O5").Value = Application.WorksheetFunction.Sum(Range("U9:Y9"))
Der Code muss natürlich in irgendeine Prozedur wie z.B. ein (Command)Button.
Code:
Private Sub CommandButton1_Click()
Workbooks("Maschinenbelegung.xlsx").Sheets("Tabelle1").Range("O5").Value = Application.WorksheetFunction.Sum(Range("U9:Y9"))
End Sub
Allerdings wird dir das nicht viel helfen, weil ja vermutlich verschiedenste Zellen, von verschiedenen Maschinen bzw. Mitarbeitern in die entsprechende Zelle/Zeile der anderen Datei kopiert werden sollen. Du könntest aber auch über eine ganz normale Formel auf andere Dateien zugreifen, falls dir das hilft. Also z.B. folgende Formel in der Datei "Maschinenbelegung" in Zelle O5 hat denselben Effekt wie der obige Code.
Code:
=SUMME([Maschinennutzung.xlsx]Tabelle1!$U$9:$Y$9)
__________________
Der Klügere gibt nach... deshalb regieren die Dummen die Welt
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:11 Uhr.
().
|