So fügen Sie zwei Excel-Spalten in eine (die andere Richtung) ein

15231
claws

Ich habe eine Liste wie in Aund BSpalten, und ich möchte wie folgt zusammenführen D:

Enter image description here

Wie kann ich das machen?

Hier werden Alphabete (a, b, c, d, e, f, g, h) nur als Platzhalter verwendet. Was ich wirklich brauche, column Dist A1, B1, A2, B2, A3, B3, A4, B4.

6

7 Antworten auf die Frage

8
default locale

Eine nicht so einfach zu wartende formelbasierte Lösung ist die Verwendung der folgenden Formel in D:

=INDEX($A$1:$B$5,QUOTIENT(ROW()+1,2),IF(MOD(ROW(),2)=0,2,1)) 

Lassen Sie mich die Formatierung hinzufügen und in Teilen erklären:

=INDEX( $A$1:$B$5, QUOTIENT(ROW()+1,2), IF(MOD(ROW(),2)=0,2,1) ) 

So INDEXwird Zelle in einem Bereich durch Koordinaten zurückgegeben. Argumente sind:

  1. $A$1:$B$5 - Bereich, der zwei Spalten enthält.
  2. QUOTIENT(ROW()+1,2) - Ganzzahldivision einer aktuellen Zeilennummer durch 2. Dies gibt die Zeilennummer im Bereich von (1) an.
  3. IF(MOD(ROW(),2)=0,2,1)- Rest der ganzzahligen Division von (2). Das ergibt die Spaltennummer im Bereich von (1).

Die Lösung ist nicht wirklich flexibel und es sind geringfügige Verbesserungen erforderlich, um Folgendes zu unterstützen:

  • Mehr als zwei Spalten
  • Nicht benachbarte Säulen
  • Ergebnis in einem bestimmten Bereich (z. B. ab D5)
