587 Aufrufe
Gefragt in Tabellenkalkulation von
Hallo und Guten Tag,
bei einer Makro Erstellung brauche ich Hilfe, kenne mich bisher damit nicht aus.

Folgendes Problem:
Es gibt 2 Tabellenblätter, "Erfassung" und "Auswertung".
Im Tabellenblatt "Erfassung" stehen in einer oder mehreren Zeilen verschiedene Daten, die an bestimmte Stellen im zweiten Tabellenblatt "Auswertung" kopiert werden sollen.

Ein Teil der Daten soll dynamisch eingetragen werden, je nachdem ob in einer betimmten Zelle (z.B. Spalte X, Zeile 4) ein Wert größer als 0,001 vorhanden ist oder nicht. Ist der Wert kleiner oder die Zelle leer, wird es übersprungen und es soll der Wert aus der nächsten Zelle (z.B.Spalte Y, Zeile 4) geprüft werden usw.. Diese Dynamik erfasst 5 bestimmte Zellen pro Zeile.
Wenn nur ein Wert in diesen Zellen grösser als 0,001 ist, soll nur diese eine Wert und der Eintrag aus derselben Spalte, Zeile 2 (im Beispiel hier X2)kopiert werden.
Wenn z.B. drei Werte in diesen Zellen grösser als 0,001 sind, sollen nur diese drei Werte und die Einträge aus den zugehörigen Zellen derselben Spalte aus Zeile 2 kopiert werden, also drei Zeilen mit Einträgen und Werten angelegt werden.

Dann sollen, je nach Anzahl der Zeilen im ersten Tabellenblatt, die gleiche Anzahl an Tabellenblättern erstellt werden und jedes Tabellenblatt den Namen einer betimmten Zelle in der zugehörigen Zeile bekommen. Also bei Daten in nur einer Zeile ein neues Tabellenblatt bei Daten in 2 Zeilen zwei neue Tabellenbätter usw..


Vielen Dank für die Hilfe hier.

7 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

wenn man dir mit einem Makro helfen soll, dann musst du schon genau sagen, welche Zellen / Spalten überprüft werden sollen und welche Zellen / Spalten wohin kopiert werden sollen. Gut wäre auch, wenn du eine Beispieldatei auf einen Hoster deiner Wohl hochladen und den Link dann hier ins Forum einstellen könntest. Die Beispieldatei sollte im Aufbau deiner Orginaldatei gleichen und ein paar Dummydaten enthalten und auch das gewünschte Ergebnis.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.,
danke für die Hilfe.

Ich muss bei meiner Beschreibung des Problems nochmal ansetzen.

Es sollen von ersten Tabellenblatt "Erfassung" verschiedene Daten aus den Zeilen 4 in ein zweites Tabellenblatt "Auswertung" kopiert werden. Dann wird von dem zweiten TB eine Kopie erstellt und entsprechend einer bestimmten Zeile umbenannt. Als nächste passiert das ganze mit der Zeile 5 des ersten TB, dann mit Zeile 6 usw., bis zum Tabellenende. Wenn das Makro fertig ist, habe ich soviele Tabellenblätter wie Zeilen von 4-Tabellenende im ersten TB vorhanden sind.
Das Kopieren der Daten von den Spalten A bis V klappt (hier sind die Zellen alls statisch im zweiten TB), ebenso das Kopieren und Umbenennen der Tabellenblätter.

Mein Problem: Die Einträge der Spalten X bis AB, jeweils Zeile 4 vom ersten Tabellenblatt sollen dynamisch in die Zellen der Zeilen 30 bis 34 des zweites Tabellenblatt kopiert werden.
Also wenn z.B. der Wert in der vierten Zeile der Spalte X grösser ist als 0,001, soll dieser Wert ins zweite TB in Zeile 30 Spalte E und der Eintrag (Text) aus Zeile 2 der selben Spalte X des ersten TB ins zweite TB in Zeile 30 Spalte A kopiert werden.
Wenn jedoch in der dritten Zeile im 1. TB der Wert in der Spalte X kleiner als 0,001 oder die Zelle leer ist, soll im zweiten TB weder der Wert dieser Zelle in die Zeile 30, Spalte E noch der Eintrag von der zweiten Zeile derselben Spalte aus dem ersten TB übernommen werden.

Das gilt dann entsprechend auch für die Spalten Y bis AB, die dann jeweils in die Zeilen 31 bis 34 ins zweit TB kopiert würden oder eben auch nicht (je nachdem, ob der Wert über 0,001 oder darunter ist)

Wenn von einer der Wert einer Spalten X bis AB aufgrund der Bedingungen (<0,001) nicht übernommen wird, soll allerdings im zweiten Tabellenblatt keine Leerzeile im Bereich der Zeilen 30-34 entstehen.

Als Beispiel mal für die Zeilen 4 vom 1. Tabellenblatt "Erfassung" (wenn alle Werte über 0,001 liegen):
SpalteX SpalteY SpalteZ SpalteAASpalteAB
Zeile2 ZZahl1 ZZahl2 ZZahl3 ZZahl4 ZZahl5
Zeile3
Zeile4 0,15 200 0,01 1,2 10

Das würde dann so aussehen im Zweiten Tabellenblatt "Auswertung" (alle Zeilen/Zellen befüllt):
SpalteA SpalteB SpalteC SpalteD SpalteE
Zeile 30 ZZahl1 = 0,15
Zeile 31 ZZahl2 = 200
Zeile 32 ZZahl3 = 0,01
Zeile 33 ZZahl4 = 1,2
Zeile 34 ZZahl5 = 10,0



Im nächsten Beispiel sind im 1.TB einige Werte kleiner als 0,001 bzw. es gibt leere Zellen:

SpalteX SpalteY SpalteZ SpalteAASpalteAB
Zeile2 ZZahl1 ZZahl2 ZZahl3 ZZahl4 ZZahl5
Zeile3
Zeile4 200 0,0001 1,2 10

Das soll dann so aussehen:
SpalteA SpalteB SpalteC SpalteD SpalteE
Zeile 30 ZZahl2 = 200
Zeile 31 ZZahl4 = 1,2
Zeile 32 ZZahl5 = 10,0
Zeile 33
Zeile 34

Das ganze soll dann auch für weitere Zeilen aus dem 1.TB gelten, die jweils dann in die neu erstellten/kopierten Tabellenblätter eingefügt werden, diese Tabellenblätter werden im Bereich der Zeilen 30-34 unterschiedlich aussehen (je nach Ausgangslage der zugehörigen Zeilen im 1.TB, Spalten X-AB)



Ein anderer Lösungsansatz wäre, wenn immer alle Zellen übertragen werden (egal ob leer, großer oder kleiner Wert), und dann die Zeilen ausgeblendet wären, wo die Werte kleiner als 0,001 oder sie Zellen leer sind.
Das würde dann so aussehen (die Zeilen 31 und 33 sind ausgeblendet):

SpalteA SpalteB SpalteC SpalteD SpalteE

Zeile 30 ZZahl2 = 200
Zeile 32 ZZahl4 = 1,2
Zeile 34 ZZahl5 = 10,0

In diesem Fall müssten für jede ausgeblendete Zeile zwischen Zeile 30 und 34 jeweils eine Zeile zwischen Zeile 36 und 41 zusätzlich eingeblentet werden, um das Format des 2.TB zu erhalten.

Leider klappt das mit der Dastellung der Zeilen und spalten hier nicht so gut, ich hoffen man kann es trotzdem verstehen.

Hier ist eine Beispieldatei : www.file-upload.net/download-12281854/Dateneintrag.xls.html]Dateneintrag.xls

MfG
Ralf
0 Punkte
Beantwortet von
Im obigen Post funktioniert der Link nicht, dieser sollte funktionieren: http://www.file-upload.net/download-12281854/Dateneintrag.xls.html
0 Punkte
Beantwortet von
Im obigen Post funktioniert der Link nicht, dieser sollte funktionieren: www.file-upload.net/download-12281854/Dateneintrag.xls.html
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

hier das ergänzte Makro, so wie ich es verstanden habe:

Sub Daten_kopieren()
Dim lngCount As Long
Dim lngRow As Long
Dim lngEinf As Long
Dim lngSpalte As Long
Dim strTab As String

On Error GoTo Fin
Application.ScreenUpdating = False

With Worksheets("Erfassung")
lngRow = IIf(Len(.Cells(.Rows.Count, 1)), .Rows.Count, _
.Cells(.Rows.Count, 1).End(xlUp).Row)
For lngCount = 4 To lngRow
Worksheets("Auswertung").Range("C4") = .Range("B" & lngCount).Value
Worksheets("Auswertung").Range("C6") = .Range("E" & lngCount).Value
Worksheets("Auswertung").Range("C8") = .Range("D" & lngCount).Value
Worksheets("Auswertung").Range("C10") = .Range("F" & lngCount).Value
Worksheets("Auswertung").Range("C12") = .Range("AD" & lngCount).Value
Worksheets("Auswertung").Range("C14") = .Range("G" & lngCount).Value
Worksheets("Auswertung").Range("C16") = .Range("H" & lngCount).Value
Call KopieVorlageErstellen
Next lngCount

'Nun neuer Durchlauf, um die Spalten X bis AB jeweils in die betreffenden Tabellenblätter zu kopieren.
For lngCount = 4 To lngRow
strTab = .Cells(lngCount, 5).Text 'Name des Arbeitsblatt, in das die Daten geschrieben werden sollen
lngEinf = 30 'Zeilen, ab der die Daten eingefügt werden sollen
For lngSpalte = 24 To 28 'Spalten X bis AB
If .Cells(lngCount, lngSpalte).Value > 0.001 Then
Worksheets(strTab).Cells(lngEinf, 1) = .Cells(2, lngSpalte).Value 'Überschrift in Spalte A kopieren
Worksheets(strTab).Cells(lngEinf, 5) = .Cells(lngCount, lngSpalte).Value 'Wert in Spalte E kopieren
lngEinf = lngEinf + 1 'Zähler für Einfügezeile erhöhen
End If
Next lngSpalte
Next lngCount

End With
Fin:
Application.ScreenUpdating = True
End Sub


Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.,
allerherzlichsten Dank und großen Respekt, das klappt sehr gut.
Wie machst du das, kannst du die Befehle, die dafür benötigt werden, alle auswendig?
Meiner einer kann nur Makros aufzeichnen und dann einbinden, aber bei so besonderen Sachen geht das weit über mein Können und Verständnis.

Danke Danke Danke.

MfG
Ralf
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Ralf,

es freut mich, dass das Makro so funktioniert, wie du willst.
Wie ich das mache? Jahrelange Übung ;-).

Gruß

M.O.
...