Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1340to1344
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
Inhaltsverzeichnis

Kopieren aus anderer Datei

Kopieren aus anderer Datei
17.12.2013 11:21:58
Raffa
Hallo zusammen
Ich habe folgendes Problem, bei dem ich Hilfe bräuchte.
Ich habe zwei Dateien (Journal Analysis.csv und Template.xlsm)
In Template xlsm habe ich eine Tabelle (P&L) mit Codes. So, nun muss für jeden Code (bis zu 50) aus Spalte A ein Tabellenblatt erstellt werden. Dies habe ich zustande gebracht.
Jetzt muss aber zu jedem Code (also in jedes jeweilige Datenblatt) Zeilen aus Journal Analysis.csv kopiert werden. Der entsprechende Code in Journal Analysis.csv ist in Spalte R. Und muss mit Spalte A aus Template (P&L) übereinstimmen.
Der schwierigste Part ist aber: dass es 4-5 Codes gibt, die unter R nicht gefunden werden. Diese müssen in Spalte S gefunden und rüber kopiert werden.
Hat jemand eine Idee wie ich das bewerkstelligen kann?
Vielen Dank!

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
bitte Beispiel-Datei [owT]
17.12.2013 14:41:44
Ralf

AW: Kopieren aus anderer Datei
17.12.2013 15:22:50
fcs
Hallo Raffa,
hier ein Beispiel wie man es umsetzen kann.
Hier werden jeweils alle Daten aus der Zeile im Journal in die Zieltabelle kopiert.
Gruß
Franz
Sub MakeSheetsForCodes()
Dim wksPL As Worksheet
Dim Zeile As Long, ZeileL As Long
With ActiveWorkbook
Set wksPL = .Worksheets("P&L")
With wksPL
ZeileL = .Cells(.Rows.Count, 1).End(xlUp).Row
End With
For Zeile = 2 To ZeileL
.Worksheets.Add after:=.Sheets(.Sheets.Count)
.Sheets(.Sheets.Count).Name = wksPL.Cells(Zeile, 1).Text
Next
End With
End Sub
Sub GetData_from_Journal()
Dim wkbTemplate As Workbook
Dim wksJournal As Worksheet, wksPL As Worksheet, wksCode As Worksheet
Dim Zeile As Long, ZeileL As Long, Zeile_Z As Long
Dim rngCode As Range, rngSearch_R As Range, rngSearch_S As Range
Dim strAddress1 As String, varCode
Set wkbTemplate = Workbooks("Template.xlsm") 'ActiveWorkbook
Set wksJournal = Workbooks("Journal Analysis.csv").Sheets(1)
Set wksPL = wkbTemplate.Worksheets("P&L")
With wksPL
'Letzte Zeile in Code-Liste Spalte A
ZeileL = .Cells(.Rows.Count, 1).End(xlUp).Row
End With
'Zu durchsuchende Zellbereiche im Journal Analyse
With wksJournal
Set rngSearch_R = .Range(.Cells(1, 18), .Cells(.Rows.Count, 18).End(xlUp))
Set rngSearch_S = .Range(.Cells(1, 19), .Cells(.Rows.Count, 19).End(xlUp))
End With
'Codes im Blatt "P&L" abarbeiten
For Zeile = 2 To ZeileL
varCode = wksPL.Cells(Zeile, 1).Text
'Zieltabelle setzen
Set wksCode = wkbTemplate.Worksheets(varCode)
'Letzte Zeile mit Daten im Zielblatt ermiteln
With wksCode
Set rngCode = .Cells.Find(what:="*", after:=.Cells(1, 1), LookIn:=xlFormulas, _
lookat:=xlWhole, searchorder:=xlByRows, searchdirection:=xlPrevious)
If rngCode Is Nothing Then
Zeile_Z = 0
Else
Zeile_Z = rngCode.Row
End If
End With
'Code in Spalte R des Journals suchen
Set rngCode = rngSearch_R.Find(what:=varCode, LookIn:=xlValues, lookat:=xlWhole)
If rngCode Is Nothing Then
'Code in Spalte S  des Journals suchen
Set rngCode = rngSearch_S.Find(what:=varCode, LookIn:=xlValues, lookat:=xlWhole)
If rngCode Is Nothing Then
'do nothing - Code im Journal nicht vorhanden
Else
'1, Fundstelle merken
strAddress1 = rngCode.Address
Do
'Daten aus dem Journal ins Zielblatt kopieren
Zeile_Z = Zeile_Z + 1
Call prcCopyData(wksQuelle:=wksJournal, ZeileQ:=rngCode.Row, _
wksZiel:=wksCode, ZeileZ:=Zeile_Z)
'nächste Zeile mit Code suchen
Set rngCode = rngSearch_S.FindNext(after:=rngCode)
Loop Until rngCode.Address = strAddress1
End If
Else
'1, Fundstelle merken
strAddress1 = rngCode.Address
Do
'Daten aus dem Journal ins Zielblatt kopieren
Zeile_Z = Zeile_Z + 1
Call prcCopyData(wksQuelle:=wksJournal, ZeileQ:=rngCode.Row, _
wksZiel:=wksCode, ZeileZ:=Zeile_Z)
'nächste Zeile mit Code suchen
Set rngCode = rngSearch_R.FindNext(after:=rngCode)
Loop Until rngCode.Address = strAddress1
End If
Next
End Sub
Private Sub prcCopyData(ByVal wksQuelle As Worksheet, ByVal ZeileQ As Long, _
ByVal wksZiel As Worksheet, ByVal ZeileZ As Long)
'Daten kopieren
With wksQuelle
.Range(.Cells(ZeileQ, 1), .Cells(ZeileQ, .Columns.Count).End(xlToLeft)).Copy _
Destination:=wksZiel.Cells(ZeileZ, 1)
End With
End Sub

Anzeige
AW: Kopieren aus anderer Datei
17.12.2013 16:56:56
Raffa
Wow! Mir fehlen die Worte :-) Das ist fantastisch!
Ganz genau das was ich gesucht habe! Vielen DANK!!!

AW: Kopieren aus anderer Datei
17.12.2013 17:10:09
Raffa
Etwas ist mir nun doch aufgefallen :-)
Hat aber eigentlich nichts mit dem Code an sich zu tun, eher mit weiterführenden Codes, die ich bereits gebastelt habe.
Zum Beispiel müsste ich diesen Code irgendwo einfügen, damit mir die Beschreibung des Codes in A1 geschrieben wird. Wo müsste ich diesen nun einfügen? Ich schaffe es irgendwie dass ich in einen Loop komme. Dasselbe gilt für den Code den ich vorbereitet habe um eine Summe in Spalte P zu machen.
'Title in Cell A1 and format
ActiveSheet.Range("A2").Value = ActiveSheet.Name
Range("A3").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-1]C,'P&L'!C:C[5],6,FALSE)"
ActiveSheet.Range("A1").Value = "Review of " & ActiveSheet.Name & " " & Range("A3").Value & " - " & Sheets("Data").Range("A2").Value
Range("A1").Select
Selection.Font.Bold = True
Range("A2").Select
Selection.ClearContents
Range("A3").Select
Selection.ClearContents

