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? p> devrait combiner dans p> la première ligne de chaque colonne doit être ignorée. p> p>
5 Réponses :
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
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
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
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 b> est le choix le plus robuste.
Tu es le meilleur
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): p>
Vous pouvez combiner les colonnes sans utiliser de macros. Tapez la fonction suivante dans la barre de formule: L'instruction utilise 3 si les fonctions, car elles doivent combiner 3 colonnes: p>