Extraire tous les numéros d'une seule feuille Excel

1

Étant donné une feuille Excel avec un nombre et un texte mélangés.

ES:

123 | texte | 11
-----------
salut | 75 | 1

Comment puis-je numériser toute la feuille et extraire uniquement les chiffres d'une seule colonne?

123 |
----
 75 |
----
 11 |
----
  1 |

Je préfère ne pas utiliser VBA, l'ordre n'est pas important.

Giulio Caccin
la source

Réponses:

1

Vous pouvez le faire avec une formule:

 =IFERROR(LARGE(IF(ISNUMBER(A$1:C$3),A$1:C$3),ROW()),"")

Cette liste les nombres de grand à petit:

entrez la description de l'image ici

Ceci est une formule matricielle, elle doit donc être entrée avec CTRL-Shift Enter, plutôt que juste Entrée. S'il est entré correctement, Excel entourera la formule avec des accolades {} dans la barre de formule.

Pour numériser la feuille entière, modifiez les plages de l'instruction IF en $ 1: $ 1048576. Mais vous devrez exclure la colonne dans laquelle vous listez les numéros. Vous pouvez donc lister la colonne A et utiliser B $ 1: XFD $ 1048576. (Ceci est pour Excel après 2007).

Bandersnatch
la source
Whoa, j'avais besoin de 20 minutes pour le comprendre.
Giulio Caccin
Désolé, j'écris habituellement une explication, mais je devais aller voir l'éclipse. :-D
Bandersnatch
1

Cela dépend du cas d'utilisation ici mais la logique que je suggérerais est (sans utiliser VBA) de copier chaque colonne dans une seule colonne longue, puis de trier simplement par ordre alphabétique!

Donc ça commence comme

entrez la description de l'image ici

Copier et coller dans une seule colonne

entrez la description de l'image ici

Ajouter une nouvelle ligne et un titre d'en-tête, cliquez sur Filter(dans le Dataruban, Sort and Filteronglet)

Trier du plus petit au plus grand

entrez la description de l'image ici

Supprimez simplement les autres lignes!

Si la copie de toutes les colonnes dans une seule colonne prend trop de temps, voir https://stackoverflow.com/questions/4480227/how-to-consolidate-data-from-multiple-excel-columns-all-into-one-column

Sub MakeOneColumn()

    Dim vaCells As Variant
    Dim vOutput() As Variant
    Dim i As Long, j As Long
    Dim lRow As Long

    If TypeName(Selection) = "Range" Then
        If Selection.Count > 1 Then
            If Selection.Count <= Selection.Parent.Rows.Count Then
                vaCells = Selection.Value

                ReDim vOutput(1 To UBound(vaCells, 1) * UBound(vaCells, 2), 1 To 1)

                For j = LBound(vaCells, 2) To UBound(vaCells, 2)
                    For i = LBound(vaCells, 1) To UBound(vaCells, 1)
                        If Len(vaCells(i, j)) > 0 Then
                            lRow = lRow + 1
                            vOutput(lRow, 1) = vaCells(i, j)
                        End If
                    Next i
                Next j

                Selection.ClearContents
                Selection.Cells(1).Resize(lRow).Value = vOutput
            End If
        End If
    End If

End Sub

Comment ajouter VBA dans MS Office?

Dave
la source
Je peux aussi utiliser un ISNUMBER mais cette approche est quand même trop manuelle :( J'ai besoin de scanner toute la feuille ...
Giulio Caccin
Vous n'avez cependant pas défini cela dans votre question ...
Dave
Je suis désolé, je vais mettre à jour la question
Giulio Caccin