online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon vormau vom 18.06.2021, 15:23 Options

Mehrere Spalten aus versch. excel files in ein file zusammenkopieren

Hallo Forum

Folgendes Problem:

Habe einen Ordner mit mehreren Unterordnern. In diesen Unterordnern(Monat) befinden sich Excel files mit Rohdaten(Tagesdaten) mit folgendem Format: JJ.MM.TT_1.csv, JJ.MM.TT_2, JJ.MM.TT_3 usw. d.h. jeder Tag hat 7 files.
Von jedem dieser files möchte ich bestimmte Spalten( nicht immer dieselben ) kopieren und in ein neues Tagesfile in einem neuen Ordner schreiben.
Da dies für ein ganzes Jahr händisch etwas mühsam ist, dachte ich an ein makro-mit dem Makrorecordern hab ichs schon probiert, funktioniert aber nicht...
Da meine Programmierversuche auch nicht gklappt haben, bitte ich das Forum um Hilfe

Danke

Franz


Antwort schreiben

Antwort 1 von nostalgiker6 vom 18.06.2021, 16:52 Options

Ich kann Dir keine Lösung anbieten - aber schon mal die Frage stellen, die jeder, der Dir helfen will, stellen MUSS:
Wenn es nicht immer die gleichen Spalten sind - woran erkannt man dann, WELCHE es sein sollen?

Antwort 2 von vormau vom 18.06.2021, 19:45 Options

Hallo nostalgiker6

hab mich evtl. falsch ausgedrückt:
In jedem der 7 files pro Tag sollen andere Spalten kopiert werden z.B. file JJ.MM.TT_1 die Spalten A&B, in JJ.MM.TT_2 die Spalten E-H usw.
Natürlich bleiben die zu kopierenden Spalten aber für jeden Tag dieselben

Gruß Franz

Antwort 3 von nostalgiker6 vom 18.06.2021, 20:10 Options

Weitere Grundsatzfrage:
Wie sollen denn die Spalten in der neuen Tabelle angeordnet sein:
Untereinander, nebeneinander, teils-teils?

Antwort 4 von nostalgiker6 vom 18.06.2021, 20:11 Options

Und: Wie verhält es sich mit der Anzahl der Zeilen? Variiert die, oder ist sie immer gleich? Oder Je Tag gleich?

Antwort 5 von vormau vom 19.06.2021, 06:28 Options

Hallo nostalgiker6

Die kopierten Spalten sollen in der neuen Tabelle nebeneinander angeordnet sein
Die Anzahl der Zeilen ist in jedem Tagesfile gleich und bleibt für alle Tage konstant

Danke

Gruß Franz

Antwort 6 von kicia vom 19.06.2021, 09:36 Options

ich weiss nicht, ob das mit excel makros geht, aber ich würde es sowieso mit windows scripting machen.
Folgendes script als zB. "excelcopy.js" abspeichern, (natürlich die fileNames anpassen,) rechtsklick auf die js datei und "öffnen".

Dieses Script kopiert als beispiel einfach nur die zellen der eingangs datei in eine neue datei:

var fileNames = {
	path: "C:/temp",
	infile: "excelfile.xls",
	outfile: "excelfile2.xls"
};

WScript.Echo( openExcelFile( fileNames.path + "/" + fileNames.infile ) );

function openExcelFile( fileName )
{
	var excelApp = new ActiveXObject("Excel.Application");
	var wbin       = excelApp.Workbooks.Open( fileName );
	var wbout      = excelApp.Workbooks.Add();
	var currentRange, currentCell, x, y;
	var out = new Array();
	if( wbin.Sheets.Count > 0 )
	{
		currentRange = wbin.Sheets(1).UsedRange;
	
		for ( y = 0; y < currentRange.Rows.Count; y++ )
		{
			for ( x = 0; x < currentRange.Columns.Count; x++ )
			{
				currentCell = currentRange.Cells( y + 1,  x + 1 ).Text;
				out.push( currentCell );
				wbout.ActiveSheet.Cells( y + 1,  x + 1 ).Value = currentCell
			}
		}
	}
	wbout.SaveAs( fileNames.path + "/" + fileNames.outfile );

	//wbin.Close();
	//wbout.Close();
	excelApp.Quit();
	return out.join(" | ");
}

Antwort 7 von nostalgiker6 vom 19.06.2021, 12:32 Options

Zu #5:
Wenn es so ist. dann würde ICH zunächst einmal nicht kopieren, sondern die Inhalte mit "='[file.xls]tabelle'!A1" etc. "herüberholen. (A1 hier als Platzhalter für alle Möglichkeiten, file und tabelle ebenso.)
Das lässt sich durch Eingabe von "=" und anschliessendes Anclicken der gewünschten Zelle in der gewünschten Datei leicht realisieren.
Aus mir unverständlichen Gründen schreibt mein Excel2003 allerdings statt "A1" "$a$1" - die Dollarzeichen müssen natürlich entfernt werden, ehe die einmal erstellte Formel beliebig nach rechts und unten gezogen werden kann.
Ehe irgendwann die Originaldateien gelöscht oder verschoben werden, muss man allerdings das ganze Blatt kopieren und mit "Inhalte einfügen - Werte" die Formeln durch die Werte ersetzen.

