Anzeige
Archiv - Navigation
1164to1168
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

Selektion

Selektion
Horst
Hallo Excel-Freaks,
folgendes VBA-Problem:
In einem Registerblatt soll der aus jeweils drei Zeilen bestehende Bereich “A4:Y6“, “A11:Y13“, “A18:Y20“, “A25:Y27“, “A32:Y34“, … usw. untereinander kopiert und anschließend transponiert werden.
Zusammenfassend sollen also die aus je drei Zeilen bestehenden Werte des Bereichs “A:Y“ für jede fünfte Zeile selektiert werden.
Mit besten Dank für Eure Vorschläge
Horst
Daten umgruppieren
02.07.2010 20:28:11
Erich
Hallo Horst,
du hast nicht geschrieben, wohin die Werte ausgegeben werden sollen.
Hier werden die Werte - bereits transponiert - ab A100 (bis Zeile 124) ausgegeben:

Option Explicit
Sub ZusTransp()
Dim lngL As Long, lngM As Long, qq As Long
Dim zz As Long, ss As Long, arrE
lngL = Cells(Rows.Count, 1).End(xlUp).Row
lngM = 3 * Fix((lngL + 1) / 7)
If lngM > Columns.Count Then
MsgBox "Das würden zu viele Spalten", _
vbCritical, "Abbruch"
Else
ReDim arrE(1 To 25, 1 To lngM)
zz = 1
For qq = 4 To lngL Step 7
For ss = 1 To 25
arrE(ss, zz) = Cells(qq, ss)
arrE(ss, zz + 1) = Cells(qq + 1, ss)
arrE(ss, zz + 2) = Cells(qq + 2, ss)
Next ss
zz = zz + 3
Next qq
'hier Ausgabe ab A100
Cells(100, 1).Resize(25, lngM) = arrE
End If
End Sub
Hilft das?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Daten umgruppieren
02.07.2010 22:25:29
Horst
Hallo Erich,
bekomme nur die Fehlermeldung "das würden zu viele Spalten". Hab' das file mal hochgeladen:
https://www.herber.de/bbs/user/70397.xls
Die Ausgabe der transponierten Matrix soll in einem neuen Registerblatt erfolgen.
Beste Grüße nach Kamp-Lintfort!
Daten umgruppieren - Beispiel
03.07.2010 07:45:20
Erich
Hallo Horst,
bei mir läuft das Makro durch. Hat deine Originaltabelle mehr Zeilen?
Wenn ich die Ausgabe auf ein neues Blatt umstelle, kommt für die Beispielmappe das hier raus:
https://www.herber.de/bbs/user/70400.xls
Entspricht das Ergebnis im Prinzip deinen Erwartungen oder habe ich deine Beschreibung falsch interpretiert?
Hier das umgestellte Makro:

Option Explicit
Sub ZusTransp()
Dim lngL As Long, lngM As Long, qq As Long
Dim zz As Long, ss As Long, arrE
lngL = Cells(Rows.Count, 1).End(xlUp).Row
lngM = 3 * Fix((lngL + 1) / 7)
If lngM > Columns.Count Then
MsgBox "Das würden zu viele Spalten", _
vbCritical, "Abbruch"
Else
ReDim arrE(1 To 25, 1 To lngM)
zz = 1
For qq = 4 To lngL Step 7
For ss = 1 To 25
arrE(ss, zz) = Cells(qq, ss)
arrE(ss, zz + 1) = Cells(qq + 1, ss)
arrE(ss, zz + 2) = Cells(qq + 2, ss)
Next ss
zz = zz + 3
Next qq
' Ausgabe in neues Blatt ab A1
Worksheets.Add
Cells.NumberFormat = "@"
Cells(1, 1).Resize(25, lngM) = arrE
End If
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Daten umgruppieren - Beispiel
03.07.2010 12:00:59
Horst
Besten Dank Erich! Im Prinzip das, was ich gesucht habe, nur sollten die Zeitreihen untereinander stehen (wie bei der Variante von Tino).
Daten umgruppieren
03.07.2010 12:58:07
Erich
Hallo Horst,
und hier meine Variante, etwas umgeschrieben:

Option Explicit
Sub ZusTransp2()
Dim lngL As Long, lngM As Long, qq As Long
Dim zz As Long, ss As Long, arrE
With Worksheets(1)
lngL = .Cells(.Rows.Count, 1).End(xlUp).Row
lngM = 24 * Fix((lngL + 1) / 7)
ReDim arrE(1 To lngM, 1 To 3)
For qq = 3 To lngL - 1 Step 7
For ss = 2 To 25
zz = zz + 1
arrE(zz, 1) = .Cells(qq, ss)
arrE(zz, 2) = .Cells(qq + 1, ss)
arrE(zz, 3) = .Cells(qq + 2, ss)
Next ss
Next qq
' Ausgabe in neues Blatt ab A1
Worksheets.Add
Columns(3).NumberFormat = "@"
Cells(1, 1).Resize(, 3) = _
Application.Transpose(.Cells(3, 1).Resize(3))
Cells(2, 1).Resize(lngM, 3) = arrE
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort und: Schönes Restwochenende!
Anzeige
AW: hier meine Version...
03.07.2010 12:06:46
Horst
Besten Dank, Tino!
Wie müsste ich deinen Code verändern, dass eine durchgehende Zeitreihe erzeugt wird (also ohne Leerzeilen dazwischen)?
Beste Grüße, Horst
AW: hier meine Version...
03.07.2010 12:17:19
Tino
Hallo,
mach einfach das + 1 in der Zeile
lngAbstand = lngAbstand + rngTmp.Columns.Count + 1
raus.
Gruß Tino
AW: hier meine Version...
03.07.2010 12:33:52
Horst
Danke, haut hin. Eine Sache ist mir noch aufgefallen:
In Zeile 2, 9, 16, 23, usw. steht jeweils das Datum drin. Kann der VBA-Code in Spalte A aus diesen Zeilen jeweils das Datum auslesen? Dann würde in Spalte A das Datum stehen, zb.: "01-01-2009", in Spalte B, C und D die Werte wie gehabt (Heure, Quantité, Prix).
Besten Grüße!
Horst
Anzeige
AW: nochmal durchgelesen, Datum als Zusatzspalte
03.07.2010 14:22:11
Horst
Besten Dank, Tino! Einfach perfekt.
Hoffe, du bleibst dem Forum noch recht lange erhalten! ;-))
Gruß, Horst
weitere Variante mit Datum
03.07.2010 16:15:10
Erich
Hallo Horst,
hier noch eine Variante, auch mit dem Datum in Spalte A.
https://www.herber.de/bbs/user/70408.xls
"Regex" habe ich (leicht verändert) von Tino übernommen - finde ich schön!
Wesentlich finde ich noch, dass die Daten beim Öffnen der Textdatei als Texte eingelesen werden.
Sonst werden etliche Euros automatisch zu Datümern.
Als Alternative habe ich auch die Uhrzeit mal als Excel-Uhrzeit reingestellt.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: weitere Variante mit Datum
04.07.2010 12:11:02
Horst
Hallo Erich!
Deine Lösung ist sehr gut, zumal Fehlerwerte (Datumswerte in der Preisspalte) automatisch erkannt und durch Null ersetzt werden.
Besten Dank, schöne Grüße nach Kamp-Lintfort und bis zum nächsten Mal! ;-))
Horst

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige