10
votes

Excel - Combinez plusieurs colonnes dans une colonne

J'ai plusieurs listes dans des colonnes séparées dans Excel. Ce que je dois faire, c'est combiner ces colonnes de données dans une grande colonne. Je ne me soucie pas s'il y a des entrées en double, mais je veux sauter la rangée 1 de chaque colonne.

En outre, qu'en est-il si Row1 a des en-têtes de janvier à décembre et la longueur des colonnes est différente et doit être combine dans une grande colonne? xxx

devrait combiner dans xxx

la première ligne de chaque colonne doit être ignorée.


0 commentaires

5 Réponses :


1
votes

Je ne sais pas si cela aide complètement, mais j'avais un problème où j'avais besoin d'une fusion "intelligente". J'ai eu deux colonnes, A & B. Je voulais déplacer B sur 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 commentaires

1
votes
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

0 commentaires

21
votes

Essayez ceci. Cliquez n'importe où dans votre gamme de données, puis utilisez 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


3 commentaires

Ceci est un excellent bit de code. Une chose à garder à l'esprit est que l'entier est limité à 32768, j'ai donc utilisé une longue pour stocker ICOL et LastCell.


Merci. Et je suis d'accord que long est le choix le plus robuste.


Tu es le meilleur



3
votes

J'ai créé un exemple de tableur ici de la façon de faire cela avec des formules d'Excel simples et sans utiliser de macros (vous devrez effectuer vos propres ajustements pour vous débarrasser de la première rangée, mais cela devrait être facile une fois que vous trouverez Comment fonctionne mon exemple de tableur):

https://docs.google. com / a / umich.edu / feuille de calcul / ccc? touche = 0ausydfzlcrthdgjosnfwreotrzffm28twelpz1far2c # gid = 0


0 commentaires

10
votes

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

L'instruction utilise 3 si les fonctions, car elles doivent 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 vrai, la fonction retourne la valeur de la cellule de la colonne A qui est à la ligne (). Si le résultat est faux, la fonction passe à la relève suivante.
  • pour colonne B , la fonction compare le numéro de ligne d'une cellule avec le nombre total de cellules dans la plage de: B qui ne sont pas vides. Si le résultat est vrai, la fonction renvoie la valeur de la première cellule qui n'est pas vide dans la colonne B. Si False, la fonction passe à la relève 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 de: C non vide. Si le résultat est vrai, la fonction renvoie une cellule vierge et ne fait plus de calcul. Si FALSE, la fonction renvoie la valeur de la première cellule qui n'est pas vide dans la colonne C.

0 commentaires