Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

mehrere Exceldateien in eine Excel Datei zusammenfassen

Frage Entwicklung VB for Applications

Mitglied: konmaster

konmaster (Level 1) - Jetzt verbinden

22.06.2007, aktualisiert 21.05.2008, 11993 Aufrufe, 14 Kommentare

Hallo alle zusammen,

habe folgebdes Problem, versuche es kurz zusammenzufassen.

habe ca. 370 Excel Dateien die ich gerne zu einer machen will, um die später besser auswerten zu können.
Die Dateinamen sind wie folgt aufgebaut: 151~0006@284774.xls, 151~0007@284774.xls, 151~0008@284774.xls usw. alle Dateien sind gleich aufgebaut und von jeder datei bräuchte ich die Zelleninhalte von C54:C332 und, um die Datensätze wieder identifizieren zu können die Zelle B9, die über jeden Datesatz stehen soll. Die ich aber schon manuell eingetragen habe, sollen aber trotzdem mitgeschrieben werden, falls man Nachforschung betreiben möchte/muss.

das. Beispiel unten haut leider nicht ganz hin, da er die datensätze durcheinander kopiert und ich die später nicht mehr identifizieren kann.

Sub Makro1()


Dim Rohdaten(36) As String
Dim AnzahlDateien
Dim ZuÖffnendeDateien, W, Pfad, excelMesswerteDate

ZuÖffnendeDateien = Application.GetOpenFilename("MPT Meßwerte (*.xls), *.xls", _
, "MPT .xls-Datei auswählen", , True)

If IsArray(ZuÖffnendeDateien) Then
For Each W In ZuÖffnendeDateien
AnzahlDateien = AnzahlDateien + 1

For j = 1 To Len(W)
If Left(Right(W, j), 1) = Application.PathSeparator Then
Exit For
Else
End If

Next j

Rohdaten(AnzahlDateien) = Right(W, j - 1)
Pfad = Left(W, Len(W) - Len(Rohdaten(AnzahlDateien)))
Rohdaten(AnzahlDateien) = _
Left(Rohdaten(AnzahlDateien), Len(Rohdaten(AnzahlDateien)) - 4)

Next W

Else

End If

ThisWorkbook.Activate
Sheets.Add
ActiveSheet.Name = "Tabelle1"


For k = 1 To AnzahlDateien


excelMesswerteDatei = Pfad & Rohdaten(k) & ".xls"


Workbooks.OpenText Filename:= _
excelMesswerteDatei _
, Origin:=xlWindows, StartRow:=54, DataType:=xlDelimited, TextQualifier _
:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:= _
False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array _
(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8 _
, 1)), DecimalSeparator:=".", ThousandsSeparator:=" ", TrailingMinusNumbers:=False



Range("C54:C332").Select
Selection.Copy
ThisWorkbook.Activate
Sheets("Tabelle1").Select
Cells(2, k + 1).Select
ActiveSheet.Paste


Next k
End Sub
1771ae4bd91e5e589324bdb8d4fcbc45-vorlage - Klicke auf das Bild, um es zu vergrößern

Für eure Unterstützung wäre ich sehr dankbar...
Mitglied: stplaner
22.06.2007 um 09:36 Uhr
nur ein kleiner Hinweis:

Excel kann nur ca 65000 datensätze verwalten und du kommst über 100000 zeilen

ist nur ein Hinweis mehr nicht
Bitte warten ..
Mitglied: konmaster
22.06.2007 um 09:44 Uhr
nur ein kleiner Hinweis:

Excel kann nur ca 65000 datensätze
verwalten und du kommst über 100000
zeilen

ist nur ein Hinweis mehr nicht

ich wolte auch nur 230 Spalten in Anspruch nehmen...
Bitte warten ..
Mitglied: bastla
22.06.2007 um 10:10 Uhr
Hallo konmaster!

Bessere Antwort wäre gewesen (falls die verwendete Office-Version nicht der Geheimhaltung unterliegt): "Habe Excel 2007 und daher mit der Zeilenanzahl kein Problem ..."

Ansonsten hast Du je Excel-Datei 280 Werte, welche Du nicht in einer Zeile unterbringen kannst, bzw, wenn sie in Spalten stehen sollen und "nur 230 Spalten in Anspruch nehmen..." so zu interpretieren ist, dass nur 230 der 370 Dateien verwendet werden sollen, dann war Deine obige Problembeschreibung irreführend.

Grüße
bastla
Bitte warten ..
Mitglied: konmaster
22.06.2007 um 10:36 Uhr
Hallo konmaster!

Bessere Antwort wäre gewesen (falls die
verwendete Office-Version nicht der
Geheimhaltung unterliegt): "Habe Excel
2007 und daher mit der Zeilenanzahl kein
Problem ..."

Ansonsten hast Du je Excel-Datei 280 Werte,
welche Du nicht in einer Zeile unterbringen
kannst, bzw, wenn sie in Spalten stehen
sollen und " ;nur 230 Spalten in
Anspruch nehmen...
" so zu
interpretieren ist, dass nur 230 der 370
Dateien verwendet werden sollen, dann war
Deine obige Problembeschreibung
irreführend.

Grüße
bastla


habe Excel 2002 SP3 und ich würde auch mit 230 oder max 255 auch klarkommen... also zeilem anzahl ist nicht mein problem, mein problem ist das oben steh. makro nicht so richtig funktioniert wie ich mir das vorstelle d.h. ich kann max 20 datensätze auslesen, dann muss ich die prozedur wiederholen, da das prog ab gewis. an datensätzen abstürzt/fehlermeldung...

das 2te problem ist die daten die überschrieben werden durcheinander sortiert sind, so dass die später nicht mehr identifizieren kann.

eins muss ich noch anmerken, dass ich absoluter vba anfänger bin, den makro habe ich von ein kollegen bekommen der nicht mehr erreichbar ist und ich brauche die auswertung dringend.

deswegen habe ich hier im forum um unterstützung gebeten...

danke im voraus

Gruß konmaster
Bitte warten ..
Mitglied: bastla
22.06.2007 um 10:46 Uhr
Hallo konmaster!

Also konkret:
Von den existierenden ca 370 Dateien, benannt nach dem Schema " ;151~@284774.xls" sollen aus etwa 230 (manuell auszuwählenden?) Dateien die Zellen B9 sowie C54:C332 der ersten Tabelle in eine neue Tabelle als Spalten ab Zeile 1 eingefügt werden - richtig?

Grüße
bastla
Bitte warten ..
Mitglied: konmaster
22.06.2007 um 11:06 Uhr
Hallo konmaster!

Also konkret:
Von den existierenden ca 370 Dateien,
benannt nach dem Schema
" ;151~@284774.xls" sollen
aus etwa 230 (manuell auszuwählenden?)
Dateien die Zellen B9 sowie C54:C332 der
ersten Tabelle in eine neue Tabelle als
Spalten ab Zeile 1 eingefügt werden -
richtig?

Grüße
bastla


1.genau es sind 370 dateien die nach dem schema(rechts) benannt sind -->151~@284774.xls

2. auf jeden fall wähle ich die 230 Dateien aus, manuel oder automatisch völlig egal...

3. dann sollen aus den 370 dateien die zellen C54:C332 und zur identiviezierung B9 ausgelesen werden und in ein blatt/tabelle übertragen werden... Beispiel für ein datensatz (B9-->007 datensatz 007 und C54:C332--> die zugehörigen werte)

ich hoffe, dass es einigermassen verständlich ist... ich weiss ich bin ein erklärbär. (sorry)

danke für die unterstützung
Bitte warten ..
Mitglied: bastla
22.06.2007 um 11:09 Uhr
... bzw, wenn es Dir grundsätzlich möglich war, mit Deinem Code Daten zu erhalten, vielleicht zwischendurch ein Versuch: Ändere die Zeile
01.
Dim Rohdaten(36) As String
auf
01.
Dim Rohdaten(250) As String
und versuch es dann nochmals.

Grüße
bastla

[Edit] Hatte Deinen vorigen Kommentar noch nicht gesehen ... [/Edit]
Bitte warten ..
Mitglied: konmaster
22.06.2007 um 11:42 Uhr
... bzw, wenn es Dir grundsätzlich
möglich war, mit Deinem Code Daten zu
erhalten, vielleicht zwischendurch ein
Versuch: Ändere die Zeile
01.
Dim Rohdaten(36) As String 
02.
> 
auf
01.
Dim Rohdaten(250) As String 
02.
> 
und versuch es dann nochmals.

Grüße
bastla

[Edit] Hatte Deinen vorigen Kommentar noch
nicht gesehen ... [/Edit]

das hab ich geändert, jetzt kann ich schon mal alle dateien auslesen, aber ich brauche die spalten überschrift, um die datensätze identivizieren. sprich Zelle: B9 die aus jedem Datensatz ausgelesen wird und für jede einzelne spalte als überschrift in einer zusammen gefassten tabelle steht...
Bitte warten ..
Mitglied: bastla
22.06.2007 um 11:56 Uhr
Hallo konmaster!

Ergänze den folgenden Code-Block (alt)
01.
Range("C54:C332").Select 
02.
Selection.Copy 
03.
ThisWorkbook.Activate 
04.
Sheets("Tabelle1").Select 
05.
Cells(2, k + 1).Select 
06.
ActiveSheet.Paste
zu dieser Fassung:
01.
<b>ID = Range("B9").Value</b> 
02.
Range("C54:C332").Select 
03.
Selection.Copy 
04.
ThisWorkbook.Activate 
05.
Sheets("Tabelle1").Select 
06.
Cells(2, k + 1).Select 
07.
ActiveSheet.Paste 
08.
<b>Cells(1, k + 1).Value = ID</b>
Zur Sicherheit kannst Du noch in einer der "Dim"-Zeilen oben am Ende ", ID" anfügen.
In der Zwischenzeit habe ich noch eine Alternativ-Lösung versucht:
Kopiere alle (230) Dateien, aus denen Daten übernommen werden sollen, in einen neuen Ordner, zB "D:\Datensammlung". Erstelle eine neue Exceldatei nicht im selben Ordner und füge dort das folgende VBA-Programm in ein Modul ein:
01.
Sub Zusammenfassen() 
02.
 
03.
Const sSourcePath = "D:\Datensammlung" 
04.
 
05.
Set wbGes = ActiveWorkbook 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
 
08.
C = 2 '(ab Spalte B in der Sammeltabelle eintragen) 
09.
 
10.
For Each oFile In fso.GetFolder(sSourcePath).Files 
11.
    'nur .xls-Dateien bearbeiten 
12.
    If LCase(Right(oFile.Name, 4)) = ".xls" Then 
13.
        Application.Workbooks.Open (oFile.Path) 
14.
        ID = ActiveWorkbook.Worksheets(1).Range("B9").Value 
15.
        aTemp = ActiveWorkbook.Worksheets(1).Range("C54:C332") 
16.
        ActiveWorkbook.Close 
17.
        wbGes.Worksheets(1).Cells(1, C).Value = ID 
18.
        wbGes.Worksheets(1).Range(Cells(2, C), _ 
19.
            Cells(2 + UBound(aTemp) - 1, C)) = aTemp 
20.
        C = C + 1 
21.
    End If 
22.
Next 'Datei 
23.
wbGes.Worksheets(1).Activate 
24.
'Gesamt-Datei speichern 
25.
wbGes.Save 
26.
MsgBox "Fertig." 
27.
End Sub
Speichere die Datei und führe den Code aus (wird vermutlich etwas dauern ...). Eventuell musst Du die Formatierungen in der Sammeldatei anpassen, zB per "Format übertragen" (Pinsel-Symbol) aus einer Originaldatei.

Grüße
bastla

P.S.: Habe momentan nicht mehr Zeit, daher dieser Lösungsansatz "auf Verdacht" ...
Bitte warten ..
Mitglied: konmaster
22.06.2007 um 13:18 Uhr
ich danke dir, habe jetzt auch keine zeit mehr auszubrobieren...
werd mich noch melden obs funktioniert hat...
Bitte warten ..
Mitglied: konmaster
23.06.2007 um 22:13 Uhr
alles klar, hat wunderbar funktioniert...

eine frage der schönheit, ist es möglich vor der datensatz nummer ein "Y" einzufügen, dass es z.b. so aussieht Y6, Y7, Y8... usw...


noch ma vielen dank für die unterstützung....
Bitte warten ..
Mitglied: bastla
24.06.2007 um 09:10 Uhr
Hallo konmaster!

Ersetze die letzte Zeile (wenn Du Dein Script verwendest) durch
01.
Cells(1, k + 1).Value = "Y" & CStr(ID)
In der Alternativvariante müsstest Du folgende Änderung vornehmen:
01.
wbGes.Worksheets(1).Cells(1, C).Value = <b>"Y" & CStr(ID)</b>
Grüße
bastla
Bitte warten ..
Mitglied: bolshi
21.05.2008 um 16:26 Uhr
Hallo,
ich versuche mich auch grad an einer Vielzahl von Dateien mit unterschiedlichem range. Bei der größten Datei reicht der range von A1 über vier Spalten und 2042 Zeilen.


[code]
ID = ActiveWorkbook.Worksheets(1).Range("A1:Cells[2042]", "[4]").Value
[/code]

Die ursprüngliche Codezeilen sehen so aus:

[code]
ID = ActiveWorkbook.Worksheets(1).Range("C54:C332").Value
aTemp = ActiveWorkbook.Worksheets(1).Range("C54:C332")
[/code]

Der Debugger schllägt in folgender Zeile Alarm:

[code]
wbGes.Worksheets(1).Range ("A1:Cells[3000]", "[4]"), _
Cells(2 + UBound(aTemp) - 1, C) = aTemp
[/code]

Wie definiere ich range richtig?

Wird die Formatierung aus der alten Datei im Normalfall mit übernommen?

bolshi
Bitte warten ..
Mitglied: bastla
21.05.2008 um 23:03 Uhr
Hallo bolshi!

Wie definiere ich range richtig?
Wenn Du offensichtlich bereits die gewünschte Zeilen-/Spaltenanzahl kennst, kannst Du das etwa so schreiben:
01.
aTemp = ActiveWorkbook.Worksheets(1).Range(Cells(1, 1), Cells(2042, 4)).Value
Damit wird ein Array mit den Werten des Bereichs erstellt, was Deine nächste Frage ("Wird die Formatierung aus der alten Datei im Normalfall mit übernommen?") auch gleich beantworten sollte ...
Im übrigen fände ich es sinnvoll, Dein Vorhaben in einem neuen Beitrag darzustellen (nicht zuletzt auch, da sich außer uns beiden wohl kaum jemand in diesen Thread hier verirren dürfte) ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...