Schön, um dies wirklich flexibel zu machen, können Sie es folgendermaßen ändern: `= INDEX (Myrange, ROUNDUP ((ROW () - StartRow + 1) / NumOfCols, 0) + IF (RangeIncHeaders =" Yes ", 1,0) , MOD (ROW () - StartRow, NumOfCols) +1) ` Andi Mohr vor 11 Jahren 1
Wenn Sie `StartRow`,` NumOfCols` und `RangeIncHeaders` als benannte Bereichsvariable festlegen, können Sie diese Formel einfach kopieren und einfügen. Andi Mohr vor 11 Jahren 1
@AndiMohr: Kannst du ein Beispiel für diese Formel geben? Ich habe es versucht, hatte aber einige Fehler. Vielen Dank AHC vor 9 Jahren 0
@AHC Ich werde eine neue Antwort posten, in der erklärt wird, wie dies funktionieren würde. Andi Mohr vor 9 Jahren 1
@AHC - [los geht's] (http://superuser.com/a/893775/151054) Andi Mohr vor 9 Jahren 1
3
Martín Canaval

Wenn es Ihnen nichts ausmacht, ein Makro zu verwenden, ist hier eine Idee.

Sub MergeColumnsAlternating() Dim total, i, rowNum as Integer total = 4 '' whatever number of rows you need to merge. i = 1 For rowNum = 1 to total Range("D" & i) = Range("A" & rowNum) i = i + 1 Range("D" & i) = Range("B" & rowNum) i = i + 1 Next rowNum End Sub 

Ich bin mit meiner VBA super rostig (ich kann mich kaum daran erinnern), ich habe seit vielen Jahren kein Büro mehr genutzt, wollte aber trotzdem etwas beitragen.

3
Andi Mohr

Aufbauend auf der ausgezeichneten Antwort des Standardgebietsschemas (und als Antwort auf die Anforderung von AHC) können Sie Flexibilität hinzufügen, indem Sie einige Variablen definieren und die Formel anpassen.

Beginnen wir mit dem Ergebnis des Standardgebietsschemas.

Leider wird die hier verwendete Formel beschädigt, wenn Sie mehr als 2 Spalten haben oder Ihre Ausgabe nicht in derselben Zeile wie Ihr Bereich beginnt.

Definieren Sie einige Variablen, um die Zeile anzugeben, mit der Ihre Ausgabe beginnen soll, und die Anzahl der Spalten in Ihrem Bereich.

Das graue Feld oben zeigt unsere Variablen. Benennen Sie für die Zellen G1, G2 und G3 den Bereich, indem Sie nacheinander auf jede Zelle klicken und dann in das gelb markierte Feld klicken. Geben Sie die entsprechenden Bereichsnamen: StartRow, NumOfColsund RangeIncHeaders.

Jetzt können Sie die ursprüngliche Formel durch unsere neue ersetzen, die Variablen verwendet:

=INDEX( $A$1:$B$4, ROUNDUP((ROW()-StartRow+1)/NumOfCols,0)+IF(RangeIncHeaders="Yes",1,0), MOD(ROW()-StartRow,NumOfCols)+1 ) 

Nun fügen wir eine dritte Spalte ein. Ändern Sie den Bereich, auf den in der Formel verwiesen wird $A$1:$C$4, um die Tatsache zu ermitteln, dass es 3 Spalten gibt. Auch NumOfColsauf 3 setzen.

Lassen Sie uns zum Beispiel auch die Ausgabe nach unten verschieben, sodass sie in Zeile 5 statt in Zeile 1 beginnt. Setzen Sie StartRowden Wert auf 5.

Schließlich möchten Sie vielleicht Zeilenheader ein- und ausschalten können. Wenn ja gerade eingestellt RangeIncHeaderszu Yes.

2
pnuts

Zwischensumme für jede Änderung in ColumnA, filtern und wählen Sie die Zwischensummenzeilen aus (z. B. indem Sie nach Anzahl suchen), leeren Sie diese Zellen aus, entfernen Sie den Filter, verschieben Sie ColumnB eine Zeile nach unten und verketten Sie die beiden Spalten.

Genauer:

Die Anforderung für Interleaving wäre einfacher zu erfüllen, wenn jede alternative Zeile leer wäre. Zwischensumme hat bereits die Möglichkeit, Zeilen hinzuzufügen und kann dazu verwendet werden. In der Frage sieht es so aus, als ob sich jede Zelle unterscheidet, so dass eine Zählung bei jeder Änderung eine Zwischensumme für jeden Eintrag erstellen sollte. [Wenn die Daten benachbarte Wiederholungen haben, kann eine "Helfer" -Spalte verwendet werden (sagen wir hier ColumnD, da die Helfer-Spalte nur vorübergehend benötigt wird). Sagen Schlüssel 1in D1und ziehen fill Griff nach unten so weit wie -ROW 4 in Frage erforderlich - mit Ctrl. Deprimiert]

Bei der Zwischensumme für jede Änderung (ColumnA, wenn möglich, sonst ColumnD) werden Zwischensummen eingefügt, zum Beispiel:

SU539258 erstes Beispiel

Bei der Filterung können die Zeilen mit den Zwischensummen ausgewählt werden (z. B. Textfilter, Enthält, Schlüssel "Anzahl", OK) und ausgeblendet werden (die Zeilen sind erforderlich, nicht jedoch deren Inhalt). Spaltenbeschriftungen können gleichzeitig gelöscht werden, wenn sie nicht benötigt werden.

Das mittlere kleine Bild zeigt, dass abwechselnd leere Zeilen erzielt wurden, woraufhin die Zwischensummen entfernt werden können und eine Zelle am oberen Rand von ColumnB eingefügt werden kann.

Die ursprünglichen Daten sind immer noch intakt (obwohl jetzt voneinander getrennt), und die ColumnD-Einträge können durch Verkettung aus den Spalten A und B "verschoben" werden, z. B. mit der Formel wie im rechten Bild (ggf. nach unten kopiert). Wenn die Originaldaten Text oder Werte waren, können die Formeln in ColumnD durch Copy / Paste Special / Values ​​ersetzt werden.

Es gibt möglicherweise bessere Wege, um das Ergebnis zu erzielen, aber das ist schwer zu sagen, ohne zu wissen, was sich in den Spalten A und B befindet (z. B. Formeln [mit oder ohne Beziehungsbezug?], Text oder Werte?).

SU539258 zweites Beispiel

Hier werden Alphabete (a, b, c, d, e, f, g, h) nur als Platzhalter verwendet. Was ich in 'Spalte D' wirklich brauche, ist A1, B1, A2, B2, A3, B3, A4, B4 claws vor 11 Jahren 1
Sie haben viel gesagt, was ich nicht verstehen kann. claws vor 11 Jahren 1
1
Sumeet Pujari

A1 = a
B1 = b

Was ich verstehe ist, dass Sie in D1 eine Ausgabe als "ab" benötigen, die A1, B1 ist. Und dann brauchen Sie eine Formel als =A1&B1.

1
Srikanth Reddy

Angenommen, Sie haben Spalten wie unten in Excel,

   A1 B1
------- --------
    1 a
    2 b
    3 c

Wenden Sie dann die Formel in der C1-Spalte an =INDEX($A:$B,CEILING(ROWS(C$1:C1)/2,1),2-MOD(ROWS(C$1:C1),2)). Sie erhalten Ihr gewünschtes Ergebnis in c1.

-1
Saurav Agarwal

= einzigartig (transponieren ()) Dies sollte dem Zweck dienen!

Wie dient es dem Zweck? Was erreicht es besser als andere Lösungen? Bitte beachten Sie, dass fast alle anderen Lösungen Erklärungen und Details in ihren Antworten enthalten. Sie sollten sich bemühen, dasselbe zu tun. Mokubai vor 6 Jahren 2