1
votes

Empilez plusieurs colonnes en une sans ignorer les cellules vides

Pour une pile de plusieurs colonnes et filtrer les cellules vides, @ player0 m'a dit de le faire comme suit:
https://stackoverflow.com/a/60028660/11462274

Mais je suis tombé sur la nécessité de ne pas ignorer les cellules vides, car je vais utiliser un script sur quatre feuilles de calcul différentes, et chacune d'entre elles enverra des données à la première ligne vide des colonnes, donc cela peut arriver que certaines colonnes ont plus de données que les autres et que je vais enregistrer les valeurs manuellement dans la colonne sur le côté, si je change les positions, cela gâchera ce que j'enregistre manuellement.

:

A
B
C
D
E
F
G
H

J
K
L

N


Résultat attendu:

A B C D
E F G H
  J K L
  N    

Ces espaces seront nécessaires pour que lorsque de nouvelles données sont enregistrées dans les colonnes, les anciennes ne changent pas de position, restent au même endroit où elles se trouvent.

Serait-il possible de faire cela?

Note: j'ai déjà regardé à certains endroits en disant que si je faisais cela, la feuille de calcul serait immense à cause du nombre de lignes vides qu'elle prendrait en compte. J'imagine qu'il ne faudrait que les cellules vides jusqu'à la dernière ligne qui contient des données pour le moment, le reste ne serait pas nécessaire.

Mais je n'ai pas pu m'adapter pour rendre cela possible.


0 commentaires

3 Réponses :


1
votes
  • Vous souhaitez réaliser la situation suivante.

    • De

      =TRANSPOSE(SPLIT(REGEXREPLACE(TEXTJOIN(",",FALSE,A1:D,"#"),",+#",","),",",,FALSE))
      
    • À

      A
      B
      C
      D
      E
      F
      G
      H
      
      J
      K
      L
      
      N
      
  • Dans le cas ci-dessus, vous souhaitez utiliser uniquement les valeurs de A à N Vous ne souhaitez pas inclure les valeurs vides après la valeur de N

  • Si ma compréhension est correcte, qu'en est-il de cette réponse? Veuillez considérer cela comme une des réponses possibles.

    Formule modifiée:

    A B C D
    E F G H
      J K L
      N 
    
    1. Joignez les valeurs de "A1: D" en utilisant TEXTJOIN() .
    2. Supprimez les valeurs vides après le dernier caractère en utilisant REGEXREPLACE() .
    3. Divisez la valeur à l'aide de SPLIT() d'une chaîne à un tableau.
    4. Transposez le tableau en utilisant TRANSPOSE() .

    Résultat:

    entrez la description de l'image ici

    Références:

    Si j'ai mal compris votre question et que ce n'est pas le résultat souhaité, je m'en excuse.


8 commentaires

C'est exactement ce dont j'ai besoin. Merci mon pote!


Mate, ce message est apparu: Le résultat textuel de TEXTJOIN dépasse la limite de 50000 caractères. Existe-t-il un moyen de résoudre ce problème?


@Brondby IF Merci d'avoir répondu. Dans ce cas, que diriez-vous des solutions de contournement suivantes? 1. Réduisez les données en les fractionnant. 2. Utilisez Google Apps Script.


J'ai essayé de diminuer en faisant A1 à D50, A51 à D100, A101 à D150 ... Mais quand j'ai rejoint par =ARRAYFORMULA({XX; XX; XX}) des lignes vides sont apparues dans les divisions, j'ai essayé de les supprimer par =QUERY("Where Col1 is not null") , mais si je fais cela, les lignes vides dont j'ai besoin disparaîtront. La deuxième option pour le script de l'application, malheureusement, je ne sais pas comment créer une formule comme celle-là. Si vous pouvez m'aider, je peux même partager ma feuille de calcul si nécessaire ou créer une nouvelle question pour vous donner plus de points. Quoi qu'il en soit, merci beaucoup pour votre aide!


@Brondby IF Merci d'avoir répondu. Malheureusement, je ne peux pas comprendre votre situation actuelle. Cela est dû à ma faible compétence. Je m'excuse profondément pour cela. Bien que je ne sois pas sûr de votre situation réelle, puis-je vous demander la raison pour laquelle vous ne pouvez pas y parvenir avec Google Apps Script?


Malheureusement, les seules choses que je sais créer via le script de l'application sont des fonctions courantes qui sont apprises lors de l'enregistrement de macros. Créez un script avec cette fonctionnalité car j'en ai besoin Je ne peux pas le faire.


Tanaike, merci beaucoup ... Je me suis souvenu d'un moyen de résoudre le problème de la ligne supplémentaire, tout ce que j'avais à faire était d'ajouter un ARRAYCONSTRAIN avec un maximum de 200 lignes et 1 colonne. De cette façon, la ligne supplémentaire a disparu. Tout a fonctionné! Merci!


@Brondby IF Merci d'avoir répondu. Je suis content que votre problème ait été résolu.



1
votes

vous pouvez construire dessus comme:

=ARRAYFORMULA(ARRAY_CONSTRAIN(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
 IF(A:D="", CHAR(9), A:D)),,9^9)),,9^9), " ")), ROWS(A:A), 1))

0


0 commentaires

0
votes

Ma solution est si simple qu'elle fait mal, mais vous pouvez utiliser =FLATTEN(A1:D)

Oui, c'est simple.

Apparemment, Google n'a jamais documenté cette fonction FLATTEN , mais elle fonctionne parfaitement pour ce que vous voulez et ce dont j'ai besoin.

J'espère que quelqu'un trouvera cela même si cela a été répondu, je sais que j'en ai besoin pour toujours, haha.


0 commentaires