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
GELÖST

VBA für Excel zum Zusammenführen von Tabellen in Blättern

Frage Entwicklung VB for Applications

Mitglied: Fusselfrei

Fusselfrei (Level 1) - Jetzt verbinden

18.09.2009 um 16:59 Uhr, 12618 Aufrufe, 10 Kommentare

Liebes Forum,

ich habe als VBA-Neuling ein (für mich) großes Vorhaben:

Eine Excel-Datei (2007) enhält mehrere Blätter mit diversen Nachnamen (z.B. Müller, Becker, Koch, ... Lüdenscheid)

Die Tabellen in den Blättern sehen so aus:

Vorname Datum1 Datum2 Typ1 Typ2
Name1 02.03. 21.04. E1 E4; E7
Name2 04.08. E2 E6; E9
Name3 26.09. 07.09. E4
... ... ... ... ...
Namex 07.08. 08.08. E1 E4; E7

Die Anzahl der Spalten in den Blättern beträgt 5,
die Tabellen sind unterschiedlich lang (z.B. bis Name3 oder Name6),
teilweise sind Felder leer.

Ich möchte aus allen Blättern ( Müller, Becker, Koch, ... Lüdenscheid) die Tabelleninhalte in eine neue Tabelle in ein neues Blatt kopieren.

Was muss ich dazu lernen und wissen? Oder könnte mir sogar jemand einen Vorschlag machen?

Vielen Dank im Voraus!
Mitglied: Biber
18.09.2009 um 18:59 Uhr
Moin Fusselfrei,

willkommen im Forum.

ein paar Nachfragen.
Wo zum Gates kauft ihr eure Nicknames?

Wenn die ZeilenAnzahl unteschiedlich ist - okay.
Ist aber umgekehrt gewährleistet, das die Spalten-Anzahl und Reihenfolge in allen Sheets identisch ist?

Wenn ja- kann dann die Zeile 1 (mit den Spaltenüberschriften) blind aus dem erst(best)en Bladel übernommen werden und aus allen folgenden Blättern eben alles ab Zeile 2?

Und grundsätzlich: Eine Office-Automation lohnt sich doch nur,
  • wenn es zwar eine einmalige Aktion ist mit dem Zusammenführen, es aber -zig Sheets sind, die Du sonst Copy&Pasten müsstest
-oder-
  • wenn es eine immer wiederkehrende Aktion ist, die dich die kommenden Monate & Jahre begleitet

Falls es Fall B ist, empfehle ich den Prozess zu ändern und keinen Aufwand in diesen ja doch gut 30-Zeilen-makro zu stecken.
Und falls Fall A, dann wüsste ich schon gern, ob "-zig Tabellenbätter" wirklich mehr als 3 sind.

Grüße
Biber
Bitte warten ..
Mitglied: Fusselfrei
19.09.2009 um 12:26 Uhr
Hallo Biber,

danke für den netten Empfang! Vielleicht hätte ich meinen Nicknamen nicht als Sonderangebot kaufen sollen...

Bei mir trifft Fall A ein (und später ggf. Fall B):

Ich möchte eine "Zusammenfassung" von Recherchen erstellen:

Aus Recherchen habe ich ca. 50 Sheets mit Rechercheergebnissen.
Die Namen der Sheets sind wie ich sagte "kunterbunt" (z.B. Müller, Becker, Koch)

Die SpaltenAnzahl und Reihenfolge der relevanten Rechercheergebnisse sind in allen Sheets identisch (Vorname, Datum1, Datum2, Typ1, Typ2) und beginnen stets an der gleichen Position (z.B. ab D9 bis H9)

Die Anzahl der Rechercheergebnisse unterscheiden sich, d.h.die ZeilenAnzahl ist unteschiedlich.


Später soll Fall B eintreffen, d.h. neue Recherchen mit neuen Rechercheergebnissen sollen zur "Zusammenfassung" hinzugefügt werden.

Vielen Dank im Voraus!

Fusselfrei
Bitte warten ..
Mitglied: 76109
19.09.2009 um 15:34 Uhr
Hallo Fusselfrei!

Bleibt für mich noch die Frage? Was soll mit den Tabellen-Nachnamen passieren?

Gruß Dieter
Bitte warten ..
Mitglied: Biber
19.09.2009 um 16:05 Uhr
Moin didi1954,

rein pragmatisch würdfe ich anregen, zwei neue Spalten rechts daneben anzulegen - eine mit dem bisherigen Blattnamen "Müller" etc und noch eine Spalte mit der laufenden Nummer des Quell-Blatts, falls mal ein doppelter Müller auftaucht.
Okay, ist jetzt nicht zu erwarten, wenn alle Sheets in einer Excel-Datei sind, aber langfristig kann es auftreten bei Plan B.

Grüße
Biber
Bitte warten ..
Mitglied: 76109
19.09.2009 um 17:27 Uhr
Hallo Biber!

Ich bleibe mal bei Plan A und würde dabei rein pragmatisch gesehen, die Nachnamen in die 1. Spalte schreiben und die anderen Spalten um 1 nach rechts verschieben. Würde zumindest mir, von der Optik her bessser gefallen

Bei Plan B bleibt die Frage, ob die bisherigen Einträge in den einzelnen Sheets erhalten bleiben und neue hinzugefügt werden oder wie ist das gedacht?

Gruß Dieter
Bitte warten ..
Mitglied: Fusselfrei
19.09.2009 um 18:28 Uhr
Hallo Dieter und Biber!

"Müller, Becker, Koch" war in meiner obigen Frage nicht wirklich richtig (Entschuldigung!)

Die Blätter sind nach dem Recherche-Datum benannt, wobei auch mehrere Recherchen (mit anderen Kriterien) pro Tag vorhanden sein können, d.h. die Blätter heißen z.B. 16.12.07 bei der ersten Recherche am 16.12.07,
bei einer zweiten Recherche am gleichen Tag 16.12.07 (2),
dann 16.12.07 (3) usw.

Zu Deinem Vorschlag Biber:
Den Blättern eine laufende Nummer zu vergeben ist zum jetzigen Zeitpunkt (bei 50 Sheets) noch gerade machbar (was den Arbeitsaufwand und die Monotonie betrifft).

Wie realisiere ich denn dann ein "Parsen" durch die Sheets, in denen dann jeweils in einer Spalte bzw. Zelle eine laufende Nummer des Sheets stünde ohne die Namen der Sheets verändern zu müssen?

Zu Deiner Frage Dieter:
Die Namen der Sheets sind zum jetzigen Zeitpunkt für mich irgendwie "logisch". Daher möchte ich diese ursprünglichen Blätter-Namen irgendwie "aufheben".

Grüße
Roland
Bitte warten ..
Mitglied: Biber
19.09.2009 um 19:27 Uhr
Moin Fusselfrei,

zu Deiner Frage
Zu Deinem Vorschlag Biber:
Den Blättern eine laufende Nummer zu vergeben ist zum jetzigen Zeitpunkt (bei 50 Sheets)
noch gerade machbar (was den Arbeitsaufwand und die Monotonie betrifft).

Nein, nein.. nicht manuell und mit Zusatzaufwand.
didi1954 und oder ich werden ha ohnehin in irgendeiner Schleife über die vorhandenen Sheets schrapeln und dabei von 1 bis 50 zahlen. und diese 1 bis 50 können wir dabei "nebenbei" in eine weitere Spalte schreiben, genau wie die ja einzig identifizierende Quellinformation, den bisherigen Namen des Sheets.

Dann kannst Du später sowohl mit "Daten"->"Autofilter" (oder wie immer das unter Excel 2007 heißen mag) danach schnell suchen oder auch den ganzen Klump mit "Teilsummen()" aufaggregieren... denn vermutlich ist das mittelfristige Ziel ja ein Vergleich mit Summen/Durchschnitt und Prozentwerten.

Also keine Angst: Du sollst weder etwas zusätzlich von Hand durchnummerieren noch die Blatt-Namen verlieren.

BTW, "Roland Fusselfrei" hört sich noch beknackter an "Fusselfrei"

Grüße
Biber
Bitte warten ..
Mitglied: 76109
20.09.2009 um 15:23 Uhr
Hallo Fusselfrei und Biber!

Nur so als Anmerkung. 50 Sheets umzubenamsen dauerte bei mir knapp 2 Minuten (rechte Hand Doppelklick und linke Hand Zahl eingeben)

Die fortlaufende Nummer kann man sich eigentlichen sparen, hab's aber trotzdem mal mit eingebunden.

Es wird angenommen, dass sich in den einzelnen Sheets in Spalte D9 unter den Vornamen keine sonstigen Einträge mehr befinden.

Das Tabellenblatt mit der Zusammenfassung (Konstante ListDaten = Name) wird automatisch erstellt, sofern noch kein's existiert.
Die Spalten (siehe Konstanten) A = Lfd.-Nr., B = Name Quell-Tabellenblatt und C:G = Quell-Tabelle.

So, diesen Entwurf habe ich dann mal zusammengeschrappelt:
01.
Option Explicit 
02.
 
03.
Const ListDaten = "Alle Daten"  'Tabellenblatt Alle Daten 
04.
 
05.
Const CopyRng = "D9"            'Kopieren Zelle 1 
06.
Const CopyBeg = "D"             'Kopieren Spalte 1 
07.
Const CopyEnd = "H"             'Kopieren Spalte n 
08.
 
09.
Const ListId = "A"              'Alle Daten Spalte Lfd-Nr. 
10.
Const ListName = "B"            'Alle Daten Spalte Tabellenname 
11.
Const ListPaste = "C"           'Alle Daten Spalte Datenkopie 
12.
 
13.
Sub InitDaten() 
14.
    Dim Wks As Worksheet, Found As Object, NextLine As Integer, Id As Integer 
15.
     
16.
    Call InitListSheet 
17.
     
18.
    Application.ScreenUpdating = False 
19.
     
20.
    For Each Wks In Worksheets 
21.
        If Wks.Name <> ActiveSheet.Name Then 
22.
            Set Found = Columns(ListName).Find(Wks.Name, LookIn:=xlValues, LookAt:=xlWhole) 
23.
            If Found Is Nothing And Not IsEmpty(Wks.Range(CopyRng)) Then 
24.
                NextLine = GetEndLine(ActiveSheet, ListPaste) + 1 
25.
                Cells(NextLine, ListId) = GetNextId():  Cells(NextLine, ListName) = Wks.Name 
26.
                Range(Wks.Range(CopyRng), Wks.Cells(GetEndLine(Wks, CopyBeg), CopyEnd)).Copy 
27.
                ActiveSheet.Paste Destination:=Cells(NextLine, ListPaste) 
28.
                Application.CutCopyMode = False 
29.
            End If 
30.
        End If 
31.
    Next 
32.
    Application.ScreenUpdating = True 
33.
End Sub 
34.
 
35.
Private Sub InitListSheet() 
36.
    Dim Wks As Worksheet 
37.
     
38.
    On Error Resume Next:  Set Wks = Sheets(ListDaten):  On Error GoTo 0 
39.
     
40.
    If Wks Is Nothing Then 
41.
        Sheets.Add Before:=Sheets(1):  ActiveSheet.Name = ListDaten 
42.
        With Range("A1:G1") 
43.
            .Value = Array("Lfd.-Nr.", "Blattname", "Vorname", "Datum1", "Datum2", "Typ1", "Typ2") 
44.
            .HorizontalAlignment = xlCenter 
45.
            .VerticalAlignment = xlCenter 
46.
            .Font.FontStyle = "Fett" 
47.
        End With 
48.
    Else 
49.
        Wks.Activate 
50.
    End If 
51.
End Sub 
52.
 
53.
Private Function GetEndLine(ByRef Wks, Col As String) As Integer 
54.
    GetEndLine = Wks.Cells(Wks.Rows.Count, Col).End(xlUp).Row 
55.
End Function 
56.
     
57.
Private Function GetNextId() As Integer 
58.
    Dim EndLine As Integer 
59.
    EndLine = GetEndLine(ActiveSheet, ListId) 
60.
    If EndLine = 1 Then GetNextId = 1 Else GetNextId = Cells(EndLine, ListId) + 1 
61.
End Function
Das Ergebnis sieht in etwa so aus:
Lfd.-Nr. Blattname Vorname Datum1 Datum2 Typ1 Typ2
1 Tabelle 1 Name Datum Datum Text Text
Name Datum Datum Text Text
Name Datum Datum Text Text
2 Tabelle 2 Name Datum Datum Text Text
... ... ... ... ...

Den Rest kannst Du ja entsprechend anpassen.

Gruß Dieter

[edit] Für den Fall das Copy-Tabelle leer ist: Zeile 23 geändert [/edit]
Bitte warten ..
Mitglied: Fusselfrei
20.09.2009 um 16:45 Uhr
Hallo Dieter!

Vielen herzlichen Dank!!
Es funktioniert einwandfrei!



Grüße
Fusselfrei
Bitte warten ..
Mitglied: 76109
22.09.2009 um 09:19 Uhr
Hallo Fusselfrei!

War jetzt reiner Zufall, dass ich Deine Textänderung entdeckt habe. Das nächstemal bitte eine seperate Antwort schreiben, damt auch eine Benachrichtigung erfolgt.

Deine Vornamenänderungswünsche sehe ich mir mal an

Gruß Dieter

PS. Ich glaube ich Häng. Hast Deinen Text während meines textens einfach gelöscht.???
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

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

Ähnliche Inhalte
Microsoft Office
gelöst Verschieben von Zellinformation in andere Spalte (per VBA) excel 2010 (5)

Frage von thomas1972 zum Thema Microsoft Office ...

VB for Applications
Bilder vom LDAP in VBA - Excel (3)

Frage von Roadrunner777 zum Thema VB for Applications ...

VB for Applications
gelöst VBA Excel Recordset - Abfrage auf SQL-Server (4)

Frage von Aximand zum Thema VB for Applications ...

VB for Applications
gelöst Excel VBA Eine oder mehrere Zellen Verschieben (2)

Frage von batchnewbie zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

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

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...