Antwort 8 von vormau vom 22.06.2021, 15:28 Options

Hallo nostalgiker6
Hallo kicia

Danke für eure Antworten
Leider bin ich ziemlicher Programmierlaie und daher etwas überfordert...

Gruß Franz

Antwort 9 von nighty vom 22.06.2021, 17:34 Options

hi all .-)

ein nettes makro von Nepumuk das ich angepasst habe fuer ein beispiel

a1 wird kopiert

gruss nighty

Option Explicit
Private Declare Function FindFirstFile Lib "kernel32.dll" Alias "FindFirstFileA" ( _
    ByVal lpFileName As String, _
    ByRef lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32.dll" Alias "FindNextFileA" ( _
    ByVal hFindFile As Long, _
    ByRef lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32.dll" ( _
    ByVal hFindFile As Long) As Long
Private Enum FILE_ATTRIBUTE
    FILE_ATTRIBUTE_READONLY = &H1
    FILE_ATTRIBUTE_HIDDEN = &H2
    FILE_ATTRIBUTE_SYSTEM = &H4
    FILE_ATTRIBUTE_DIRECTORY = &H10
    FILE_ATTRIBUTE_ARCHIVE = &H20
    FILE_ATTRIBUTE_NORMAL = &H80
    FILE_ATTRIBUTE_TEMPORARY = &H100
End Enum
Private Const MAX_PATH = 260
Private Const INVALID_HANDLE_VALUE = -1
Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type
Private Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String * 14
End Type
Public Sub Start()
    Dim vntFolders As Variant
    Dim lngIndex As Long
    vntFolders = Folderlist(ThisWorkbook.Path)
    If IsArray(vntFolders) Then
        For lngIndex = LBound(vntFolders) To UBound(vntFolders)
            Dim DateiName As String
            DateiName = Dir(vntFolders(lngIndex) & "\*.xls")
            Do While DateiName <> ""
                If ThisWorkbook.Name <> DateiName Then
                    Workbooks.Open Filename:=vntFolders(lngIndex) & "\" & DateiName
                    Workbooks(DateiName).Worksheets(1).Range("A1").Copy _
                        ThisWorkbook.Worksheets(1).Range("A" & ThisWorkbook.Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row + 1)
                    Workbooks(DateiName).Close
                End If
                DateiName = Dir
            Loop
        Next
    End If
End Sub
Private Function Folderlist(ByVal strFolderPath As String) As Variant
    Dim WFD As WIN32_FIND_DATA
    Dim lngSearch As Long, lngCounter As Long
    Dim strDirName As String
    Dim vntFolderArray() As Variant
    If Right$(strFolderPath, 1) <> "\" Then strFolderPath = strFolderPath & "\"
    lngSearch = FindFirstFile(strFolderPath & "*", WFD)
    If lngSearch <> INVALID_HANDLE_VALUE Then
        Do
            If CBool(WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) Then
                strDirName = Left$(WFD.cFileName, InStr(WFD.cFileName & vbNullChar, vbNullChar) - 1)
                If (strDirName <> ".") And (strDirName <> "..") Then
                    lngCounter = lngCounter + 1
                    ReDim Preserve vntFolderArray(1 To lngCounter)
                    vntFolderArray(lngCounter) = strFolderPath & strDirName
                End If
            End If
        Loop While FindNextFile(lngSearch, WFD)
        FindClose lngSearch
        Folderlist = vntFolderArray
    End If
End Function

Antwort 10 von nighty vom 22.06.2021, 17:50 Options

hi all :-)

vielleicht zum besseren anpassen

gruss nighty

Quelle
Workbooks(DateiName).Worksheets(1).Range("A1").Copy

Ziel
ThisWorkbook.Worksheets(1).Range("A" & ThisWorkbook.Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row + 1)

Path
vntFolders = Folderlist(ThisWorkbook.Path)

Antwort 11 von nighty vom 23.06.2021, 13:20 Options

hi franz :-)

registrier dich und wir koennen daten tauschen ueber pn,ich koennte dir dann eine mustermappe schicken

mit deinen angaben

wie z.b. Range("A:A,C:C,X:X") oder bei einer eventuellen suche in der tabelle

angabe von bereichsnamen oder spaltennamen

verbundene zellen sind verboten :-))

gruss nighty

Ähnliche Themen

komma nachträglich in excel spalten
haette  08.02.2008 - 76 Hits - 3 Antworten

Spalten Einblenden in Excel
putzi  15.04.2008 - 159 Hits - 4 Antworten

Mehr Spalten in Excel
jjgwlw  04.08.2008 - 9 Hits - 2 Antworten

Messwerterfassung, mehrere Dateien zusammenkopieren
Andreas98  23.10.2008 - 16 Hits - 2 Antworten

Excel Spalten ausblenden
michael87  27.02.2009 - 1310 Hits - 2 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026