Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
844to848
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
844to848
844to848
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Spalte statt Zeile
08.02.2007 21:27:27
Lili
Hallo zusammen,
ich habe unten ein Code, der mir verschiedene Daten aus mehreren Dateien eines Verzeichnises herausliest. Soweit so gut, das funzt ganz anständig.
Nun möchte ich aber die Daten nicht untereinander auflisten, sondern nebeneinander, d.h. jeder datensatz in einer neuen spalte.
Ich habe probiert und probiert, aber irgendwie bringe ich es nicht hin und bin schon nahe am verzweifeln... kann mir jemand helfen?
Besten Dank an alle, die Geduld mit lernwilligen Anfängern haben!

Sub Frequenzenauslesen()
' Übernahme von Daten aus mehreren Blättern auf ein Tabellenblatt
Dim Blatt As Workbook, wb1 As Workbook, wks1 As Worksheet, Steuerung As Worksheet
Dim Pfad As String, Dateiname As String, wks2 As Worksheet, Reihe As Long
Dim Zeile1 As Long, Zeile As Long, Spalte As Integer
Set Steuerung = ThisWorkbook.Sheets("Tabelle1")
'Neue Arbeitsmappe anlegen
Set wb1 = Workbooks.Add
'Überzählige Blätter löschen
Application.DisplayAlerts = False
For i = wb1.Sheets.Count To 2 Step -1
wb1.Sheets(i).Delete
Next
Application.DisplayAlerts = True
Pfad = Steuerung.Range("B8").Value ' Verzeichnis der Blätter
Zeile1 = 1 '1. Zeile ab der Daten in neue Tabelle eingefügt werden sollen
Zeile = Zeile1
Set wks1 = wb1.Sheets(1)
Application.ScreenUpdating = False
Dateiname = Dir(Pfad & "\*.XLS")
Do Until Dateiname = ""
Set Blatt = Workbooks.Open(Pfad & "\" & Dateiname)
Application.StatusBar = "Datei " & Blatt.Name & " wird eingelesen"
' Daten im Blatt kopieren und in neues Blatt einfügen
Set wks2 = Blatt.Worksheets(1)
If Zeile = Zeile1 Then ' Spaltenbreiten formatieren bevor Daten aus 1. Blatt kopiert werden
For Spalte = 1 To 13 'Spalten A bis M
wks1.Cells(1, Spalte).ColumnWidth = wks2.Cells(1, Spalte).ColumnWidth
Next
End If
For Reihe = 28 To 56
If Application.WorksheetFunction.CountA(wks2.Range(wks2.Cells(Reihe, "X"), wks2.Cells(Reihe, "X"))) > 0 Then
wks2.Range(wks2.Cells(Reihe, "X"), wks2.Cells(Reihe, "X")).Copy wks1.Cells(Zeile, 1)
Zeile = Zeile + 1
End If
Next Reihe
Blatt.Close Savechanges:=False
Dateiname = Dir ' Nächste Datei
Loop
Application.StatusBar = False
Application.ScreenUpdating = False
'nun die anderen anhängen
ActiveWorkbook.SaveAs Filename:=Pfad & "\" & "ZUS" & [A2].Text & ".xls"
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalte statt Zeile
09.02.2007 01:31:19
Luc:-?
Hallo Lili,
was ist denn das...

If Application.WorksheetFunction.CountA(wks2.Range(wks2.Cells(Reihe, "X"), _
wks2.Cells(Reihe, "X"))) > 0 Then
wks2.Range(wks2.Cells(Reihe, "X"), wks2.Cells(Reihe, "X")).Copy wks1.Cells(Zeile, 1)
Zeile = Zeile + 1
End If 

1. Warum überträgst du die Breite von 13 Spalten der Quelle auf das Ziel, wenn doch nachher immer nur höchstens 1 oder gar keine Zelle übertragen wird?
2. Warum zählst du eine einzige Zelle? Da kommt immer 1 raus, außer die Zelle ist leer. Das kann man aber einfacher feststellen.
3. Deine Range-Angabe ist möglich, aber unnötig lang. wks2.Cells(Reihe, 24) reicht!
4. Aus den wks2.DS, die die Bedingung erfüllen, wird je ein einzelner Wert in die Zeilen der Spalte A von wks1 kopiert! Der soll aber, wenn ich dich richtig verstehe in verschiedene Spalten, nicht Zeilen!? Dazu musst du doch nur Zeilen- und Spaltenargument von Cells vertauschen!
5. Aus allen Blättern wdn die Daten stets in dieselbe Spalte von wks1, aber Folgezeilen, gespeichert. Daraus erhebt sich die Frage, ob dann in der nächsten Spalte wieder oben angefangen wdn soll oder bei Richtigkeit meiner Vermutung in 4. die bewussten Werte aus allen DS eines Blattes nebeneinander gespeichert wdn sollen und erst für das nächste Blatt eine neue Zeile angefangen wdn soll (das kommt bei deiner Frage nicht klar raus!)? In diesem Falle brauchst du einen 2.Zähler! Zeile wird dann schon unmittelbar nach der Do-Codezeile erhöht und an der Stelle von Zeile benötigst du Spalte. Dann bleibt Zeile in Cells so stehen und statt der 1 für die Spalte A schreibst du Spalte. Dann hast du pro Quellmappe eine Zeile (wodurch du den Zähler auch für die Wahl der Mappennamen verwenden könntest). Also unter den genannten Voraussetzungen...

Zeile = Zeile + 1
If wks2.Cells(Reihe, 24).Value <> "" Then
Spalte = Spalte + 1
wks2.Cells(Reihe, 24).Copy wks1.Cells(Zeile, Spalte)
End If
...

Wenn das so nicht richtig ist, einfach wieder Zeile + 1 und Spalte + 1 vertauschen. Übrigens wird das Copy auch nur benötigt, wenn die ganze Formatierung und evtl Formeln der Quellzelle mit übernommen wdn soll. Für die Übernahme von Werten reicht wks1.Cells(Zeile, Spalte).Value = wks2.Cells(Reihe, 24).Value.
Gruß Luc :-?
PS: Allerdings habe ich den Eindruck, dich nicht richtig zu verstehen... Und aus deiner Prozedur kann man nicht unbedingt entnehmen, was du wirklich willst. Deshalb höre ich lieber mit der Interpretation derselben auf... ;-) Ggf noch mal genau beschreiben, was du machen willst.
Anzeige
AW: Spalte statt Zeile
09.02.2007 18:47:16
Lili
Hey Luc,
danke vielmals für die ausführlichere Auseinandersetzung.
Ich wusste, dass in diesem Makro viel unnötiges drinsteht. Aber leider bin ich noch nicht fähig, dies jeweils genau zu erkennen und zu adaptieren. Für das sind meine VBA Kenntnisse noch zu gering. Deshalb greife ich meist auf funktioniernde Makros von Herber zurück, die ich je nachdem meinen Bedürfnisse anpasse, soweit das geht.
Wenn ich dann versuche, das Unnötige zu korrigieren, geht gar nichts mehr... deshalb halte ich die Veränderungen im kleinen Rahmen. Und bin sehr dankbar für Rückmeldungen wie deine.
Irgendwie habe ich noch zuwenig Kenntnisse, welche Befehle welche Informationen verlangen... Aber das kommt schon noch. Gibt es da evtl. eine Übersicht?
Auf jeden Fall geht mein Makro jetzt so wie ich will. Besten Dank!
Lg Lili
Anzeige

93 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige