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

Werte von Excel Tabellenblättern einer Datei zusammenfügen

Frage Microsoft Microsoft Office

Mitglied: Shaggy84

Shaggy84 (Level 1) - Jetzt verbinden

13.03.2007, aktualisiert 15.03.2007, 9266 Aufrufe, 16 Kommentare

Hallo Experten,

ihr habt Fachwissen und ich nur Ahnung, deswegen muss ich mich hier mal zu Wort melden

Folgendes Problem:
Ich habe eine Excel Datei mit mehreren Tabellen. Diese Tabellen sind wiederrum verformelt, da Sie Werte aus anderen Dateien importieren und erstellen.

Ich möchte gerne am Anfang der Datei eine Tabelle "Import" via VBA füllen, die die nachfolgenden (variabel 3-5) Tabellen "Server *" zusammenfasst. Die Überschriften bis zur siebten Spalte sind immer die gleichen, ab dann kommen verschiedene Werte. Ich kann es nicht einfach kopieren oder verknüpfen, da diese Datei beim Start unterschiedlich viele Datensätze in die einzelnen Tabellen importiert. Es sollen also auch keine leeren Zeilen entstehen und nur die Werte übertragen werden, mit Formeln kann ich nichts anfangen. Am Ende der Datei stehen noch zwei andere Tabellen die außen vor sind.

Hört sich also ziemlich kompliziert an, ich habe auch schon ein Makro gefunden, nur leider funktioniert dieses nicht:

01.
Sub Tabellen_zusammenfügen() 
02.
letztesBlatt = ActiveWorkbook.Sheets.Count 
03.
For i = 2 To ActiveWorkbook.Sheets.Count - 2 
04.
Sheets(i).Select 
05.
letzteZeile = Range("A65536").End(xlUp).Row 
06.
If letzteZeile > 7 Then 
07.
Rows("8:" & letzteZeile).Select 
08.
Selection.Copy 
09.
Sheets("Import").Select 
10.
Range("A" & Range("A65536").End(xlUp).Row + 1).Select 
11.
ActiveSheet.Paste 
12.
Application.CutCopyMode = False 
13.
End If 
14.
Next i 
15.
End Sub
Aus Formeln nur die Werter abzuleiten ging doch irgendwie mit ".PasteSpecial Paste:=xlValues" oder?

Facts: Excel 2003 / Win 2000

Bin für jede VBA Hilfe dankbar ;)
Mitglied: bastla
13.03.2007 um 19:15 Uhr
Hallo Shaggy84 und willkommen im Forum!

Da gerade keine Experten in der Nähe sind, versuche ich es mal ...

Eigentlich sieht der Code schon recht vernünftig aus. Aus der gewählten Vorgangsweise ergibt sich nur eine kleine Einschränkung: Es wird immer auf die Spalte A abgestellt, um den Umfang der zu kopierenden Daten bzw den Ort des Einfügens festzustellen. Sofern in allen Tabellenzeilen, die kopiert werden sollen, in Spalte A ein Inhalt steht, ergibt sich daraus aber kein Problem.

Konkret ändern müsstest Du, wie vermutet, nur die "Paste"-Zeile - versuch es einmal mit
01.
Selection.PasteSpecial Paste:=xlPasteValues
Nur als Anmerkung: Die Zeile 2 erfüllt keinen nachvollziehbaren Zweck und könnte daher ersatzlos gestrichen werden.

HTH
bastla
Bitte warten ..
Mitglied: Iwan
14.03.2007 um 08:10 Uhr
wenn ich die Datei mal bekommen könnte, könnte ich Dir da sicherlich ein Makro zu basteln
Bitte warten ..
Mitglied: Shaggy84
14.03.2007 um 09:55 Uhr
Danke "bastla"!

Das funktioniert schon soweit ganz gut, ich habe nur noch zwei Probleme

Erstens habe ich in den Ausgangstabellen auch noch Zeilen, in der in einer Spalte jeweils eine Null vorkommt. Das liegt an dem Import aus einer anderen Datei, wenn er dort keine Datensätze findet. Eine "WENN xy > 0" Funktion zum importieren kann ich nicht anwenden, da dann wieder andere Funktionen, die auf die Spalte zurückgreifen (WENN > 0 usw.) "rumspinnen". Kann man das noch dahin abändern, dass der auch keine Zeilen mit 0 Werten kopiert?

