Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1808to1812
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

Zellen aus mehreren Spalten sortieren

Zellen aus mehreren Spalten sortieren
26.01.2021 14:19:23
Katrin
Hallo,
ich habe eine Tabelle vorliegen, in der jeweils eine Person pro Zeile aufgelistete ist und diese Person jeweils mit verschiedenen Merkmalen beschrieben ist. Die Merkmale verteilen sich auf die Spalten hinter dem Namen.
Die Merkmale sind leider nicht sortiert, d.h. ich finde das Alter einer Person mal in Spalte B, das der nächsten Person in Spalte D und das der dritten Person in Spalte C. Ich möchte aber, dass das Alter immer in Spalte B zu finden ist.
Ich habe mal eine Beispieldatei (mit weniger Personen und Merkmalen) angehängt. Tabelle 1 zeigt, wie die Daten im Original vorliegen, Tabelle 2 zeigt wie ich sie gerne vorliegen hätte.
Da die die Tabelle ziemlich groß ist, brauche ich eine automatische Lösung via VBA. Ich hab schon gesucht und gesucht, bin aber nicht mal annähernd in die Richtung einer Lösung gekommen.
Hat jemand eine Idee?
https://www.herber.de/bbs/user/143327.xlsx

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: nachgefragt ...
26.01.2021 14:29:39
neopa
Hallo Katrin,
... die Jahre und die Größe richtig zuzuordnen ist nicht das Problem, vorausgesetzt die Daten sind auch wirklich immer eindeutig erfasst.
Doch gibt es auch eine zusätzliche Liste welche Farben und Eigenschaften verwendet wurden? Nur so können die Textwerte auch richtig zugeordnet werden.
Noch nachgefragt: wie viele Datensätze sind denn ca. auszuwerten?
Gruß Werner
.. , - ...
AW: Liste aller Atribute
26.01.2021 14:29:51
Fennek
Hallo Katrin,
damit ein Zuordnung eindeutig bleibt/wird, sollte entweder eine vollständige Liste der Farben oder der "Personality"-Beschreibung zur Verfügung stehen.
mfg
Anzeige
AW: als Formellösung ...
26.01.2021 14:55:57
neopa
Hallo Katrin,
... mit je einer Definitionsliste der "Farben"
Arbeitsblatt mit dem Namen 'Tabelle1'
 ABCDEFGH
1Jana28 JahreBraun165 cmabenteuerlustig  Farbe
2MariaBlond36 Jahrechaotisch195 cm  Rot
3Kevinehrgeizig168 cmRot70 Jahre  Blond
4Nikolas177 cmfamiliär60 JahreBraun  Braun
5Diana180 cmkreativBlond48 Jahre   
6        
Verwendete Systemkomponenten: [Windows (32-bit) NT 6.02] MS Excel 2010
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg

und anaolog der "Eigenschaften", könnte z.B. so aussehen:
Arbeitsblatt mit dem Namen 'Tabelle2'
 ABCD
1Jana28 Jahre165 cmBraun
2Maria36 Jahre195 cmBlond
3Kevin70 Jahre168 cmRot
4Nikolas60 Jahre177 cmBraun
5Diana48 Jahre180 cmBlond
6    

ZelleFormatWert
B10 "Jahre"28
C10 "cm"165

ZelleFormel
B1=WENNFEHLER(AGGREGAT(15;6;WECHSELN(Tabelle1!$B1:$E1;"Jahre";"")/SUCHEN("Jahr";Tabelle1!$B1:$E1)^0;1);"")
C1=WENNFEHLER(AGGREGAT(15;6;WECHSELN(Tabelle1!$B1:$E1;"cm";"")/SUCHEN("cm";Tabelle1!$B1:$E1)^0;1);"")
Verwendete Systemkomponenten: [Windows (32-bit) NT 6.02] MS Excel 2010
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg

Die Formel für E1 natürlich analog zu D1.
Alternativ wäre auch eine PowerQuery-Lösung möglich. Aber auch die erfordert die zusätzlichen Defintionslisten.
Gruß Werner
.. , - ...
Anzeige
AW: Zellen aus mehreren Spalten sortieren
26.01.2021 14:58:24
Nepumuk
Hallo Katrin,
teste mal:
Option Explicit

