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

Spalten untereinander kopieren

Spalten untereinander kopieren
17.11.2015 10:47:01
Sav
Hallo liebe Community,
ich habe ein Problem bei dem ich nicht weiter komme.
Ich habe ca. 80 Sheets (Sheet 1,....80) in dem jeweils die Zeilen 1 bis 200 in Spalte A gleich befüllt sind mit Kriteriennamen.
In den Spalten B bis z.B. XXX stehen im Kopf der Spalte ein Datum mit einem jeweiligen Wert für das Kriterium pro Tag. Diese Struktur ist jedoch ungeeignet wenn ich mit einer Pivottabelle mit den Daten arbeiten möchte.
Ausgangs- und Zielsituation:
Userbild
Kann mir jemand sagen, wie ich die Datenstruktur umbauen kann um auf die Form in der Zielsituation zu gelangen?
Meine Idee war es, dass ich auswählen kann aus welchen der Sheets, die alle die gleich Datenstruktur besitzen, ich die Werte kopieren möchte und die Werte in ein "Azuswertungssheet" kopiert werden. Über die Daten dieses Sheets "Auswertungssheets" ist eine Pivottabelle/tabel gelegt welches nach abgeschlossenen Kopierens der Daten die Pivottabelle aktuallisiert.
Die Anzahl der Spalten kann ggf. über 1000 betragen und hat keinen Maximalwert.
Das Problem ist zwar nicht neu und ich konnte viele Beiträge dazu finden, jedoch ist es mir nicht gelungen einen der Vorschläge auf mein Problem zu adaptieren. Es wäre klasse wenn mir jemand weiterhelfen könnte!
Viele Grüße
sav

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
hier eine VBA-Variante
17.11.2015 11:21:45
Matthias
Hallo
Es gibt da verschiedene Varianten
Hier mal nur für Deinen gezeigten Tabellenausschnitt
Bei größeren Datenmengen ist das natürlich nicht die optimale Lösung.
Soll auch hier nur als Ansatz dienen.
https://www.herber.de/bbs/user/101586.xlsm
Gruß Matthias

VBA Variante
17.11.2015 11:29:17
Tino
Hallo,
hier ein Beispiel mit VBA, Ausgabe erfolgt in einer neuen Tabelle
Für den Datenbereich habe ich mich an deinem Bild orientiert.
Ab A2 bis zur letzten in Zelle in Spalte A und bis zu letzten in Zelle in Zeile 2.
Evtl. müsstest Du die Tabelle und den Zellbereich anpassen!
Sub Beispiel()
Dim ArData, ArNew()
Dim n&, nn&, nnn&


With Tabelle1 'Ausgangstabelle evtl. anpassen 
    'Datenbereich evtl. anpassen 
    'Datenbereich hier ab A2 
    'bis zur letzten Zelle in Spalte A 
    'bis zu letzten Zelle in Zeile 1 
    With .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)).EntireRow
        If .Rows(.Rows.Count).Row < 3 Then Exit Sub 'keine Daten 
        With .Columns(1).Resize(, .Cells(2, .Columns.Count).End(xlToLeft).Column)
            If .Columns(.Columns.Count).Column = 1 Then Exit Sub 'keine Daten 
            ArData = .Value
        End With
    End With
End With
Redim ArNew(1 To Ubound(ArData) * Ubound(ArData, 2), 1 To 3)

nnn = 1
ArNew(nnn, 1) = "Kriterium"
ArNew(nnn, 2) = "Wert"
ArNew(nnn, 3) = "Datum"
For nn = 2 To Ubound(ArData, 2)
    If ArData(1, nn) <> "" Then
        For n = 2 To Ubound(ArData)
            If ArData(n, nn) <> "" Then
                nnn = nnn + 1
                ArNew(nnn, 1) = ArData(n, 1)
                ArNew(nnn, 2) = ArData(n, nn)
                ArNew(nnn, 3) = ArData(1, nn)
            End If
        Next n
    End If
Next nn

'Ausgabe in neue Tabelle 
With ThisWorkbook
    With .Worksheets.Add(After:=.Sheets(.Sheets.Count))
        With .Cells(1, 1).Resize(Ubound(ArNew), Ubound(ArNew, 2))
            .Value = ArNew
            .Columns(3).NumberFormat = "dd.mm.yyyy"
            .Rows(1).Font.Bold = True
            .Rows(1).HorizontalAlignment = xlCenter
            .EntireColumn.AutoFit
        End With
    End With
End With

End Sub
Gruß Tino

Anzeige
AW: VBA Variante
17.11.2015 14:02:26
Sav
Hallo Matthias, hallo Tino!
Vielen Dank für Eure Codes!
Beide funktionieren gut wobei Tinos schneller ist! Ich würde gerne mit Tinos weiterarbeiten, habe jedoch direkt zwei Probleme:
1.
Name Tabelle1 soll über eine Variable bzw. über ein Dropdownmenü auswählbar sein. Jedoch bekomme ich dort jedes mal einen Fehler da ich vermutlich den falschen typ ausgewählt habe.
Dim Tabelle As String
Tabelle = Sheets("tabelle1").Range("b1")
Wie müsste ich die Variable richtig deklarieren?
2.
Die Werte sollen in immer das selbe Tabellenblatt und den selben Bereich geschrieben werden (z.B. Sheet :"Auswertungstabelle".
With ThisWorkbook
With .Worksheets.Add(After:=.Sheets(.Sheets.Count))
With .Cells(1, 1).Resize(UBound(ArNew), UBound(ArNew, 2))
Wie müsste dieser Bereich umgeschrieben werden?
PS: Leider verstehe ich den Code von Tino nicht, ich bleibe aber dran und Knobel weiter wie er funktioniert.

Anzeige
AW: VBA Variante
17.11.2015 14:07:07
Tino
Hallo,
kannst du eine Beispiel Datei hochladen?
Gruß Tino

AW: VBA Variante
17.11.2015 17:23:10
Sav
Hallo Tino,
hier die Datei! https://www.herber.de/bbs/user/101595.xlsm
Meine Datenbasis befindet sich in Tabelle1 und die neu angeordnete Datenbasis und bereits angepasste Pivottabels/Charts in Sheet Auswertungstabelle.
Den Code habe ich nicht angepasst bzw. meine Änderungen werden ignoriert.

AW: VBA Variante
18.11.2015 22:17:04
Sav
Hallo Tino,
klappt super, Danke!
in einem Fall hatte ich jetzt nur das Problem, dass in einer Spalte ein #DIV/0! aufgetreten ist und der Wert von den Long-Variablen nicht aufgenommen werden kann und Fehler 13 kam.
Ich hab versucht die Variablen als String zu definieren, jedoch hat dies nicht geklappt.:/
Wie kann ich auch #DIV/0! mit übernehmen?

AW: VBA Variante
20.11.2015 08:57:42
Sav
Hallo,
hat irgendjemand eine Idee wie ich die Variablen deklarieren könnte?

AW: VBA Variante
20.11.2015 10:27:06
Tino
Hallo,
versuch mal und ersetze im Code die Schleife durch diesen.
For nn = 2 To Ubound(ArData, 2)
    If ArData(1, nn) <> "" Then
        For n = 2 To Ubound(ArData)
            If Not IsError(ArData(n, nn)) Then
                If ArData(n, nn) <> "" Then
                    nnn = nnn + 1
                    ArNew(nnn, 1) = ArData(n, 1)
                    ArNew(nnn, 2) = ArData(n, nn)
                    ArNew(nnn, 3) = ArData(1, nn)
                    ArNew(nnn, 4) = "=WEEKNUM(RC[-1])" 'KW 
                    ArNew(nnn, 5) = "=MONTH(RC[-2])" 'Monat 
                    ArNew(nnn, 6) = "=WEEKDAY(RC[-3])" 'Tag 
                End If
            End If
        Next n
    End If
Next nn
Gruß Tino
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige