mvh1989
Goto Top

Daten aus Excel-Tabelle extrahieren und in neue Tabelle einfügen

Hallo zusammen,

zuerst einmal muss ich zugeben, dass ich bisher in Excel nur mit Formeln, nie aber mit Makros gearbeitet habe. Nun habe ich leider ein Projekt vorliegen, bei dem ich nicht drum herum kommen werde.
Ich muss aus einer Excel-Tabelle verschiedene Datengruppen extrahieren und eine neue Tabelle kreieren, die Folgendes beinhaltet:

Name Art Stunden Stundenlohn Gesamtbetrag

Dabei gibt es 2 Arten von Löhnen: REGULAR und OVERTIME (für Überstunden).


Die Daten sind dabei immer in Gruppen gleich positioniert, sodass ich mir mit meinen beschränkten Informatik-Kenntnissen folgendes Konzept überlegt habe:
(
Angaben zu Tabelle1:
Spalte A: Name
Spalte B: Art
Spalte C: Stunden
Spalte D: Stundenlohn
Spalte E: Gesamtbetrag
)

for i=1 to "letzte gefüllte Zeile der Tabelle1 (dynamisch/unbekannt)"
{

WENN
Tabelle1.Zeile i/Spalte B = "REGULAR"
DANN
create neue Zeile in Tabelle2
MIT
Tabelle2.Spalte A = Tabelle1.SpalteA/Zeile i+1
Tabelle2.Spalte B = REGULAR
Tabelle2.Spalte C = Tabelle1.Spalte C/Zeile i
Tabelle2.Spalte D = Tabelle1.Spalte D/Zeile i
Tabelle2.Spalte E = Spalte C * Spalte D

WENN
Zeile i.Spalte B = "OVERTIME"
DANN
create neue Zeile in Tabelle2
MIT
Tabelle2.Spalte A = Tabelle1.SpalteA/Zeile i
Tabelle2.Spalte B = OVERTIME
Tabelle2.Spalte C = Tabelle1.Spalte C/Zeile i
Tabelle2.Spalte D = Tabelle1.Spalte D/Zeile i
Tabelle2.Spalte E = Spalte C * Spalte D
}
LEERZEILE
"dann unter der Tabelle:"

Tabelle2.Spalte A = SUMME
Tabelle2.Spalte C = "Summe aller Werte in Spalte C"
Tabelle2.Spalte E = "Summe aller Werte in Spalte E"



1. Funktioniert das so?
2. Es wäre mehr als super wenn mir jemand dabei Hilfestellung geben könnte (Quelltext wäre phänomenal), weil mein Chef mir deshalb schon total im Nacken hängt und ich ehrlich gesagt ziemlich verloren bin face-sad

VIELEN VIELEN VIELEN DANK schonmal im Voraus für eure Hilfe!!!

Gruß
Michael

Content-Key: 211643

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

Printed on: April 20, 2024 at 01:04 o'clock

Member: colinardo
colinardo Jul 17, 2013 at 07:40:18 (UTC)
Goto Top
Hallo Michael,
also so wie du das geschildert hast sind die zwei Tabellen eigentlich identisch bis auf die Zusammenfassung darunter und diese Zeile:
 Tabelle2.Spalte A = Tabelle1.SpalteA/Zeile i+1
womit der Name der aus der nächsten Zeile aus Tabelle 1 übernommen wird.
dafür braucht es doch kein Makro, da langen doch Formeln ....
oder Fehlen mir da noch irgendwelche Informationen wie z.B. das Spalte B auch andere Werte als "REGULAR" und "OVERTIME" haben kann ?

wenn du unbedingt ein Makro dafür brauchst:
nach deinen Angaben geht folgendes Script
(habe bei den Tabellen die Überschriften berücksichtigt, die Daten fangen also erst in Zeile 2 an;
Die Tabellennblattnamen musst du in Zeile 3 und 4 noch an deine Gegebenheiten anpassen)