Anzeige
AW: Kopieren aus anderer Datei
18.12.2013 12:38:10
fcs
Hallo Raffa,
die Beschreibung des Codes kannst du in eine weitere Variable einlesen, wenn die Codes abgearbeitet werden.
Die Titelzeile kannst du dann eintragen lassen, bevor die Daten aus dem Journal eingelesen werden.
Die Summenformel in Spalte P fügst du am Besten ein, wenn alle Zeilen zum jeweiligen Code aus dem Journal eingelesen sind.
Nachfolgend die Hauptprozedur mit den erforderlichen Anpassungen.
Gruß
Franz
Sub GetData_from_Journal()
Dim wkbTemplate As Workbook
Dim wksJournal As Worksheet, wksPL As Worksheet, wksCode As Worksheet
Dim Zeile As Long, ZeileL As Long, Zeile_Z As Long
Dim rngCode As Range, rngSearch_R As Range, rngSearch_S As Range
Dim strAddress1 As String, varCode
Set wkbTemplate = Workbooks("Template.xlsm") 'ActiveWorkbook
Set wksJournal = Workbooks("Journal Analysis.csv").Sheets(1)
Set wksPL = wkbTemplate.Worksheets("P&L")
With wksPL
'Letzte Zeile in Code-Liste Spalte A
ZeileL = .Cells(.Rows.Count, 1).End(xlUp).Row
End With
'Zu durchsuchende Zellbereiche im Journal Analyse
With wksJournal
Set rngSearch_R = .Range(.Cells(1, 18), .Cells(.Rows.Count, 18).End(xlUp))
Set rngSearch_S = .Range(.Cells(1, 19), .Cells(.Rows.Count, 19).End(xlUp))
End With
'Codes im Blatt "P&L" abarbeiten
Dim strBeschreibung As String
For Zeile = 2 To ZeileL
varCode = wksPL.Cells(Zeile, 1).Text
strBeschreibung = wksPL.Cells(Zeile, 6).Text
'Zieltabelle setzen
Set wksCode = wkbTemplate.Worksheets(varCode)
With wksCode
'Title in Cell A1 and format
.Range("A1").Value = "Review of " & .Name & " " & strBeschreibung & " - " _
& Sheets("Data").Range("A2").Value
.Range("A1").Font.Bold = True
'Letzte Zeile mit Daten im Zielblatt ermiteln
Set rngCode = .Cells.Find(what:="*", after:=.Cells(1, 1), LookIn:=xlFormulas, _
lookat:=xlWhole, searchorder:=xlByRows, searchdirection:=xlPrevious)
If rngCode Is Nothing Then
Zeile_Z = 0
Else
Zeile_Z = rngCode.Row
End If
End With
'Code in Spalte R des Journals suchen
Set rngCode = rngSearch_R.Find(what:=varCode, LookIn:=xlValues, lookat:=xlWhole)
If rngCode Is Nothing Then
'Code in Spalte S  des Journals suchen
Set rngCode = rngSearch_S.Find(what:=varCode, LookIn:=xlValues, lookat:=xlWhole)
If rngCode Is Nothing Then
'do nothing - Code im Journal nicht vorhanden
Else
'1, Fundstelle merken
strAddress1 = rngCode.Address
Do
'Daten aus dem Journal ins Zielblatt kopieren
Zeile_Z = Zeile_Z + 1
Call prcCopyData(wksQuelle:=wksJournal, ZeileQ:=rngCode.Row, _
wksZiel:=wksCode, ZeileZ:=Zeile_Z)
'nächste Zeile mit Code suchen
Set rngCode = rngSearch_S.FindNext(after:=rngCode)
Loop Until rngCode.Address = strAddress1
End If
Else
'1, Fundstelle merken
strAddress1 = rngCode.Address
Do
'Daten aus dem Journal ins Zielblatt kopieren
Zeile_Z = Zeile_Z + 1
Call prcCopyData(wksQuelle:=wksJournal, ZeileQ:=rngCode.Row, _
wksZiel:=wksCode, ZeileZ:=Zeile_Z)
'nächste Zeile mit Code suchen
Set rngCode = rngSearch_R.FindNext(after:=rngCode)
Loop Until rngCode.Address = strAddress1
End If
'Summenformel in Spalte P
If Zeile_Z > 1 Then
wksCode.Range("P1").FormulaR1C1 = "=SUM(R[1]C:R[" & Zeile_Z - 1 & "]C)"
End If
Next
End Sub

Anzeige

321 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige