Donc, dans Excel, j'essaie de supprimer les cellules vides entre mes cellules contenant des informations en utilisant F5 pour rechercher les cellules vides, puis Ctrl + - pour les supprimer et les déplacer vers le haut. Mais lorsque j'essaie de le faire, cela me dit qu'il n'y a pas de cellules trouvées.
J'ai remarqué que si je sélectionne mes cellules "vides", Excel les compte toujours: ce qui est bizarre. Mais si j'appuie sur Supprimer sur les cellules sélectionnées, le compte s'en va, puis je peux passer à F5, les blancs, Ctrl + - et décaler les cellules vers le haut, et cela fonctionne ...
Ma question est donc la suivante: comment puis-je toujours le faire, mais avec ces cellules vierges qui, selon Excel, ne sont pas vierges? J'ai essayé de passer en revue et d'appuyer simplement sur supprimer sur les cellules vierges, mais j'ai beaucoup de données et j'ai réalisé que cela me prendrait BEAUCOUP trop de temps. Je dois trouver un moyen de sélectionner ces cellules «vierges» dans une sélection de données.
Merci d'avance pour votre aide! :)
Une révélation: Certaines cellules vides ne sont pas vides! Comme je vais le montrer, les cellules peuvent avoir des espaces, des nouvelles lignes et des vrais vides:
Pour trouver ces cellules rapidement, vous pouvez effectuer quelques opérations.
=CODE(A1)
renverra un # VALEUR! si la cellule est vraiment vide, sinon un nombre retournera. Ce nombre est le numéro ASCII utilisé dans =CHAR(32)
.Suppression de ceux-ci:
Si vous avez seulement un espace dans les cellules, vous pouvez les supprimer facilement en utilisant:
Si vous avez des retours à la ligne , cela est plus difficile et nécessite VBA:
Puis entrez le code suivant. Rappelez-vous que Chr(10)
est une nouvelle ligne, remplacez-la uniquement si nécessaire, par exemple. " " & Char(10)
est un espace et une nouvelle ligne:
Sub find_newlines()
With Me.Cells
Set c = .Find(Chr(10), LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = ""
Set c = .FindNext(c)
If c Is Nothing Then Exit Do
Loop While c.Address <> firstAddress
End If
End With
End Sub
Maintenant, lancez votre code en appuyant sur F5.
Après la fourniture du fichier : sélectionnez la plage d'intérêt pour améliorer les performances, puis exécutez les opérations suivantes:
Sub find_newlines()
With Selection
Set c = .Find("", LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = ""
Set c = .FindNext(c)
If c Is Nothing Then Exit Do
Loop While c.Address <> firstAddress
End If
End With
End Sub
un moyen simple de sélectionner et d'effacer ces cellules vides pour les rendre vides:
Cela a fonctionné pour moi:
J'ai eu un problème similaire: des cellules vides éparses provenant d'une exportation provenant d'une autre application apparaissaient toujours dans le nombre de cellules.
J'ai réussi à les effacer par
Il s'est débarrassé de tous les caractères cachés/fantômes dans ces cellules. Peut-être que cela fonctionnera pour vous?
Tout ça, c'est assez simple. J'ai essayé pour la même chose et c'est ce qui a fonctionné pour moi dans VBA
Range("A1:R50").Select 'The range you want to remove blanks
With Selection
Selection.NumberFormat = "General"
.Value = .Value
End With
Cordialement, Anand Lanka
Je ne sais pas si cela a déjà été dit, mais j'ai eu un problème similaire avec des cellules ne montrant rien dedans, mais n'étant pas vide lorsque vous exécutez la formule IsBlank ().
J'ai sélectionné la colonne entière, sélectionné Rechercher et remplacer, trouvé des cellules sans rien et remplacé par un 0, puis exécuté rechercher et remplacer à nouveau, trouver des cellules avec 0 et remplacer par "".
Cela a résolu mon problème et m'a permis de rechercher des cellules vides (F5, spéciales, vides) et de supprimer les lignes vides ... BOOM.
Peut ne pas fonctionner pour chaque application mais cela a résolu mon problème.
Parfois, des espaces dans les cellules apparaissent vierges, mais si vous appuyez sur F2 dans la cellule, vous verrez des espaces. Vous pouvez également effectuer cette recherche si vous connaissez le nombre exact d'espaces dans une cellule.
Trouvé d'une autre manière. Définissez le filtre automatique pour toutes colonnes (important car vous allez mal aligner les données) en sélectionnant la ligne d'en-tête> onglet "Données"> Trier et filtrer - "Filtre". Utilisez la liste déroulante dans la première colonne de données, décochez la case "Tout sélectionner" et sélectionnez uniquement l'option "(Vierge)"> [OK]. Mettez en surbrillance les lignes (maintenant toutes ensemble)> clic droit> 'Supprimer la ligne'. Retournez à la liste déroulante> "Tout sélectionner". Presto :)
'Select non blank cells
Selection.SpecialCells(xlCellTypeConstants, 23).Select
' REplace tehse blank look like cells to something uniqu
Selection.Replace What:="", Replacement:="TOBEDELETED", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
'now replace this uique text to nothing and voila all will disappear
Selection.Replace What:="TOBEDELETED", Replacement:="", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Si vous ne souhaitez pas conserver de formatage ni de formules , vous pouvez essayer d'enregistrer votre fichier sous forme de fichier texte délimité par des tabulations, de le fermer et de le rouvrir avec Excel. Cela a fonctionné pour moi.
Cela fonctionne avec des nombres.
Si votre plage est O8: O20, dans une plage vide voisine (par exemple, T8: T20), entrez = O8/1 et remplissez-le. Cela vous donnera un résultat de #VALUE pour les cellules "vides" et votre numéro d'origine restera tel qu'il était.
Puis, avec la plage T8: 20 sélectionnée (CTL- * si ce n’est pas déjà fait), appuyez sur F5 et choisissez Spécial. Dans la boîte de dialogue Spécial, choisissez Erreurs et cliquez sur OK. Cela désélectionnera vos nombres réels en ne laissant que les cellules #VALEUR sélectionnées. Supprimez-les et vous aurez des cellules vides réelles. Copier T8: T20 et coller de nouveau sur O8: O20.
Essentiellement, étant donné que les cellules vides ne fonctionnent pas, vous devez convertir les cellules «vides» en un élément sur lequel le bouton Go To Special peut être associé. Toute action qui se convertirait en #VALUE fonctionnerait, et les autres types «d'erreur» devraient également être pris en charge.
Ma méthode est similaire à la suggestion de Curt ci-dessus de l'enregistrer en tant que fichier délimité par des tabulations et de réimporter… .. Il suppose que vos données ne contiennent que des valeurs sans formules… .. Ceci est probablement une bonne hypothèse, car le problème de " les "vierges" sont dues à la confusion entre les vides et les vides - généralement dans les données importées d'un autre endroit - il ne devrait donc pas y avoir de formules . Ma méthode consiste à analyser en place - Cela ressemble beaucoup à l’enregistrement dans un fichier texte et à la réimportation, mais vous pouvez le faire sans fermer ni rouvrir le fichier . C’est sous Données> Texte-à-colonnes> délimité> supprimer tous les caractères d’analyse (vous pouvez également choisir Texte si vous voulez)> Terminer. Cela devrait obliger Excel à re-reconnaître vos données à partir de rien ou à partir de texte et à reconnaître les espaces vides comme des espaces vraiment vides . Vous pouvez automatiser cela dans un sous-programme:
Sub F2Enter_new()
Dim rInput As Range
If Selection.Cells.Count > 1 Then Set rInput = Selection
Set rInput = Application.InputBox(Title:="Select", Prompt:="input range", _
Default:=rInput.Address, Type:=8)
' Application.EnableEvents = False: Application.ScreenUpdating = False
For Each c In rInput.Columns
c.TextToColumns Destination:=Range(c.Cells(1).Address), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, _
FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
Next c
Application.EnableEvents = True: Application.ScreenUpdating = True
End Sub
Vous pouvez également activer cette ligne commentée pour que ce sous-programme s'exécute "en arrière-plan". Pour ce sous-programme, les performances ne sont que légèrement améliorées (pour d’autres, cela peut vraiment aider beaucoup) . Le nom est F2Enter car la méthode manuelle originale pour résoudre ce problème de "blancs" consiste à obliger Excel à reconnaître la formule en appuyant sur F2. et entrez.
Voici comment j'ai résolu ce problème sans codage.
Goto-> Special-> blanks n'aime pas les cellules fusionnées. Essayez de supprimer les cellules au-dessus de la plage dans laquelle vous souhaitez sélectionner des blancs, puis réessayez.
La solution la plus simple pour moi a été de:
1) Sélectionnez la plage et copiez-la (ctrl + c)
2) Créez un nouveau fichier texte (n'importe où, il sera bientôt supprimé), ouvrez le fichier texte et collez ensuite les informations Excel (ctrl + v)
3) Maintenant que les informations dans Excel se trouvent dans le fichier texte, effectuez une sélection dans le fichier texte (ctrl + a), puis copiez-la (ctrl + c).
4) Accédez au début de la plage d'origine à l'étape 1 et collez les anciennes informations de la copie à l'étape 3.
TERMINÉ! Plus de faux blancs! (vous pouvez maintenant supprimer le fichier texte temporaire)
J'avais un problème similaire à obtenir que la formule COUNTA comptât les cellules non vides. Elle comptait toutes les cellules (même les vierges comme non vides). J'ai essayé = CODE (), mais elles n'avaient ni espaces ni nouvelles lignes.
J'ai trouvé que lorsque je cliquais dans la cellule puis que je cliquais hors de celle-ci, la formule comptait la cellule. J'avais des milliers de cellules, je ne pouvais donc pas le faire manuellement. J'ai écrit cette déclaration VBA pour vérifier littéralement toutes les cellules et si elles étaient vides, alors pour les vider. Ignorez le caractère inutile de cette macro et croyez-moi que cela a fonctionné en forçant Excel à reconnaître les cellules vides comme étant réellement vides.
'This checks all the cells in a table so will need to be changed if you're using a range
Sub CreateBlanks()
Dim clientTable As ListObject
Dim selectedCell As Range
Set clientTable = Worksheets("Client Table").ListObjects("ClientTable")
For Each selectedCell In clientTable.DataBodyRange.Cells
If selectedCell = "" Then
selectedCell = ""
End If
Next selectedCell
End Sub