Sub CreateTable()
    Dim ws1 As Worksheet, ws2 As Worksheet, zeile_tbl1 As Range, zeile_tbl2 As Range
    Set ws1 = Worksheets("Tabelle1")  
    Set ws2 = Worksheets("Tabelle2")  
    Set zeile_tbl1 = ws1.Range("A2")  
    Set zeile_tbl2 = ws2.Range("A2")  

    Do While zeile_tbl1.Value <> ""  
        If zeile_tbl1.Offset(0, 1).Text = "REGULAR" Then  
            zeile_tbl2.Value = zeile_tbl1.Offset(1, 0).Value
            zeile_tbl2.Offset(0, 1).Value = "REGULAR"  
            zeile_tbl2.Offset(0, 2).Value = zeile_tbl1.Offset(0, 2).Value
            zeile_tbl2.Offset(0, 3).Value = zeile_tbl1.Offset(0, 3).Value
            zeile_tbl2.Offset(0, 4).FormulaLocal = "=" & zeile_tbl2.Offset(0, 2).Address & " * " & zeile_tbl2.Offset(0, 3).Address  
            Set zeile_tbl1 = zeile_tbl1.Offset(1, 0)
            Set zeile_tbl2 = zeile_tbl2.Offset(1, 0)
        ElseIf zeile_tbl1.Offset(0, 1).Text = "OVERTIME" Then  
            zeile_tbl2.Value = zeile_tbl1.Value
            zeile_tbl2.Offset(0, 1).Value = "OVERTIME"  
            zeile_tbl2.Offset(0, 2).Value = zeile_tbl1.Offset(0, 2).Value
            zeile_tbl2.Offset(0, 3).Value = zeile_tbl1.Offset(0, 3).Value
            zeile_tbl2.Offset(0, 4).FormulaLocal = "=" & zeile_tbl2.Offset(0, 2).Address & " * " & zeile_tbl2.Offset(0, 3).Address  
            Set zeile_tbl1 = zeile_tbl1.Offset(1, 0)
            Set zeile_tbl2 = zeile_tbl2.Offset(1, 0)
        Else
            Set zeile_tbl1 = zeile_tbl1.Offset(1, 0)
        End If
    Loop
    zeile_tbl2.Offset(1, 0).Value = "Summe:"  
    zeile_tbl2.Offset(1, 2).FormulaLocal = "=Summe(" & ws2.Range("C2").Address & ":" & zeile_tbl2.Offset(-1, 2).Address & ")"  
    zeile_tbl2.Offset(1, 4).FormulaLocal = "=Summe(" & ws2.Range("E2").Address & ":" & zeile_tbl2.Offset(-1, 4).Address & ")"  
End Sub

Grüße Uwe
gelöste Beitrage bitte auch als solche markieren.Danke
Member: mvh1989
mvh1989 Jul 17, 2013 at 13:24:11 (UTC)
Goto Top
Wow das sieht schonmal sehr hilfreich aus.
Allerdings fehlen da dann doch noch ein paar Informationenum einiges komplexer ist und noch viele andere Werte beinhaltet.

1. Das Muster ist allerdings, dass die benötigten Werte immer gleich um die Worte "REGULAR" und "OVERTIME" positioniert sind (deshalb z.B. Zeile i+1).

2. In Spalte B für die Art in Tabelle 1 stehen neben "REGULAR" und "OVERTIME" auch noch andere Werte (z.B. "Pay Total:"), daher hatte ich mir die Kontruktion über die Wenn-Dann-Abfrage überlegt.

Vielen Dank schonmal für deine grandiose Hilfe Uwe!!!
Member: mvh1989
mvh1989 Jul 18, 2013 at 14:24:02 (UTC)
Goto Top
Keine Idee dazu?
Member: colinardo
colinardo Jul 18, 2013 at 17:08:13 (UTC)
Goto Top
lad mal eine Beispieltabelle hoch und Schick den Link via PM ...dann sparen wir uns hier Missverständnisse...
G. Uwe
Member: mvh1989
mvh1989 Jul 18, 2013 at 18:24:09 (UTC)
Goto Top
so geschehen face-smile
Member: colinardo
colinardo Jul 24, 2013 updated at 06:21:43 (UTC)
Goto Top
Da dein Wunschscript nun funktioniert, markiere den Beitrag noch als gelöst Merci.
Grüße Uwe
Member: mvh1989
mvh1989 Jul 24, 2013 at 13:33:22 (UTC)
Goto Top
Danke nochmal face-smile