web-dev-qa-db-fra.com

Existe-t-il un moyen simple de transformer les colonnes en texte sans CONCATENATE dans Excel?

Je connais le bouton texte en colonnes. Le contraire peut-il être fait en sélectionnant des colonnes et éventuellement en exécutant une macro ou en utilisant un bouton similaire?

10
Bob Hopez

Normalement, je dis "S'il vous plaît, postez votre code" pour obtenir de l'aide/assistance pour la rédaction de macros, mais celle-ci est vraiment très simple.

Public Function ColumnsToText(rng As Range, Optional DelimitBy As String = " ") As String
'Applies on a row/partial row of data. Must be continuous cells, e.g., A1:D1.
Dim var As Variant

var = Application.Transpose(Application.Transpose(rng.Value))
    ColumnsToText = Join(var, DelimitBy)

End Function

Entrez-le dans une cellule de la feuille de calcul comme:

=ColumnsToText(A1:F1)

Ou vous pouvez spécifier un délimiteur facultatif, il s’agit d’un espace par défaut, mais vous pouvez utiliser n’importe quel caractère de chaîne:

=ColumnsToText(A1:F1,"%")

enter image description here

Etc.

11
David Zemens

La réponse que @David Zemens a donnée en utilisant une double transposition m'a intriguée. Sa réponse fonctionne bien. J'ai trouvé un autre moyen d'obtenir une seule ligne dans un tableau à 1 dimension. Aussi, je voulais une fonction capable de gérer une colonne. Alors voici ma réponse alternative.

Public Function ColumnOrRowToText(rng As Range, Optional DelimitBy As String = " ") As String
    'rng must be a single row or a single column; cannot handle multiple columns or rows

    Dim var As Variant
    If rng.Rows.Count = 1 Then
        var = Application.WorksheetFunction.Index(rng.Value, 1, 0) 'for a single row
    Else
        var = Application.Transpose(rng.Value) 'for a single column
    End If

    'var must be a 1 dimensional array
    ColumnOrRowToText = Join(var, DelimitBy)

End Function
4
D_Bester

Je crois que le vrai revers de Text-to-Columns est la formule TEXTJOIN. Les entrées de colonne sélectionnées seront renvoyées dans une cellule d'une longue chaîne séparée par un séparateur que vous pouvez définir vous-même.

 TEXT JOIN example

2
Warren

Si au lieu de cela, ce qui vous intéresse, c’est que votre colonne ne soit pas "pivotée" et qu’elle soit une valeur dans sa propre colonne, vous devez créer un fichier plat. 

Ceci est mieux réalisé avec la fonction "Rassembler" de R 'ou la fonction "Fusion" de Python Pandas. Cela peut également être accompli par le biais de macros dans Excel. Si vous ne connaissez pas les macros, une approche plus rudimentaire consiste à: 

  1. créez une nouvelle feuille et collez toutes les valeurs de votre première colonne (en supposant qu'il s'agisse d'une colonne que vous souhaitez conserver) en tant que première colonne de la nouvelle feuille de calcul (colonne A). Maintenant, dans la colonne B, collez le nom du premier en-tête de colonne *** que vous souhaitez attribuer à une valeur dans une colonne. Par exemple, ci-dessous, vous voulez que l'en-tête de colonne "rouge" soit dans sa propre colonne - peut-être une colonne "couleur". Faites glisser la colonne B «rouge» vers le bas pour chaque ligne où vous avez un enregistrement unique dans la colonne A. 
  2. Ensuite, collez à nouveau toutes les valeurs de la colonne A, puis collez dans la colonne B la colonne seconde que vous souhaitez exécuter "Column to text" on ( "orange" dans l'exemple ci-dessous). 
  3. Répétez cette procédure pour le nombre de colonnes dont vous avez besoinliste sous forme de "texte".
  4. Enfin, dans la colonne C, utilisez les valeurs que vous avez dans les colonnes A et B et créez un index (match (match ())) pour connaître la valeur à l'intersection des deux valeurs que vous avez dans les colonnes A et B. . 

Voici un exemple: 

 enter image description here  enter image description here

1
Ryan Chase