Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1536to1540
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel Makro

Excel Makro
31.01.2017 12:15:30
Ralf
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..
In der Beispieldatei kann man sehen, was ich meine.
https://www.herber.de/bbs/user/111028.xls
Vielen Dank für die Hilfe hier.

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel Makro
31.01.2017 22:14:53
Piet
Hallo Ralf
habe dein Beispiel geladen und den Code geandert. Probier ihn bitte zuerst in deinem Beispiel aus.
mfg Piet

Option Explicit      '31.1.2017   Piet  Herber Forum
Sub Daten_kopieren()
Dim lngCount As Long
Dim lngRow As Long
Dim j As Integer, z As Long
On Error GoTo Fin
Application.ScreenUpdating = False
With Tabelle2
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
'Schleife zum Daten einfügen ins AktiveSheet
z = 30  '1.Zeile für Daten
For j = 1 To 5
If Tabelle2.Range("X1").Cells(lngCount, j)  "" Then
ActiveSheet.Cells(z, 5) = Tabelle2.Range("X1").Cells(lngCount, j)
z = z + 1
End If
Next j
Next lngCount
End With
Fin:
Application.ScreenUpdating = True
End Sub
Sub KopieVorlageErstellen()
Dim TabName As String
TabName = Tabelle1.Cells(6, 3).Text
With ThisWorkbook
.Sheets(2).Copy After:=.Sheets(.Sheets.Count)
ActiveSheet.Shapes(1).Delete
ActiveSheet.Name = TabName
End With
End Sub
'kann entfallen - wird doppelt umbenannt !!
'        ActiveSheet.Name = "Kopie " & Sheets.Count - 1

Anzeige
AW: Excel Makro
01.02.2017 09:09:11
Ralf
Hallo Piet,
vielen Dank für deine Hilfe.
Ich habe den Code in meine Datei eingefügt, leider klappt es noch nicht wie so, wie es benötigt wird.
Ich muss bei meiner Beschreibung des Problems nochmal ansetzen.
Das Daten kopieren erstmal klappt soweit für die Zellen, die sozusagen statisch sind. Also vom ersten Tabellenblatt von Spalte A bis Spalte V werden die Einträge ins zweite Tabellenblatt in die Zellen der Zeilen 4 bis 16 übernommen.
Die anderen Einträge der Spalten X bis AB (vom ersten Tabellenblatt), sollen sozusagen dynamisch in die Zellen der Zeilen 30 bis 34 (zweites Tabellenblatt) übernommen werden. Also wenn z.B. in einer Zeile im ersten TB der Wert in der Spalte X kleiner als 0,001 (oder die Zelle leer ist), soll im zweiten TB weder der Wert in die Zeile 30, Spalte E noch der Eintrag von der zweiten Zeile aus dem ersten TB übernommen werden.
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
Nun 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.
Vielen Dank nochmal.
MfG
Ralf
Anzeige
AW: Excel Makro
01.02.2017 11:12:16
Piet
Hallo Ralf,
ich habe heute private Pflichten die mich 1-2 Tage in Ansprcu nehmen, gebe dir aber einen Tipp zum Selbst probieren.
Lade den Wert der Zelle in eine neue Variable und aendere die If Then Bedingung bis es klappt! Hier der Code dazu
Viel Erfolg ....
mfg Piet

Sub test()
Dim Wert As Double  'oder Variant
'Hier IF Then aendern, vorher Zelle in Wert laden
For j = 1 To 5
Wert = Tabelle2.Range("X1").Cells(lngCount, j)
If Wert  "" And Wert > 0.1 Then  '0,1 oder 0,01 selbst waehlen
ActiveSheet.Cells(z, 5) = Tabelle2.Range("X1").Cells(lngCount, j)
z = z + 1
End If
Next j
End Sub

Anzeige
AW: Excel Makro
01.02.2017 14:00:27
Ralf
Hallo Piet,
danke, dass du dir Zeit dafür genommen hast.
Leider komme ich damit nicht weiter, es wird imm er Laufzeitfehler '1004' angezeigt. Ich wieß auch nicht, wass ich da änern muss, habe sogut wie keine Ahnung von Makros.
Wäre der weg mit dem ausblenden der "leeren" Zeilen vielleicht geeigneter?
MfG
Ralf
AW: Excel Makro
02.02.2017 22:10:09
Piet
Hallo Rolf,
nicht aufgeben, wir machen solange weiter bis es klappt. Hier noch mal eine geaenderte Version. Ein Problem ist, das die Werte als Text in der Tabelle stehen, und nicht als echte Zahlen! Deshalb habe ich sie mit Double in die Variable geladen, musste in der IF Then Anweisung aber den umgekehrten Weg gehen. Habe über Else ausgewertet!
If Wert kleiner 0.1 Then - gefolgt von Else. Sieht kompliziert aus, wenns funktioniert soll es uns egal sein! Hauptsache es klappt.
Sag mir bitte wenn es klappt. Zum Laufzeitfehler: der trat bei mir auch auf! Ich nehme dann den Befehl: On Error Goto Heraus, indem ich ein ' Zeichen vor "On" setze: "'On" Dann bleibt das Makro in der defekten Zeile stehen und markiert sie gelb. Danach muss man unbedingt im Menü "Run" den Punkt "Reset" drücken, weil das Makro sonst ewig stehn bleibt. So weiss man aber welche Zeile den Fehler verursacht.
Bei mir tauchte er auf in dieser Zeile: - .Sheets(2).Copy After:=.Sheets(.Sheets.Count)
Ich schloss die Datei, öffnete sie wieder, und der Fehler war weg. Keine Ahnung Warum?
mfg Piet

Option Explicit      '31.1.2017   Piet  Herber Forum
Sub Daten_kopieren_Neu()
Dim lngCount As Long
Dim lngRow As Long
Dim j As Integer, z As Long
Dim Wert As Variant
On Error GoTo Fin
Application.ScreenUpdating = False
With Tabelle2
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
'Schleife zum Daten einfügen ins AktiveSheet
z = 29  '1.Zeile für Daten  (z-1 setzen !!)
For j = 1 To 5
Wert = CDbl(Tabelle2.Range("X1").Cells(lngCount, j))
If Wert  0 Then
If Wert 

Anzeige
AW: Excel Makro
02.02.2017 22:14:45
Piet
Nachtrag
ich habe die die alte Überschrift ab Zeile 30-35 auch gelöscht und füge die richtige Überschrift ein! Ich denke das es ja nicht Okay ist als Text zZahl1 stehen zu haben und ich kopiere den Wert der zZahl2. Ich hoffe das ist so in Ordnung, prüfe es bitte nach.
AW: Excel Makro
06.02.2017 11:14:29
Ralf
Hallo Piet,
dankeschön.
Es funktioniert mit der Datenübernahme, solange reine Zahlen in den betreffenden Zellen stehen. Wie müsste ich das Auswerten der der Spalte X bis AB usw. (ab der 4.Zeile) ändern, wenn auch Einträge übernommen werden sollen, die aus einer Formel errechnet werden bzw. wenn in der Zelle Text oder ein Verweis auf eine andere Zelle Stecht steht (z.B. könnte Zelle X5 auf =AK5 verweisen, oder in Y5 könnte eine Formel sein, oder in Z5 könnte ein Text stehen usw.)?
Diese "dynamische" Übernahme von Daten ist eine tolle Sache. Das möchte ich auch gern auf andere Bereiche in dieser Datei anwenden, wo müsste ich da jeweils die entsprechenden Zeilen und Spalten auf beiden Tabellenblättern (und damit auch bei den jeweils neu erstellten Tabellenblättern) ändern?
Vielen Dank nochmal.
MfG
Ralf
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige