PDA

Vollständige Version anzeigen : Ausgabe in Spalten statt in Zeilen ?


ml7477
18.04.2009, 00:06
Guten Abend zusammen,

nach stundenlangen Versuchen (und Diskussionen mit Freundin) gebe ich langsam auf...

Habe folgendes Makro zur Verfügung, um Informationen aus mehreren Dateien - innerhalb eines Ordners - in eine separate Datei - in einem anderen Ordner - zu transferieren... Leider werden hier die Werte nacheinander in Zeilen ausgegeben. Diese bräuchte ich - aufgrund der Maße - untereinander in Spalten.

Kann mir jemand einen Hinweis darauf geben, wie ich entsprechend den Code abändern muss?

Ich würde mich sehr über eine Antwort freuen

Lieben Gruß

Mario

Option Explicit

Sub DateienAuslesenSchleife()
't=171299
Dim sFile As String
Dim sPath As String
Dim ZeileQuelle As Integer
Dim ZeileZiel As Integer
Dim SpalteQuelle As Integer
Dim SpalteZiel As Integer
Dim WBQ As Workbook
Dim WBZ As Workbook

Application.ScreenUpdating = False
sPath = "h:\testsheet\" '<--- anpassen! Backslash nicht vergessen
sFile = Dir(sPath & "*.xls")
Set WBZ = Application.ActiveWorkbook
ZeileZiel = 1
Do While sFile <> ""
Workbooks.Open sPath & sFile
Set WBQ = Application.ActiveWorkbook
SpalteZiel = 2
WBZ.Sheets(1).Cells(ZeileZiel, 1).Value = sFile
For SpalteQuelle = 3 To 3 '<---spalte Quelldateien
For ZeileQuelle = 1 To 22 '<---zeilen Quelldateien max. 256 !!
WBZ.Sheets(1).Cells(ZeileZiel, SpalteZiel).Value = WBQ.Sheets(1).Cells(ZeileQuelle, SpalteQuelle).Value
SpalteZiel = SpalteZiel + 1
Next ZeileQuelle
Next SpalteQuelle
ZeileZiel = ZeileZiel + 1
WBQ.Close savechanges:=False
sFile = Dir()
Loop
Application.ScreenUpdating = True
End Sub

Uwe (:o)
18.04.2009, 00:22
Hi,
es ist schon zu spät für mich um mich da richtig reinzuarbeiten, aber versuche einfach mal die Zeile:
WBZ.Sheets(1).Cells(ZeileZiel, SpalteZiel).Value = WBQ.Sheets(1).Cells(ZeileQuelle, SpalteQuelle).Value
zu ersetzen durch:
WBZ.Sheets(1).Cells(ZeileZiel, SpalteZiel).Value = WBQ.Sheets(1).Cells(SpalteQuelle,ZeileQuelle).Value
Könnte hinhauen!?

ml7477
18.04.2009, 00:40
Huhu,

dank Dir vielmals - haut aber leider auch nicht hin....

Gruss nach Münster

BoskoBiati
18.04.2009, 06:16
Hallo Mario,

Wenn ich Deinen Code richtig interpretiere, dann machst Du Folgendes :
aus verschiedenen Tabellen die Werte aus der Spalte 3 in eine Datei packen und dort in einer Zeile nebeneinander ablegen.
Versuchs mal hiermit (ungetestet):
Application.ScreenUpdating = False
sPath = "h:\testsheet\" '<--- anpassen! Backslash nicht vergessen
sFile = Dir(sPath & "*.xls")
Set WBZ = Application.ActiveWorkbook
ZeileZiel = 1
Do Until sFile = ""
Workbooks.Open sPath & sFile
Set WBQ = Application.ActiveWorkbook
SpalteZiel = 2
WBZ.Sheets(1).Cells(1,SpalteZiel)= sFile 'Überschrift
For ZeileQuelle = 1 To 22 '<---zeilen Quelldateien max. 256 !! <--Wieso dann bis 22?
WBZ.Sheets(1).Cells(ZeileZiel, SpalteZiel)= WBQ.Sheets(1).Cells(ZeileQuelle, 3)
ZeileZiel = ZeileZiel + 1
Next
Zeile=1
SpalteZiel = SpalteZiel + 1
WBQ.Close savechanges:=False
sFile = Dir()
Loop
Application.ScreenUpdating = True
End Sub

Ich habe die Schleife "For SpalteQuelle = 3 To 3" rausgenommen, weil sie nicht sinnig ist.
Die Values habe ich weggelassen, weil man die eigentlich nicht braucht.
Wenn ich das richtig sehe, ist hier etwas nicht korrekt:
<Workbooks.Open sPath & sFile>, da in sFile der sPath schon enthalten ist:
<sPath = "h:\testsheet\"
sFile = Dir(sPath & "*.xls")>

ml7477
18.04.2009, 15:48
Hi BoskoBati,

wow - ist fast perfekt :- Gaaaanz lieben Dank an Dich.

Musste noch Kleinigkeiten anpassen, aber ich bin fast am gewünschten Ergebnis angelangt.
Deine Interpretation war (bezogen auf den Code richtig. Ziel: Ziehe Inhalte aus gleichen Spalten aus verschiedenen Dateien eines Dateiordners.

Untereinander steht jetzt alles *juhu* Was ich jetzt noch versuchen werde: Ziehe die Daten unterschiedlicher Spalten ebenfalls in un terschiedliche Spalten des konsolidierten Sheets. Ich denke, dass wird zu lösen sein.

Hier der Code incl. den Änderungen, die ich vorgenommen habe:

Anmerkungen:
- Ich habe die Schleife "For SpalteQuelle = 3 To 3" rausgenommen, weil sie nicht sinnig ist.
=> Doch ;-) definiert den Bereich in den Quelldateien. In dem Gesamtcode unten habe ich den auf die Werte 3 to 4 gesetzt, da hier alle gewünschten Daten in Spalten 3 und 4 stehen

- For ZeileQuelle = 1 To 22 '<---zeilen Quelldateien max. 256 !! <--Wieso dann bis 22?
=> Wert 22 deswegen, weil in Quelldaten nur einträge bis Zeile 22 vorhanden waren. Den Kommentar hatte ich zwischendruch gesetzt, als noch alles in Spalten ausgegeben wurde (wg. Limit Excel kleiner Version 2007)
- Ich habe dann noch zwei, drei Änderungen von Zeile in Spalte oder anderherum vorgenommen und paar Zeilen mit Werten auf Basis der "alten" Version angepasst


Hier das getestete Gesamtcode

Application.ScreenUpdating = False
sPath = "h:\testsheet\" '<--- anpassen! Backslash nicht vergessen
sFile = Dir(sPath & "*.xls")
Set WBZ = Application.ActiveWorkbook
ZeileZiel = 1
Do Until sFile = ""
Workbooks.Open sPath & sFile
Set WBQ = Application.ActiveWorkbook
SpalteZiel = 2
WBZ.Sheets(1).Cells(ZeileZiel, 1).Value = sFile 'Überschrift
For SpalteQuelle = 3 To 4 '<---spalte Quelldateien
For ZeileQuelle = 1 To 22 '<---zeilen Quelldateien max. 256 !! <--Wieso dann bis 22?
WBZ.Sheets(1).Cells(ZeileZiel, SpalteZiel).Value = WBQ.Sheets(1).Cells(ZeileQuelle, SpalteQuelle).Value
ZeileZiel = ZeileZiel + 1
Next ZeileQuelle
Next SpalteQuelle
SpalteZiel = SpalteZiel + 1
WBQ.Close savechanges:=False
sFile = Dir()
Loop
Application.ScreenUpdating = True
End Sub


Vielen lieben Dank nochmal!!!

Gruss Mario

BoskoBiati
18.04.2009, 16:18
Hallo Mario,

wenn Du nur 2 Spalten hast, aus denen die Daten kommen und die in 2 neue Spalten bringen willst, dann mach doch folgendes:
WBZ.Sheets(1).Cells(ZeileZiel, 3) = WBQ.Sheets(1).Cells(ZeileQuelle, 3)
WBZ.Sheets(1).Cells(ZeileZiel, 4) = WBQ.Sheets(1).Cells(ZeileQuelle, 4)

Dann kannst Du dies weglassen:
For SpalteQuelle = 3 To 4 '<---spalte Quelldateien
Next SpalteQuelle

ebenso wie Du das .Value weglassen kannst, kannst Du auch die Variable nach Next weglassen, VBA sucht sich das schon richtig aus.

ml7477
19.04.2009, 20:49
Hallo Edgar,

perfekt - hab jetzt das gewünschte Ergebnis :D

Vielen lieben Dank nochmal für Deine Hilfe

P.S.:
Hab das auch mit weiteren Spalten getestet - der o.g. Code mit der gewünschten Spaltenzahl kann beliebig als weitere Zeile dem Code beigefügt werden.