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

Excel-Makro gesucht: Zusammenführen der verteilten Inhalte mehrerer markierter Zeilen in eine

Frage Microsoft Microsoft Office

Mitglied: stschuck

stschuck (Level 1) - Jetzt verbinden

03.07.2013 um 09:25 Uhr, 1831 Aufrufe, 5 Kommentare

Zwar kann ich Excel (2010) ganz gut bedienen, doch keine Makros schreiben. Hab schon viel gegooglet und ähnliche, aber keine genau passenden Lösungen gefunden.
Ich habe das Problem einer riesigen Excel-Tabelle mit ca. 6000 Zeilen und ungefähr 40 Spalten, die durch den Import vieler kleinerer Tabellen entstanden ist. Nun muß ich die über mehrere Spalten und Zeilen verteilten Informationen zu einem Produkt in einer Zeile zusammen fassen. Da im entscheidenden Feld, das mir anzeigt, welche Zeilen zusammen gehören sollen, Schreibfehler und Abweichungen vorkommen können, muss ich die Zeilen schon alle selbst anschauen und kann sie nicht automatisch vergleichen. Ich möchte daher die Zeilen, die zusammengeführt werden sollen, einfach markieren und dann das Makro ausführen, das alle Inhalte in die oberste der markierten Zeilen zusammenkopiert und die darunter stehenden löscht. Wichtig: Die Anzahl der Spalten darf sich auf keinen Fall verändern!
Beispiel:

a57cf109bc6f36dc93c9574f3706d625 - Klicke auf das Bild, um es zu vergrößern

Ich wäre dankbar für eine zeitsparende, einfache Lösung!
Vielen Dank
Stefan
Mitglied: 76109
03.07.2013, aktualisiert 04.07.2013
Hallo stschuck!

Unter der Annahme, dass der markierte Bereich in Spalte A beginnt und nur ein Wert in Spalte A (Inhalt 0) steht. Ausserdem ab der 3. Spalte C nur ein Wert pro Spalte steht...

Unter obiger Annahme könnte es hiermit gehen (Code in Modul einfügen):
01.
Option Explicit 
02.
 
03.
Const iColMax = 40 
04.
 
05.
Public Sub Zusammenfassen() 
06.
    Dim aValues As Variant, aNewValues(1 To 1, 1 To iColMax) As Variant 
07.
    Dim iRowValue As Long, iRowFirst As Long, iRowNext As Long, iRowLast As Long, r As Long, c As Long 
08.
     
09.
    If Selection.Rows.Count < 2 Then 
10.
        MsgBox "Es müssen mindestens 2 Zeilen markiert sein!", vbInformation, "Hinweis...":  Exit Sub 
11.
    End If 
12.
     
13.
    aValues = Selection.Value 
14.
     
15.
    iRowValue = GetRowValue(aValues) 
16.
    iRowFirst = Selection.Row 
17.
    iRowNext = iRowFirst + 1 
18.
    iRowLast = iRowFirst + Selection.Rows.Count - 1 
19.
     
20.
    aNewValues(1, 1) = aValues(iRowValue, 1) 
21.
    aNewValues(1, 2) = aValues(iRowValue, 2) 
22.
     
23.
    For r = 1 To UBound(aValues, 1) 
24.
        For c = 3 To iColMax 
25.
            If Not IsEmpty(aValues(r, c)) Then 
26.
                aNewValues(1, c) = aValues(r, c) 
27.
            End If 
28.
        Next 
29.
    Next 
30.
     
31.
    Rows(iRowNext & ":" & iRowLast).Delete Shift:=xlUp 
32.
    Cells(iRowFirst, 1).Resize(1, iColMax).Value = aNewValues 
33.
End Sub 
34.
 
35.
'Array-Zeile mit Wert in Spalte A ermitteln 
36.
Private Function GetRowValue(ByRef aValues) As Long 
37.
    Dim i As Long 
38.
     
