2016-04-04 23 views
1

Ich mag Zellen in der rechten Spalte in eine Zelle kombinieren nach der benachbarten Zelle auf der linken Seite. Ich habe versucht, Zusammenführen, aber ich konnte nur so weit kommen. Und nachdem ich online gesucht habe, konnte ich nichts finden, was jede Zeile analysieren und für die Länge der linken Zelle kombinieren könnte. Ich weiß, dass es eine CONCATENATE-Funktion ist, aber wie soll ich die gesamte Tabelle analysieren?Je nach ihrer linken Spalte Zelle

Adjacent Cells

Dies ist ein Beispiel für die Ergebnisse, die ich für die oben möchte:

enter image description here

+0

Was ist die maximale Menge an Zusammenführung in der ersten Spalte? Sind es immer ein oder zwei Zeilen? Oder könnte es drei oder noch mehr sein? –

+0

Es ist unterschiedlich. Das Maximum, das ich habe, ist 20 Zeilen mit der gleichen linken Spalte Zelle, das kleinste ist keine Duplikate. –

+0

Ok. Ich habe eine Version, die für zwei Kombinationen ausmacht, aber ich denke, wenn man mehr als das gehen will, VBA würde es leichter machen. Es wird also nicht unbedingt alles in Formeln sein. –

Antwort

1

Dies kann zu kompliziert sein - in dem Fall, dass ich auf das Reißbrett würde zurückgehen und eine vollständige VBA-Version, aber zunächst suchte ich nach einer Herausforderung, eine Lösung nur mit Formeln zu konstruieren. Unglücklicherweise scheint es keinen auf Standardformeln basierenden Ansatz zum Verketten einer variablen Anzahl von Zellen zu geben.

Also, um dies zu erreichen, habe ich eine Funktion:

Function CombineRange(ByRef rng As Range, ByVal delim As String) 
    Dim arr 
    Dim i As Long 

    arr = rng.Value 

    CombineRange = "" 
    For i = 1 To UBound(arr) 
     If i > 1 Then 
      CombineRange = CombineRange & delim 
     End If 

     CombineRange = CombineRange & arr(i, 1) 
    Next i 

End Function 

Annahmen:

  • Ihre Daten in einem Blatt namens "YourData"
  • Ihre fusionierte Datenspalte ist ein
  • Ihre „einreihig“ Daten Spalte B
  • Zeile 1 eine Art von Kopfzeile ist.

your data

Als nächstes vier Spalten auf ein neues Blatt einrichten (ich nenne es "Komprimiert")

A - Startzeile = (erste Reihe), was Reihe Ihrer Daten beginnen (2 , in unserem Fall)

A - Startzeile = (alle anderen) A2+B2

B - Offset = {IFERROR(MATCH(FALSE,ISBLANK(INDIRECT(ADDRESS(A2+1,1,,,"YourData")&":A200")),0),0)}

Hinweis: Dies ist eine Array-Funktion, so müssen Sie Verschiebung tun + Geben Sie, wenn es

C Eingabe - Ebene 1 = =INDEX(YourData!A:A,A2)

D - Combined Stufe 2 = =IF(B2<=1, INDIRECT(ADDRESS(A2,2,,,"YourData")), CombineRange(INDIRECT(ADDRESS(A2,2,,,"YourData")&":"&ADDRESS(A2+B2-1,2)),"; "))

enter image description here

+0

Gibt es eine Formel, um die Startreihe zu erkennen, oder soll ich diese manuell eingeben? –

+0

Sorry, ich verstehe den ersten Teil nicht A Start Rows? –

+0

Für die erste Zeile ist es nur die Nummer 2 (dies ist die Zeile, in der die Daten beginnen). Für andere Zeilen verwenden Sie die Formel für Spalte A oben. –

Verwandte Themen