Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1732to1736
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

Import bestimmter Spalten in bestehende Tabelle

Import bestimmter Spalten in bestehende Tabelle
09.01.2020 09:34:25
Michael
So, da bin ich mal wieder in meinem lieblings Excelforum und wünsche allen noch ein gesundes neues Jahr!
Für eine Statistik habe ich folgendes Problem welche derzeit noch von Hand übertragen wird soll (teil-)automatisiert werden.
Ich habe eine 134265.txt mit folgendem Demo-Inhalt nur das es einige Zeilen mehr sind und am Schluß maximal 29 Dok.-Typ existieren:
02.04.2009;Stapelname ;D200000001;CD_SECT.;CD_DOCS ;CDSEITEN;GES_SEIT;DELSEIT ;Belege ;Dok.-Typ
09.01.2020;DIT0220008001;D200002667;00000561;00000027;00000042;02615001;00000000;00000027;CC
09.01.2020;DIT0220008002;D200002667;00000573;00000029;00000044;02615001;00000000;00000029;ZS
09.01.2020;DIT0220008003;D200002667;00001654;00000081;00000130;02615001;00000001;00000109;ZB
09.01.2020;DIT0220008004;D200002667;00001847;00000086;00000145;02615001;00000001;00000120;ST
09.01.2020;DIT0220008005;D200002667;00002507;00000109;00000182;02615001;00000005;00000148;BV
Das erste Problem ist, dass gleiche Dok-Typen zusammenaddiert werden sollen.
Das zweite ist, es existieren in einer vorgegebenen Statistik bis zu 29 Dok Typen.
Diese ist wie folgt aufgebaut:
AC AL AS BV CC DD ET EX GE HM KL LM LW NU PD PL PN PR RG SK SR ST UM VG VH ZB ZE ZS ZW
02.01.2020 2 4 19 79 1 05 6 2 08
06.01.2020 30 5 27 5 69 10
08.01.2020 56 3 23 43 27 164 30 12
09.01.2020
Also im Kopf stehen die Doc-Typen AC bis ZW und in der nächsten Zeile sollen die Werte eingetragen werden.
Dazu wäre mir folgender Ablauf am am liebsten:

1. import der Tabelle (bekomme ich hin)
2. löschen und sortieren der benötigten Spalten wie folgt: Dok.-Typ | CD_DOCS | CDSEITEN | Belege
3. Tauschen Spalten und Zeilen über Transponieren (denke das bekomme ich per Makroaufzeichnung hin)

Damit sehe es so aus (nur paar Spalten mehr):
Dok.-Typ AC BV CC CC CC EX
CD_DOCS 223 27 303 303 144
CDSEITEN 367 182 42 629 261
Belege 296 148 27 505 505 201
Als nächstes würde ich die Zeile vom 9.01. und die Spalte AC anklicken und z.B. per Dopdown-Auswahl zwischen | CD_DOCS; | CDSEITEN; | Belege | auswählen wollen welche Zahlen in dieser Zeile | in den nächsten 29 Feldern importiert werden sollen. Dabei soll der Wert in den jeweiligen Dok.-Typ eingetragen werden wenn vorhanden.
Ich hänge mal ein Beispiel als Anlage daran.
https://www.herber.de/bbs/user/134263.xlsm
https://www.herber.de/bbs/user/134265.txt
Würde mich freuen wenn ich Unterstützung bekommen könnte.
Vielen Dank im voraus.
Gruß Michael

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Import bestimmter Spalten in bestehende Tabelle
09.01.2020 12:12:19
UweD
Hallo
1. hast du ja schon. Ich gehe davon aus dass die Daten dann in einem Blatt "Daten" in der selben Datei stehen.
den Rest kannst du per Formel machen und dann in Werte umwandeln (natürlich per Makro)
Sub Makro1()
    Dim TB1, TB2, LR1 As Long, LR2 As Long
    
    Set TB1 = Sheets("Statistik")
    Set TB2 = Sheets("Daten")
    
    LR2 = TB2.Cells(TB2.Rows.Count, "A").End(xlUp).Row 'Letzte Zeile in Spalte A Tabelle2 
    With TB1
        LR1 = .Cells(.Rows.Count, "B").End(xlUp).Row 'Letzte Zeile in Spalte B Tabelle1 
    
        With .Range("C4:AE" & LR1)
            'Formel reinschreiben 
            .FormulaR1C1 = "=SUMPRODUCT((Daten!R2C1:R" & LR2 & "C1=RC2)*" _
                          & "(Daten!R2C11:R" & LR2 & "C11=R3C)*(Daten!R2C5:R" & LR2 & "C5))" 'Rückgabe aus Spalte 5 
            
            'Formatierung: Nullen ausblenden 
            .NumberFormat = "0;-0; ;@"
            
            'Formeln in Werte umwandeln 
            .Value = .Value
            
        End With
        
        
        
        With .Range("AG4:BI" & LR1)
            .FormulaR1C1 = "=SUMPRODUCT((Daten!R2C1:R" & LR2 & "C1=RC2)*" _
                          & "(Daten!R2C11:R" & LR2 & "C11=R3C)*(Daten!R2C6:R" & LR2 & "C6))" 'Rückgabe aus Spalte 6 
            .NumberFormat = "0;-0; ;@"
            .Value = .Value
        End With
        
        
        'usw 

    End With
End Sub

da musst du nichts sortieren usw.
LG UweD
Anzeige
AW: Import bestimmter Spalten in bestehende Tabelle
09.01.2020 15:04:55
Michael
vielen Dank!
da macht er ja schon etwa aber nicht das richtige. :)
Und ich muß mich korrigieren es sind mehr als 29 Spalten nähmlich 43 und eine Spalte = ein Dok.-TYP
Ich markiere rechts vom Datum den ersten Dok.-Typ in der Beispieldatei wäre das C10
Eigentlich sind ja 3 Seiten (siehe rote Überschriften) auszufüllen.
Problem 1 alle Werte von CD_DOCS soll in die erste Seite meiner Statistik stehen
alle Werte von CDSEITEN soll in die zweite Seite und CD_SECT. soll in der dritten Seite meiner Statistik stehen.
Das Makro beginnt zu arbeiten löscht aber alle Daten der anderen Tage.
Außerdem weist er die Daten nicht den entsprechenden DOc.-Typ zu.
Ich habe die test Statistik noch einmal überarbeitet und die Daten Datei schon einmal eingefügt.
Den Dok.Typ GE gibt es zwei mal alsom der muss zzusammengerechnet werden.
https://www.herber.de/bbs/user/134280.xlsm
Viele Grüße
Michael
Anzeige
AW: Import bestimmter Spalten in bestehende Tabelle
09.01.2020 17:02:50
UweD
Hallo nochmal
ok. ich hab jetzt folgendes gemacht.
Ist das Datum bereits vorhanden werden die Zellen in dieser Zeile gefüllt
Wenn noch nicht da, dann wird eine Zeile nach dem nächstkleineren Tag eingefügt, deine Formeln davon kopiert und die anderen Werte dann mit meinen Formeln ermittelt...
Was noch nicht umgesetzt ist, wenn es noch gar kein Datum gibt... Dann kann auch nichts kopiert werden.
Modul1
Option Explicit 
 
Sub Makro1() 
    Dim TB1, TB2, NeuesDatum As Long, NeueZeile As Integer, LR1 As Integer, LR2 As Integer 
         
    Set TB1 = Sheets("Statistik") 
    Set TB2 = Sheets("Daten") 
       
    LR2 = TB2.Cells(TB2.Rows.Count, "A").End(xlUp).Row 'Letzte Zeile in Spalte A Tabelle2 
     
    NeuesDatum = TB2.Cells(1, 1) 
     
    With TB1 
         
        NeueZeile = WorksheetFunction.CountIf(.Columns(2), NeuesDatum) 'existiert das Datum schon? 
         
        If NeueZeile > 0 Then 
            NeueZeile = WorksheetFunction.Match(NeuesDatum, .Columns(2), 0)         'Zeile gefunden 
        Else 
            NeueZeile = WorksheetFunction.Match(NeuesDatum, .Columns(2), 1) + 1         'früheres Datum suchen 
             
            .Rows(NeueZeile).Insert xlDown  'Neue Zeile einfügen 
            .Rows(NeueZeile - 1).Copy .Rows(NeueZeile) 'vorherige Zeile kopieren 
            .Cells(NeueZeile, 2) = NeuesDatum 
        End If 
         
        LR1 = .Cells(.Rows.Count, "B").End(xlUp).Row 'Letzte Zeile in Spalte B Tabelle1 
     
        'CD_Docs 
        With .Cells(NeueZeile, 3).Resize(1, 29) 
            'Formel reinschreiben 
            .FormulaR1C1 = "=SUMPRODUCT((Daten!R2C1:R" & LR2 & "C1=RC2)*" _
                          & "(Daten!R2C11:R" & LR2 & "C11=R3C)*(Daten!R2C5:R" & LR2 & "C5))" 'Rückgabe aus Spalte 5 
             
            'Formeln in Werte umwandeln 
            .Value = .Value 
             
            'Nullen entfernen 
            .Replace What:="0", Replacement:="", LookAt:=xlWhole, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False 
             
        End With 
         
         
        'CD Seiten 
        With .Cells(NeueZeile, 33).Resize(1, 29) 
            'Formel reinschreiben 
            .FormulaR1C1 = "=SUMPRODUCT((Daten!R2C1:R" & LR2 & "C1=RC2)*" _
                          & "(Daten!R2C11:R" & LR2 & "C11=R3C)*(Daten!R2C6:R" & LR2 & "C6))" 'Rückgabe aus Spalte 6 
             
             
            'Formeln in Werte umwandeln 
            .Value = .Value 
             
            'Nullen entfernen 
            .Replace What:="0", Replacement:="", LookAt:=xlWhole, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False 
             
        End With 
         
         
        'CD_Sect 
        With .Cells(NeueZeile, 63).Resize(1, 29) 
            'Formel reinschreiben 
            .FormulaR1C1 = "=SUMPRODUCT((Daten!R2C1:R" & LR2 & "C1=RC2)*" _
                          & "(Daten!R2C11:R" & LR2 & "C11=R3C)*(Daten!R2C4:R" & LR2 & "C4))" 'Rückgabe aus Spalte 4 
             
             
            'Formeln in Werte umwandeln 
            .Value = .Value 
             
            'Nullen entfernen 
            .Replace What:="0", Replacement:="", LookAt:=xlWhole, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False 
             
        End With 
 
    End With 
End Sub 
 
LG UweD
Anzeige
AW: Import bestimmter Spalten in bestehende Tabelle
10.01.2020 12:44:10
Michael
Hallo Uwe,
sehr gut das klappt schon einmal super.
Ich habe nur bei der Statistikliste mit den vielen Spalten das Problem
dass er ab dem DocTYP "UM" den Wert der nächsten Spalte einfügt.
Und in Spalte AT mit der Bezeichnung Summe Doc. die Kummulierung rauschmeißt.
Kann man die Abfrage so einstellen das in Zelle AT4 die zu importierende Seite drin steht?
Hier noch einmal die breitere Statistik:
https://www.herber.de/bbs/user/134299.xlsm
Vielen Dank schon mal!
Gruß Michael
AW: Import bestimmter Spalten in bestehende Tabelle
10.01.2020 13:13:46
UweD
Habs nochmal geändert..
Modul1
Sub Dateneintrag() 
 
 
    Dim TB1, TB2, NeuesDatum As Long, NeueZeile As Integer, LR2 As Integer 
          
    Set TB1 = Sheets("Statistik") 
    Set TB2 = Sheets("Daten") 
        
    LR2 = TB2.Cells(TB2.Rows.Count, "A").End(xlUp).Row 'Letzte Zeile in Spalte A Tabelle2 
      
    NeuesDatum = TB2.Cells(1, 1) 
      
    With TB1 
          
        NeueZeile = WorksheetFunction.CountIf(.Columns(2), NeuesDatum) 'existiert das Datum schon? 
          
        If NeueZeile > 0 Then 
            NeueZeile = WorksheetFunction.Match(NeuesDatum, .Columns(2), 0)         'Zeile gefunden 
        Else 
            NeueZeile = WorksheetFunction.Match(NeuesDatum, .Columns(2), 1) + 1         'früheres Datum suchen 
              
            .Rows(NeueZeile).Insert xlDown  'Neue Zeile einfügen 
            .Rows(NeueZeile - 1).Copy .Rows(NeueZeile) 'vorherige Zeile kopieren 
            .Cells(NeueZeile, 2) = NeuesDatum 
        End If 
          
        'LR1 = .Cells(.Rows.Count, "B").End(xlUp).Row 'Letzte Zeile in Spalte B Tabelle1 
      
        'CD_Docs ab Spalte C =3 
        With .Cells(NeueZeile, 3).Resize(1, 43) 
            'Formel reinschreiben 
            .FormulaR1C1 = "=SUMPRODUCT((Daten!R2C1:R" & LR2 & "C1=RC2)*" _
                          & "(Daten!R2C11:R" & LR2 & "C11=R3C)*(Daten!R2C5:R" & LR2 & "C5))" 'Rückgabe aus Spalte 5 
              
            'Formeln in Werte umwandeln 
            .Value = .Value 
              
            'Nullen entfernen 
            .Replace What:="0", Replacement:="", LookAt:=xlWhole, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False 
              
        End With 
          
          
        'CD Seiten ab Spalte AU =47 
        With .Cells(NeueZeile, 47).Resize(1, 43) 
            'Formel reinschreiben 
            .FormulaR1C1 = "=SUMPRODUCT((Daten!R2C1:R" & LR2 & "C1=RC2)*" _
                          & "(Daten!R2C11:R" & LR2 & "C11=R3C)*(Daten!R2C6:R" & LR2 & "C6))" 'Rückgabe aus Spalte 6 
              
              
            'Formeln in Werte umwandeln 
            .Value = .Value 
              
            'Nullen entfernen 
            .Replace What:="0", Replacement:="", LookAt:=xlWhole, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False 
              
        End With 
          
          
        'CD_Sect ab Spalte AM =91 
        With .Cells(NeueZeile, 91).Resize(1, 43) 
            'Formel reinschreiben 
            .FormulaR1C1 = "=SUMPRODUCT((Daten!R2C1:R" & LR2 & "C1=RC2)*" _
                          & "(Daten!R2C11:R" & LR2 & "C11=R3C)*(Daten!R2C4:R" & LR2 & "C4))" 'Rückgabe aus Spalte 4 
              
              
            'Formeln in Werte umwandeln 
            .Value = .Value 
              
            'Nullen entfernen 
            .Replace What:="0", Replacement:="", LookAt:=xlWhole, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False 
              
        End With 
  
    End With 
End Sub 

LG UweD
Anzeige
Fast Perfekt.
13.01.2020 09:06:40
Michael
Hallo und einen guten Montag Morgen.
das Makro läuft jetzt super, vielen Dank! Aber mit den zu verarbeitenden Daten habe ich noch immer meine Probleme. Ziel ist es beide Dateien in ein Excel Blatt mit dem Namen Daten zu generieren.
folgende beiden Dateien sollen verwendet werden:
https://www.herber.de/bbs/user/134354.txt -> ist eine Datei mit der Endung log: 01.log
https://www.herber.de/bbs/user/134353.txt -> ist auch eine Datei mit der Endung log: 02.log
Ich würde beide Dateien jeweils in ein Excelblatt importieren also Blatt "01log" und Blatt "02log".
Dann müsste im Blatt 02log eine zusätzliche Spalte namens "Zeichen" eingefügt werden. Der Inhalt bleibt leer es geht nur darum das beide Blätter identische Spalten haben.
Als nächstes müsste bei beiden Blättern die letzte Zeile gelöscht werden (Zusammenfassung wird nicht gebraucht.
Mein größtes Problem ist, dass die Werte in den Spalten kummuliert sind.
Bedeutet das er den Einzelwert errechnen muß.
Beispiel:

10.01.2020;Stapelname   ;D800000001;CD_SECT.;CD_DOCS ;CDSEITEN;GES_SEIT;DELSEIT ;Belege  ; _
Zeichen  ;Dok.-Typ
10.01.2020;DIT0820009001;D800000001;00000688;00000003;00000044;00000000;00000000;00000044; _
00000080;GE
10.01.2020;DIT0820009002;D800000001;00000751;00000004;00000050;00000000;00000000;00000050; _
00000105;DD
10.01.2020;DIT0820009003;D800000001;00000816;00000012;00000062;00000000;00000001;00000060; _
00000243;LL
10.01.2020;DIT0820009004;D800000001;00000908;00000013;00000066;00000000;00000001;00000062; _
00000253;PE

In Spalte CD_DOCS in Zeile Dok.Typ GE steht 3
In Spalte CD_DOCS in Zeile Dok.Typ DD müsste nicht 4 stehen sondern 1
In Spalte CD_DOCS in Zeile Dok.Typ DD müsste nicht 12 stehen sondern 8
usw.
Das ganze müsste er auch für die Spalten CDSeiten und Belege machen.
Bevor das bisherige Makro gestartet werden kann müssten beide
Blätter in das Blatt Daten Zusammenfeführt werden.
Ich würde mich sehr über erneute Unterstützung freuen.
VG Michael
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige