293 Aufrufe
Gefragt in Tabellenkalkulation von
Gibt es in Excel eine Funktion, mit der man zB. spaltenweise gleiche Zellinhalte
einander ausrichten kann? Beispiel:

In Spalte A stehen untereinander die Zahlen 1 bis 12 (also 12 Zellen), in Spalte B
steht 3, 5, 11, aber in den oberen 3 Zellen natürlich.

Ich möchte jetzt per Befehl Spalte B so sortieren, dass die Zahlen 3,5,11 ihrem
"richtigen Gegenüber" in Spalte A gegenüberstehen. Also neben der 3 steht die 3
usw., die anderen Zellen in Spalte B bleiben leer.

In der weiteren Folge sollen am besten die Spalten C, D, E in der gleichen
Reihenfolge wie in Spalte B mitsortiert werden. Dh. der Wert der in Spalte C neben
der 3 stand soll nach dem Sortieren wieder neben der 3 stehen und so weiter.

Gibt es da etwas? Vielen Dank für Hilfe.

2 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

mit Excel-Bordmitteln geht das nicht. Das müsstest du über ein Makro machen.

Soll immer nur ein fester Bereich so sortiert werden? Und sind die Zahlen in der Spalte A bereits sortiert?

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo Donny,

sowas macht man normalerweise mit [url=https://support.office.com/de-de/article/sverweis-funktion-0bbc8083-26fe-4963-8ab8-93a18ad188a1]SVERWEIS[/url]. Angenommen du hast in Tabelle1 Spalte A die Zahlen 1 bis 12 und Tabelle2 Spalte A die Zahlen 3, 5, 11 samt Anhang. Dann könntest du in Tabelle1 B1 die Formel =wennfehler(SVERWEIS($A1;Tabelle2!$A$1:$C$3;SPALTE(A1);0);"") verwenden und dann runter und rüber ziehen.

Falls aber beide Listen nicht durchgäng fortlaufend sind, kann ein Makro hier durchaus Sinn machen. Markiere einfach den gewünschten Bereich (muss nicht unbedingt bei A1 beginnen) und starte den Code. Probier auch mal aus, wie es aussieht wenn die Liste in Spalte 1 Lücken enthält.

[code]Sub Ausrichten()
  
  If Selection.Rows.Count = 1 Then Exit Sub
  
  Const insertifmissing = False 'Wenn True werden nicht vorhandene Werte nachgetragen
  
  Set sel = Selection:  r = 1
  With sel
    'Falls Liste nicht sortiert ist, wird das hier nachgeholt
    Range(.Cells(1), .Cells(.Cells.Count)).Sort _
    Key1:=.Cells(1), Order1:=xlAscending, Header:=xlNo, Orientation:=xlSortColumns
    Range(.Cells(1).Offset(0, 1), .Cells(.Cells.Count)).Sort _
    Key1:=.Cells(1).Offset(0, 1), Order1:=xlAscending, Header:=xlNo, Orientation:=xlSortColumns
    
    Do
      Set c1 = .Columns(1).Cells 'Spalte 1 der Markierung
      Set c2 = Range(.Columns(2), .Columns(.Columns.Count)).Cells 'Spalte 2 bis n
      v = c2(r, 1) 'aktuell gesuchter Wert
      Set f = c1.Find(v, lookat:=xlWhole) 'gefundene Zelle
      If Not f Is Nothing Then 'wenn vorhanden
        p = f.Row - Selection.Row + 1 'Position in Liste
          e = p - r - c2.Row + .Row 'Einzufügende Zeilen
          If e > 0 Then
            Range(c2(r, 1), c2(r + e - 1, c2.Columns.Count)).Insert xlShiftDown
            r = r + e
          End If
      Else 'wenn nicht vorhanden
        If c1(r) > v Then
          c1(r).Insert xlShiftDown      'Wert bzw. Platzhaler wird in Spalte 1 hinzugefügt
          If insertifmissing Then c1(IIf(r = 1, 0, r)).Value = v
        ElseIf c1(r) < v Then
          c2.Rows(r).Insert xlShiftDown 'Wert wird erst um 1 Zeile verschoben, dann neu geprüft
        End If
      End If
      
      'Wenn eingefügter Bereich über die Markierung hinausgeht wird diese erweitert
      If c1(.Rows.Count + 1) <> "" Or c1(.Rows.Count + 1, 2) <> "" Then
          Set sel = Range(Selection, .Offset(1, 0)): sel.Select
      End If
        
      r = r + 1 'Wechsel zur nächsten Zeile
    Loop Until .Cells(r, 1) = "" Or .Cells(r, 2) = ""
            
  End With

End Sub[/code]

Gruß Mr. K.
...