Top-Themen

Aktuelle Themen (A bis Z)

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, 12250 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 ..
Ähnliche Inhalte
VB for Applications
Ordner mit mehreren csv. Dateien in eine Excel Datei zusammenfassen
gelöst Frage von Metal008VB for Applications23 Kommentare

Hallo, ich stehe vor folgendem Problem. Ich möchte enorme Datenmengen in eine Excel, oder auch Access Datei zusammenfassen. Ich ...

VB for Applications
VBA Excel Dateien zusammenfassen
Frage von cberndtVB for Applications3 Kommentare

Hi Leute. Ich bin dabei einen Ordner mit Excellisten zusammenzufassen. Im Ordner sind gut 600 einzelne Excel Dateien die ...

VB for Applications
Excel: Makro soll mehrer Dateien auslesen und in einer neuen Datei zusammenfassen
Frage von Michelle1995VB for Applications12 Kommentare

Hallo zusammen, ich suche ein Makro, mit dem ich aus mehreren Exceltabellen, die alle in einem Verzeichnis liegen, die ...

Microsoft Office
Excel - Zellen aus anderen Exceldateien auslesen
gelöst Frage von Cubic83Microsoft Office10 Kommentare

Hallo, ich stecke mal wieder bei einem Excel Problem fest und hoffe ihr könnt mir helfen. Ich habe in ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 1 TagWindows 104 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 TagInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server13 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...

Windows Server
GPO nur für bestimmte Computer
Frage von Leo-leWindows Server13 Kommentare

Hallo Forum, gern würde ich ein Robocopy script per Bat an eine GPO hängen. Wichtig wäre aber dort der ...

Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
Frage von HelloWorldBatch & Shell13 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...