Zweitens bräuchte ich ein weiteres Makro, das in der "Import" Tabelle ab Zeile 8 wieder alle Zeilen löscht. Damit man bei einem erneuten aufrufen der Datei oder des Makros andere Datensätze zusammenfassen kann.

Evt. kann man ja auch mein erstes Problem mit einem Lösch Makro beheben, quasi lösche alle Zeilen, in denen in Spalte B eine "0" vorkommt. Das ist vielleicht einfacher.

Danke aber nochmals für die erste Lösung, hat schon sehr geholfen
Bitte warten ..
Mitglied: Shaggy84
14.03.2007 um 09:57 Uhr
Würde ich gerne, kann ich aber leider nicht machen. Erstens sind die Dateien alle wiederrum zu anderen verknüpft und zweitens sind es vertrauliche Daten
Bitte warten ..
Mitglied: bastla
14.03.2007 um 11:03 Uhr
Hallo Shaggy84!

Für das jeweilige Löschen müsste folgendes genügen:
01.
Sub EntferneZeilen() 
02.
Worksheets("Import").Range("8:65535").Clear 
03.
End Sub 
04.
 
05.
Sub EntferneNullen() 
06.
Dim Zelle As Object 
07.
For Each Zelle In Worksheets("Import").Range("B8", Range("B65536").End(xlUp)) 
08.
    If Zelle.Value = 0 Then Zelle.Clear 
09.
Next 
10.
End Sub
Grüße
bastla
Bitte warten ..
Mitglied: Shaggy84
14.03.2007 um 11:38 Uhr
Hallo bastla!

das erste funktioniert perfekt. Ich hab mir zwar auch schon eins gebastelt, aber deines ist noch kürzer. Prima ;)

Zum zweiten mit den Nullen löschen habe ich mich glaube ich falsch ausgedrückt. In deinem Makro löscht er nur die Nullen aus den Zellen, ich würde ganz gerne dann die gesamte Zeile löschen lassen, so dass zwischen den Importen keine leeren Zeilen sind. Wenn ich dein Clear durch ein Delete ersetze zieht er mir nur Spalte B rauf, und das sehr langsam
Bitte warten ..
Mitglied: bastla
14.03.2007 um 12:40 Uhr
Hallo Shaggy84!

Wenn es weiterhin nur auf die Spalte "B" ankommt, würde das so aussehen:
01.
Sub EntferneNullen() 
02.
Dim Zelle As Object 
03.
For Each Zelle In Worksheets("Import").Range("B8", Range("B65536").End(xlUp)) 
04.
    If Zelle.Value = 0 Then Rows(Zelle.Row).Delete 
05.
Next 
06.
End Sub
Grüße
bastla
Bitte warten ..
Mitglied: Shaggy84
14.03.2007 um 13:20 Uhr
Hallo bastla!

dein Code funktioniert, aber aus irgendeinem Grund macht er den Durchlauf nur ca.75x, keine Ahnung warum.

Aus einem anderen Forum hat mir ® "losgehts" geantwortet und den Code direkt in den ersten mit hinein gepackt:

01.
Sub Tabellen_zusammenfügen()  
02.
Dim i As Integer  
03.
Dim letzteZeile As Long  
04.
Dim ZeileImport As Long  
05.
 
06.
With ActiveWorkbook  
07.
   For i = 2 To .Sheets.Count - 2  
08.
      letzteZeile = .Sheets(i).Range("A65536").End(xlUp).Row  
09.
      If letzteZeile > 7 Then  
10.
         ZeileImport = .Sheets("Import").Range("A65536").End(xlUp).Row + 1  
11.
         .Sheets(i).Rows("8:" & letzteZeile).Copy  
12.
         .Sheets("Import").Range("A" & ZeileImport).PasteSpecial _  
13.
                                       Paste:=xlPasteValues  
14.
      End If  
15.
   Next i  
16.
   .Sheets("Import").Cells(1, 1).Select  
17.
   
18.
  'Zeilen mit Inhalt in Spalte B gleich 0 löschen:  
19.
   With Sheets("Import")  
20.
      For i = .Cells(Rows.Count, 2).End(xlUp).Row To 1 Step -1  
21.
         If .Cells(i, 2).Value = "0" Then Rows(i).Delete  
22.
      Next  
23.
   End With  
24.
End With  
25.
End Sub
Es kunktioniert auf jeden Fall beides und ich möchte mich bei dir für die Hilfe bedanken!!! Das hat mir wirklich sehr weitergeholfen.
Bitte warten ..
Mitglied: Shaggy84
14.03.2007 um 15:22 Uhr
Ich bins nochmal kurz,

gibt es eine kleine Abänderung, mit der man den Löschbefehl für die Zellen mit dem Inhalt "0" erst ab Zeile 8 laufen lassen kann?

Und gibt es eine Optimierung, vielleicht das er erst alle Zellen mit 0 markiert und dann löscht, es funktioniert zwar, aber dauert auch 15Minuten bei einer größeren Datei und dem einzelnen nach und nach löschen.

Vielleicht bekomme ich das ja auch noch selber hin :D
Bitte warten ..
Mitglied: bastla
14.03.2007 um 15:47 Uhr
Hallo Shaggy84!

Zumindest einmal das:
01.
For i = .Cells(Rows.Count, 2).End(xlUp).Row To <b>8</b> Step -1 
Grüße
bastla
Bitte warten ..
Mitglied: bastla
14.03.2007 um 16:47 Uhr
Hallo Shaggy84!

Zum "Löschen en bloc" fiele mir nur etwa folgende Vorgangsweise ein:

  • Allen Zeilen, die nicht gelöscht werden sollen, in einer freien Spalte eine laufende Nummer geben, für die zu löschenden Zeilen die Nummer 100000 eintragen.

  • Danach die ganze Tabelle nach dieser Spalte sortieren (wie lange das wieder dauern würde, kann ich auch nicht abschätzen - am Besten einmal vorweg testen, um den ev Zeitgewinn zu eruieren bzw die Strategie gleich zu verwerfen).

  • Jetzt die in einem Block am Ende stehenden Zeilen in einem einzigen Löschvorgang entfernen.

  • Abschließend die Nummerierungsspalte löschen.

Grüße
bastla
Bitte warten ..
Mitglied: Shaggy84
15.03.2007 um 14:51 Uhr
Hi bastla,

jo klappt natürlich, einfach nur die eine Zahl ändern. Man merkt schon das ich ein totaler VBA Newbie bin

Gibt es noch eine andere Möglichkeit, dass wenn ich nicht nur die Zeilen mit einer "0" löschen, sondern auch die "" leeren Zeilen löschen will, außer dieser Schleife hier die ich unter die andere druntersetzte? Quasi ein "0" "oder" "" in der Löschabfrage.

01.
'leere Zeilen in Spalte B löschen:  
02.
   With Sheets("Import")  
03.
      For i = .Cells(Rows.Count, 2).End(xlUp).Row To 8 Step -1  
04.
         If .Cells(i, 2).Value = "" Then Rows(i).Delete  
05.
      Next  
06.
   End With 
Gruß, Shaggy

P.S. Das mit dem anderen Löschen lass ich erstmal
Bitte warten ..
Mitglied: bastla
15.03.2007 um 15:00 Uhr
Hallo Shaggy84!

Kombiniert sähe das so aus:
01.
If .Cells(i, 2).Value = "" Or .Cells(i, 2).Value = "0" Then Rows(i).Delete 
Grüße
bastla

P.S.: Nur interessehalber - hast Du das Sortieren versucht, und wenn ja, wie lange dauert es im Vergleich zum Löschen nach obiger Vorgangsweise?
Bitte warten ..
Mitglied: Biber
15.03.2007 um 15:03 Uhr
Moin Shaggy,

für die Frage brauchen wir bastla's Mittagsruhe nicht stören...

If (.Cells(i, 2).Value = "" or If .Cells(i, 2).Value ="0") Then Rows(i).Delete

...wäre eine der Möglichkeiten.

Gruss
Biber

[Edit] das zweite "If " oben ist natürlich BullShit... bzw. ein Copy & Paste-Fehler. [/Edit]
Bitte warten ..
Mitglied: bastla
15.03.2007 um 15:12 Uhr
@Biber

Du bist ja so fürsorglich ...

Übrigens: Wenn Du noch Zeit hast, könntest Du das versehentlich hineinkopierte zweite "If" entfernen ...

Grüße
bastla
Bitte warten ..
Mitglied: Shaggy84
15.03.2007 um 15:21 Uhr
Danke bastla,

funktioniert wie immer perfekt!

Ich glaube so nen schnelle response hab ich sonst noch nie in einem Forum bekommen, vielen Dank!

Und Mittagspause gibts hier nur von 12:00-12:45Uhr

Das andere hab ich nicht ausprobiert, ich bin leider net so in der Tiefe was das Programieren angeht, mach eher was mit Hardware und dem Kaufmännischem.

Also, bis irgendwann mal wieder ;)
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...