39.
   'Falls Spalte A leer, dann Wert für Spalte B aus 1.er Array-Zeile 
40.
    GetRowValue = 1 
41.
 
42.
    For i = 1 To UBound(aValues, 1) 
43.
        If Not IsEmpty(aValues(i, 1)) Then 
44.
            GetRowValue = i:  Exit For 
45.
        End If 
46.
    Next 
47.
End Function
Gruß Dieter
Bitte warten ..
Mitglied: stschuck
03.07.2013 um 11:58 Uhr
Hallo Dieter,
das sieht schon beeindruckend aus - allerdings bekomme ich die Fehlermeldung: "Laufzeitfehler 9" Index außerhalb des gültigen Bereiches für diese Code-Zeile

:aNewValues(1, 1) = aValues(iRowValue, 1).

Mache ich etwas falsch?
Danke für eine Korrektur.
Viele Grüße Stefan
Bitte warten ..
Mitglied: 76109
03.07.2013 um 12:19 Uhr
Hallo stschuck!

Leider fehlt mir jetzt die Zeit für eine Korrektur, da ich gleich zur Arbeit muss...

Allerdings dürfte der Fehler auftreten, weil in Spalte A kein Wert steht?

Gruß Dieter
Bitte warten ..
Mitglied: stschuck
03.07.2013 um 12:31 Uhr
Hallo Dieter, ja, daran liegt's. In der Spalte A steht nur gelegentlich ein Wert. Ich kann aber prima damit arbeiten, wenn ich einfach die leeren betreffenden Zellen zwischenzeitlich mit einem Hilfszeichen fülle. Dann funktioniert's.
GANZ HERZLICHEN DANK - und gutes Arbeiten
Stefan.
Bitte warten ..
Mitglied: 76109
04.07.2013, aktualisiert um 01:06 Uhr
Hallo Stefan!

Habe im Code (Codezeile 40) noch eine Korrektur eingefügt, wodurch die Spalte A auch Leer sein darf.

Die Korrektur hat folgende Auswirkungen:
Ist die Spalte A im markierten Bereich leer, dann wird der Wert für Spalte B aus der 1.en markierten Zeile übernommen.
Ist die Spalte A im markierten Bereich (beliebige Zeile) nicht leer , dann wird der Wert in Spalte A und der Wert für Spalte B aus der Zeile, in der die Spalte A einen Wert enthält übernommen.

Gruß Dieter
Bitte warten ..
Neuester Wissensbeitrag
Off Topic

"Ich habe nichts zu verbergen"

(2)

Erfahrungsbericht von FA-jka zum Thema Off Topic ...

Ähnliche Inhalte
VB for Applications
Excel Makro zum Suchen von Spalten und exportieren in CSV (3)

Frage von Raptox zum Thema VB for Applications ...

Microsoft Office
gelöst Excel Makro zum Sortieren von Spalten an größeres Dokument Anpassen (2)

Frage von Rolfor zum Thema Microsoft Office ...

Microsoft Office
gelöst Inhalte vieler excel dateien auslesen und als Liste wiedergeben (13)

Frage von tw3aker zum Thema Microsoft Office ...

Microsoft Office
gelöst Excel VBA - Inhalte und Dateiname von txt-Dateien automatisch in Excel importieren (2)

Frage von Booster07 zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Linux Netzwerk
gelöst DHCP vergibt keine Adressen (32)

Frage von Maik82 zum Thema Linux Netzwerk ...

CPU, RAM, Mainboards
Kaufberatung für mind. 8 verschiedene HighEnd-Mainboards (20)

Frage von yperiu zum Thema CPU, RAM, Mainboards ...

Apache Server
gelöst Lets Encrypt SSL mit Apache2 (20)

Frage von banane31 zum Thema Apache Server ...

Mac OS X
Mac kann nicht im LAN pingen alle anderen schon (14)

Frage von smartino zum Thema Mac OS X ...