J'ai plusieurs listes qui sont dans des colonnes distinctes dans Excel. Ce que je dois faire, c'est combiner ces colonnes de données en une grande colonne. Je me fiche qu'il y ait des entrées en double, mais je veux qu'il saute la ligne 1 de chaque colonne.
Et 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 se combiner en
A
B
C
D
E
F
G
H
I
La première ligne de chaque colonne doit être ignorée.
Essaye ça. Cliquez n'importe où dans votre plage 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
Vous pouvez combiner les colonnes sans utiliser de 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 () - COUNTA (A: A)), IF (ROW ()> COUNTA (A: C), "", INDEX (C: C, ROW () - COUNTA (A: B)))))) =
L'instruction utilise 3 fonctions IF, car elle doit combiner 3 colonnes:
J'ai créé un exemple de feuille de calcul ici pour savoir comment le faire avec des formules Excel simples et sans utiliser de macros (vous devrez faire vos propres ajustements pour vous débarrasser de la première ligne, mais cela devrait être facile une fois que vous aurez compris comment mon exemple tableur):
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 et B. Je voulais déplacer B uniquement si A était vide. Voir ci-dessous. Il est basé sur une plage de sélection, que vous pourriez utiliser pour décaler la première ligne, 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
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