J'ai quelques centaines de cellules dans Excel que je voudrais concaténer en une seule chaîne. Pour ce faire, existe-t-il une méthode plus simple que de les parcourir un à un manuellement afin de les saisir dans CONCATENATE(A1, A2, ....)
?
CONCATENATE(A1:A255)
ne fonctionne pas.
* Dans un nouvel onglet, tapez A1 dans la cellule A1,
* Type A2 dans la cellule A2
* Utilisez des séries de remplissage pour compléter les valeurs de la colonne A
* Type A1 dans la cellule B1
Utilisez ce forum dans la cellule B2
= B1 & "," & A2
Copiez la formule.
Copiez et collez des valeurs pour récupérer la chaîne de valeurs que vous avez créée.
A1 A1
A2 A1,A2
A3 A1,A2,A3
A4 A1,A2,A3,A4
A5 A1,A2,A3,A4,A5
A6 A1,A2,A3,A4,A5,A6
A7 A1,A2,A3,A4,A5,A6,A7
A8 A1,A2,A3,A4,A5,A6,A7,A8
A9 A1,A2,A3,A4,A5,A6,A7,A8,A9
A10 A1,A2,A3,A4,A5,A6,A7,A8,A9,A10
Appuyez sur Alt-F11
, insérez un nouveau module, collez le code ci-dessous.
Public Function concatRange(data As Range, Optional sep As String = "") As String
Dim ret As String
Dim sep2 As String
ret = ""
sep2 = ""
For Each cell In data
ret = ret & sep2 & cell.Value
sep2 = sep
Next cell
concatRange = ret
End Function
Usage:
=concatRange(A8:D11;", ") 'OS with ; list separator
=concatRange(A8:D11,", ") 'OS with , list separator or in a macro code
ou
=concatRange(A8:D11)
Voir ce billet de blog ici: http://www.dullsharpness.com/2011/11/14/Excel-vba-range-to-csv-range2csv-function/
Vous pouvez l'utiliser comme ça, par exemple avec un séparateur de tuyau:
=Range2Csv(A1:A255,"|")
Accédez à votre éditeur VBA en utilisant Alt+F11
et déposez-le dans un module.
L'extrait de code est ici:
Option Explicit
'**********************************************
'* PURPOSE: Concatenates range contents into a
'* delimited text string
'*
'* FUNCTION SIGNATURE: Range2Csv(Range, String)
'*
'* PARAMETERS:
'* Range - the range of cells whose contents
'* will be included in the CSV result
'* String - delimiter used to separate values
'* (Optional, defaults to a comma)
'*
'* AUTHOR: www.dullsharpness.com
'*
'* NOTES: [add'l notes removed for brevity]
'*
'**********************************************
Public Function Range2Csv(inputRange As Range, Optional delimiter As String)
Dim concattedList As String 'holder for the concatted CSVs
Dim rangeCell As Range 'holder cell used in For-Each loop
Dim rangeText As String 'holder for rangeCell's text
'default to a comma delimiter if none is provided
If delimiter = "" Then delimiter = ","
concattedList = "" 'start with an empty string
'Loop through each cell in the range to append valid contents
For Each rangeCell In inputRange.Cells
rangeText = rangeCell.Value 'capture the working value
'Only operate on non-blank cells (i.e. Length > 0)
If Len(rangeText) > 0 Then
'Strip any delimiters contained w/in the value itself
rangeText = WorksheetFunction.Substitute(rangeText, delimiter, "")
If (Len(concattedList) > 0) Then
'prepend a delimiter to the new value if we
'already have some list items
concattedList = concattedList + delimiter + rangeText
Else
'else if the list is blank so far,
'just set the first value
concattedList = rangeText
End If
End If
Next rangeCell
'Set the return value
Range2Csv = concattedList
End Function
concaténer (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a14, a16, a16, a17, a19, a20, a21, a22, a22, a23, a24, A25, A26, A27, A28, A29, A30, A31, A32, A33, A34, A35, A36, A37, A38, A39, A40, A42, A42, A44, A45, A46, A47, A47, A48, A49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62, a63, a63, a64, a65, a65, a67, a67, a69, a60, a60, a61 A75, A76, A77, A78, A79, A80, A81, A82, A83, A84, A85, A86, A87, A88, A89, A90, A92, A92, A94, A95, A96, A97, A97, A98, A98, a100, a101, a102, a103, a104, a105, a106, a107, a107, a108, a109, a110, a110, a111, a112, a115, a115, a116, a117, a118, a119, a119, a119 a125, a126, a127, a128, a129, a130, a131, a132, a133, a134, a135, a135, a136, a138, a139, a140, a141, a142, a143, a143, a146, a146, a146, a146, a146 a150, a151, a152, a153, a154, a155, a156, a157, a158, a159, a160, a161, a162, a163, a165, a166, a167, a167, a168, a169, a169, a162, a172, a172 a175, a176, a177, a178, a179, a180, a181, a182, a183 , a184, a185, a186, a187, a188, a189, a190, a191, a192, a193, a194, a195, a195, a196, a197, a199, a200, a202, a202, a203, a203, a205, a205, a205, a , a209, a210, a211, a212, a213, a214, a215, a216, a217, a218, a219, a220, a221, a222, a224, a225, a226, a227, a228, a229, a230, a232, , a234, a235, a236, a237, a238, a239, a240, a241, a242, a243, a244, a244, a245, a246, a247, a248, a249, a242, a242, a242, a243, a244, a244, a244, a246
PowerShell il!
"concatenate(a$((1..255) -join ', a'))" | clip
Ouvrir le fichier texte copier et coller
Cette fonction VBA concaténera le contenu des cellules, avec un séparateur facultatif, si nécessaire. Copiez-le dans un module standard:
Option Explicit
Function Concat(CellRange As Range, Optional Delimiter As String) As String
' this function will concatenate a range of cells and return the result as a single string
' useful when you have a large range of cells that you need to concatenate
' source: http://chandoo.org/wp/2008/05/28/how-to-add-a-range-of-cells-in-Excel-concat/
Dim retVal As String, dlm As String, cell As Range
retVal = ""
If Delimiter = Null Then
dlm = ""
Else
dlm = Delimiter
End If
For Each cell In CellRange
If CStr(cell.Value) <> "" And CStr(cell.Value) <> " " Then
retVal = retVal & CStr(cell.Value) & dlm
End If
Next
If dlm <> "" Then
retVal = Left(retVal, Len(retVal) - Len(dlm))
End If
Concat = retVal
End Function
Ma méthode préférée consiste à copier-coller les valeurs dans un éditeur qui autorise les expressions régulières, puis à supprimer les onglets (ou espaces) avec une recherche et un remplacement de ma sélection actuelle.
Vous pouvez également l'utiliser pour insérer des virgules, des espaces ou tout ce que vous voulez.
C'est un tonne plus rapide que de taper =concatenate(A1,",","A2",",",......)
Si vous recherchez une approche purement Excel (c'est-à-dire sans VBA), la méthode proposée par James Jenkins est la meilleure . Si vous préférez utiliser VBA, ouvrez l'éditeur VBA, ajoutez un nouveau module et ajoutez le code suivant:
Option Explicit
Public Function JoinText(cells As Variant,Optional delim_str As String) As String
If cells.Columns.count < cells.Rows.count Then
JoinText = Join(WorksheetFunction.Transpose(cells), delim_str)
Else
JoinText = Join(WorksheetFunction.Transpose(WorksheetFunction.Transpose(cells)), delim_str)
End If
End Function
Pour ouvrir l'éditeur VBA, appuyez facilement sur Alt-F11 . Pour insérer un module, cliquez avec le bouton droit de la souris sur le classeur répertorié dans la fenêtre 'Projet'.
La fonction est appelée depuis Excel comme suit:
=JoinText(A1:C1)
Si vous souhaitez ajouter un délimiteur (par exemple une virgule):
=JoinText(A1:C1,",")
Le but de l’utilisation de la fonction transposée est de transformer le tableau 2D, les «cellules», en tableau 1D. La raison pour cela est que la fonction VBA Join accepte uniquement un tableau 1d . La raison de l’utilisation de deux d’entre elles est que si JoinText examine une ligne de cellules (qui n’est encore qu’un tableau 2D), le premier appel à transpose, transpose ce tableau de rangées 2D en un tableau de colonnes 2D, le deuxième appel le transforme en tableau 1D.
Ce n'est pas purement Excel, mais il existe un moyen facile de le faire avec Word.
Si vous avez Excel 2016, vous pouvez utiliser une formule matricielle:
Entrer
= concat (a1: a255)
dans la cellule, puis appuyez sur
[ctrl] + [shift] + [enter]
Sans vergogne copié depuis ce site :
- Sélectionnez la cellule où vous avez besoin du résultat.
- Allez à la barre de formule et entrez ... "= A1: A5"
- Sélectionnez la formule entière et appuyez sur F9 (cela convertit la formule en valeurs).
- Supprimer les accolades des deux extrémités.
- Ajoutez = CONCATENATE (au début du texte et terminez-le par un crochet rond).
- Appuyez sur Entrée.
Ce qui est particulièrement révélateur ici, c'est que lors de la modification d'une formule, une pression sur F9 remplace la formule par le résultat de cette formule. Là où c'est une plage, il la remplace par une liste du contenu de cette plage.
où les valeurs que vous souhaitez concaténer commencent à la ligne 2, colonne 3 de votre feuille
Sub GOWN()
roww = 2
Do While cells(roww, 2) <> ""
aa = cells(roww, 3)
dd = dd & aa & ","
roww = roww + 1
Loop
cells(roww + 1, 3) = dd
End Sub
Ajoutez simplement votre déliminateur dans une concaténation:
=concatenate(A1, ",")
Copiez ensuite toutes les concaténations, collez-les en tant que valeurs. Copiez ensuite ces valeurs, collez-les dans une transposition. Copiez ensuite les valeurs transposées et collez-les dans un éditeur Word. Faites une recherche pour le déliminateur ET l’espace précédant les valeurs et remplacez-le par JUST le déliminateur. Cela devrait vous donner une chaîne concaténée de toutes les valeurs avec un délimiteur. C'est beaucoup plus facile que d'autres options.