2010-06-04 12 views
7

J'ai plusieurs listes qui sont dans des colonnes séparées dans Excel. Ce que je dois faire est de combiner ces colonnes de données dans une grande colonne. Peu importe s'il y a des entrées en double, mais je veux qu'il saute la ligne 1 de chaque colonne.Excel - Combiner plusieurs colonnes dans une colonne

De plus, que se passe-t-il si ROW1 a des en-têtes de janvier à décembre, et que la longueur des colonnes est différente et doit être combinée en une seule grande colonne?

ROW1| 1 2 3  
ROW2| A D G  
ROW3| B E H  
ROW4| C F I 

devrait combiner en

A  
B  
C  
D  
E  
F  
G  
H  
I 

La première rangée de chaque colonne doit être sauté.

Répondre

0

Je ne sais pas si cela aide complètement, mais j'ai eu un problème où j'avais besoin d'une fusion "intelligente". J'avais deux colonnes, A & B. Je voulais déplacer B seulement si A était vide. Voir ci-dessous. Il est basé sur une plage de sélection, que vous pourriez utiliser pour compenser la première rangée, peut-être.

Private Sub MergeProjectNameColumns() 
    Dim rngRowCount As Integer 
    Dim i As Integer 

    'Loop through column C and simply copy the text over to B if it is not blank 
    rngRowCount = Range(dataRange).Rows.Count 
    ActiveCell.Offset(0, 0).Select 
    ActiveCell.Offset(0, 2).Select 
    For i = 1 To rngRowCount 
     If (Len(RTrim(ActiveCell.Value)) > 0) Then 
      Dim currentValue As String 
      currentValue = ActiveCell.Value 
      ActiveCell.Offset(0, -1) = currentValue 
     End If 
     ActiveCell.Offset(1, 0).Select 
    Next i 

    'Now delete the unused column 
    Columns("C").Select 

    selection.Delete Shift:=xlToLeft 
End Sub 
0
Function Concat(myRange As Range, Optional myDelimiter As String) As String 
    Dim r As Range 
    Application.Volatile 
    For Each r In myRange 
    If Len(r.Text) Then 
     Concat = Concat & IIf(Concat <> "", myDelimiter, "") & r.Text 
    End If 
    Next 
End Function 
12

essayer. Cliquez n'importe où dans votre gamme de données, puis utiliser cette macro:

Sub CombineColumns() 
Dim rng As Range 
Dim iCol As Integer 
Dim lastCell As Integer 

Set rng = ActiveCell.CurrentRegion 
lastCell = rng.Columns(1).Rows.Count + 1 

For iCol = 2 To rng.Columns.Count 
    Range(Cells(1, iCol), Cells(rng.Columns(iCol).Rows.Count, iCol)).Cut 
    ActiveSheet.Paste Destination:=Cells(lastCell, 1) 
    lastCell = lastCell + rng.Columns(iCol).Rows.Count 
Next iCol 
End Sub 
5

vous pouvez combiner les colonnes sans utiliser des macros. Tapez la fonction suivante dans la barre de formule:

= IF (ROW() < = COUNTA (A: A), INDEX (A: A, ROW()), IF (ROW() < = COUNTA (A : B), INDEX (B: B, ROW() - NOMBRE (A: A)), SI (ROW()> NOMBRE (A: C), "", INDEX (C: C, ROW() - NOMBRE (a: B)))))

l'instruction utilise 3 fonctions SI, car il a besoin de combiner 3 colonnes:

  • pour la colonne a, la fonction compare le numéro de ligne d'une cellule avec le nombre total de cellules dans une colonne qui ne sont pas vides. Si le résultat est true, la fonction renvoie la valeur de la cellule de la colonne A située à la ligne(). Si le résultat est faux, la fonction passe à l'instruction IF suivante.
  • Pour la colonne B, la fonction compare le numéro de ligne d'une cellule avec le nombre total de cellules dans la plage A: B qui ne sont pas vides. Si le résultat est true, la fonction renvoie la valeur de la première cellule qui n'est pas vide dans la colonne B. Si la valeur est false, la fonction passe à l'instruction IF suivante.
  • Pour la colonne C, la fonction compare le numéro de ligne d'une cellule avec le nombre total de cellules dans la plage A: C qui ne sont pas vides. Si le résultat est true, la fonction renvoie une cellule vide et ne fait plus de calcul. Si la valeur est false, la fonction renvoie la valeur de la première cellule qui n'est pas vide dans la colonne C.
+0

Ceci est une réponse étonnante !! –

Questions connexes