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, 1841 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 ..
Ä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 ...

VB for Applications
gelöst EXCEL Macro oder ähnliches gesucht (3)

Frage von reissaus73 zum Thema VB for Applications ...

Neue Wissensbeiträge
RedHat, CentOS, Fedora

Fedora, RedHat, Centos: DNS-Search Domain setzen

(10)

Tipp von Frank zum Thema RedHat, CentOS, Fedora ...

Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Router & Routing

PfSense auf Supermicro Intel Xeon D-15x8 SoC Bare Bone

Tipp von Dobby zum Thema Router & Routing ...

Heiß diskutierte Inhalte
Windows 10
Windows für Privatanwender "nicht mehr handhabbar" (26)

Frage von FA-jka zum Thema Windows 10 ...

LAN, WAN, Wireless
Brauche Hilfe: Mit (schnellem) WLAN Strecke überbrücken (23)

Frage von pierrehansen zum Thema LAN, WAN, Wireless ...

Basic
Programmierung von Windows Programmen (10)

Frage von Ghost108 zum Thema Basic ...