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>