Public Sub AdjustData()
    
    Dim objCell As Range
    Dim strFirstAddress As String
    Dim vntItem As Variant, avntValues() As Variant
    Dim lngRow As Long
    Dim objDictionary As Object
    
    Set objDictionary = CreateObject(Class:="Scripting.Dictionary")
    
    With Worksheets("Tabelle1")
        
        Redim avntValues(1 To .Cells(.Rows.Count, 1).End(xlUp).Row, 1 To 5)
        
        For lngRow = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
            
            avntValues(lngRow, 1) = .Cells(lngRow, 1).Value
            
            objDictionary.Item(Key:=.Cells(lngRow, 1).Address) = vbNullString
            
        Next
        
        Set objCell = .Cells.Find(What:="Jahre", LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False)
        
        If Not objCell Is Nothing Then
            
            strFirstAddress = objCell.Address
            
            Do
                
                If objCell.Column > 1 Then
                    
                    avntValues(objCell.Row, 2) = objCell.Value
                    
                    objDictionary.Item(Key:=objCell.Address) = vbNullString
                    
                End If
                
                Set objCell = .Cells.FindNext(After:=objCell)
                
            Loop Until objCell.Address = strFirstAddress
        Else
            Call MsgBox("Suchbegriff ''Jahre'' nicht gefunden.", vbCritical, "Programmabbruch")
            Exit Sub
        End If
        
        Set objCell = .Cells.Find(What:="cm", LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False)
        
        If Not objCell Is Nothing Then
            
            strFirstAddress = objCell.Address
            
            Do
                
                If objCell.Column > 1 Then
                    
                    avntValues(objCell.Row, 3) = objCell.Value
                    
                    objDictionary.Item(Key:=objCell.Address) = vbNullString
                    
                End If
                
                Set objCell = .Cells.FindNext(After:=objCell)
                
            Loop Until objCell.Address = strFirstAddress
        Else
            Call MsgBox("Suchbegriff ''cm'' nicht gefunden.", vbCritical, "Programmabbruch")
            Exit Sub
        End If
        
        For Each vntItem In Array("Blond", "Rot", "Braun", "Grau")
            
            Set objCell = .Cells.Find(What:=vntItem, LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False)
            
            If Not objCell Is Nothing Then
                
                strFirstAddress = objCell.Address
                
                Do
                    
                    If objCell.Column > 1 Then
                        
                        avntValues(objCell.Row, 4) = objCell.Value
                        
                        objDictionary.Item(Key:=objCell.Address) = vbNullString
                        
                    End If
                    
                    Set objCell = .Cells.FindNext(After:=objCell)
                    
                Loop Until objCell.Address = strFirstAddress
            End If
        Next
        
        For Each objCell In .Range(.Cells(1, 2), .Cells(.Rows.Count, 5).End(xlUp))
            
            If Not objDictionary.Exists(Key:=objCell.Address) Then _
                avntValues(objCell.Row, 5) = objCell.Value
            
        Next
        
        .Cells(1, 1).Resize(.Cells(.Rows.Count, 1).End(xlUp).Row, 5).Value = avntValues
        
    End With
    
    Set objDictionary = Nothing
    
End Sub

Gruß
Nepumuk
Anzeige
AW: Zellen aus mehreren Spalten sortieren
26.01.2021 16:09:59
Herbert_Grom
Hallo Nepumuk,
ein kleiner Fehler ist da noch drin, denn er macht sowohl Maria als auch Kevin Rot. Schau's dir mal an.
Servus
AW: Zellen aus mehreren Spalten sortieren
27.01.2021 11:36:58
Nepumuk
Hallo Herbert,
bei mir nicht:
Jana28 Jahre165 cmBraunabenteuerlustig
Maria36 Jahre195 cmBlondchaotisch
Kevin70 Jahre168 cmRotehrgeizig
Nikolas60 Jahre177 cmBraunfamiliär
Diana48 Jahre180 cmBlondkreativ

Gruß
Nepumuk
Anzeige
AW: Zellen aus mehreren Spalten sortieren
27.01.2021 11:43:05
Herbert_Grom
Hallo Nepumuk,
das ist wirklich komisch! Gestern habe ich es 3 mal getestet und jedes Mal kam das falsche Ergebnis. Jetzt habe ich es noch einmal getestet und es kam das korrekte Ergebnis! Sehr seltsam!
Aber egal, ich nehme meine "Anschuldigung" hiermit zurück! ;o)=)
Servus
AW: Zellen aus mehreren Spalten sortieren
27.01.2021 12:39:13
Nepumuk
Hallo Herbert,
es sei dir verziehen. -:)
Gruß
Nepumuk
AW: Zellen aus mehreren Spalten sortieren
26.01.2021 15:14:54
Günther
Moin Katrin,
alternativ geht es auch per Power Query. Dieses Tool ist dann auch in der Lage, bei einmal zugeordneten Werten für Haarfarbe und Typus ohne VBA und ohne händisch eingegebene Formeln auszukommen.
 
Gruß
Günther  |  mein Excel-Blog
Anzeige
AW: als Lösungsmöglichkeit schon benannt owT
26.01.2021 15:23:27
neopa
Gruß Werner
.. , - ...
AW: als Lösungsmöglichkeit schon benannt owT
26.01.2021 17:15:21
Günther
Stimmt,
irgendwie war ich mit Blindheit geschlagen … :-(
 
Gruß
Günther  |  mein Excel-Blog
AW: Zellen aus mehreren Spalten sortieren
27.01.2021 09:15:58
Katrin
Guten Morgen und vielen Dank für die vielen Antworten.
Die Listen z.B. zu Haarfarben oder Persönlichkeitsmerkmalen sind eine gute Idee und theoretisch könnte ich für Haarfarben oder auch Körpergrößen solche Listen anlegen. Das Problem ist leider, dass alle anderen Eigenschaften wie z.B. Persönlichkeitsmerkmale frei wählbar sind und im Grunde alles inklusive Rechtschreibfehlern sein könnte.
Die Listen können bis zu 500 Personen mit 100 Merkmalen umfassen, auch das ist variabel. Das einzige was immer feststeht ist der Name in Spalte A. Ich weiß, keine besonders guten Voraussetzungen. Um trotzdem etwas Struktur reinzubekommen, überlege ich jetzt folgendes:
  • Eine Spalte pro Eigenschaft: Die Tabelle wird nach exakt gleichen Eigenschaften durchsucht (ohne dass ich weiß welche das genau sind) und sortiert jede dieser Eigenschaften in eine eigene Spalte. D.h. ich hätte z.B. eine Spalte für die Haarfarbe Braun, eine für Blond, eine für Rot, etc. Bei Personen, die dieses Merkmal nicht erfüllen, bleibt die Zelle entsprechend leer.

  • Da sich auch Rechtschreibfehler und unterschiedliche Schreibweisen in der Tabelle befinden können, wäre es klasse, wenn auch einander ähnliche Wörter in dieselbe Spalte sortiert werden würden.

  • Ich denke, das würde mir die Weiterarbeit erleichtern. Meint ihr, das ist möglich?
    Anzeige
    AW: Zellen aus mehreren Spalten sortieren
    27.01.2021 10:06:29
    Günther
    Moin Katrin,
    hmmm… ich denke: möglich gewiss, sinnvoll gewiss nicht, was mehrere Spalten anbetrifft. Bei Haarfarben kannst du doch eine gewisse "Range" vorgeben und diese als Datenüberprüfung in ein Dropdown einfügen. Als Beispiel für Ähnlichkeiten: "blond" und "bloed" könnte ein an sich ja dummes System als identisch/ähnlich ansehen, was ja zu Irritationen führen könnte... ☺ Mit anderen Worten: Freitext so weit wie möglich einschränken und unbekannte Begriffe vorher korrigieren. Bei diesen wirklich wenigen Datensätzen ist das imho gut möglich.
     
    Gruß
    Günther  |  mein Excel-Blog
    Anzeige
    AW: möglich wäre es, ...
    27.01.2021 11:25:49
    neopa
    Hallo Katrin,
    ... wenn Du eine Liste aller möglichen "Haarfarben" definierst und diese korrekt in Deiner Quell-Dateniste geschrieben sind. Dann kann ich mit einer Formel auch die restliche Eigenschaft in der Datenzeile eindeutig zuweisen.
    Gruß Werner
    .. , - ...

    308 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige