Copie de toutes les cellules avec une certaine valeur d'une autre colonne de sauter des blancs
J'ai trois colonnes A, B et C:
La colonne A contient les noms, NOM1, NOM2, ...
La colonne B contient que les valeurs "OUI" ou "NON".
La colonne C est supposé contenir les noms de la colonne A qui ont de la valeur "OUI" dans la colonne B.
Je peux dire que tant que la valeur est "OUI" dans la colonne B, copie la valeur de la colonne A à la colonne C. Très simple:
C1=IF(B1="YES",A1,"")
Mais cela comprendra les cellules vides qui je ne veux pas. Donc je suppose que je suis à la recherche d'un moyen de copier tous les noms de la colonne A avec la valeur "OUI" dans la colonne B et de les coller dans la colonne C de sauter les blancs.
J'ai trouvé un projet VBA que les couleurs toutes les cellules à l'intérieur d'une colonne avec une certaine valeur. Je ne suis pas sûr de savoir comment modifier ce en quoi j'ai besoin. Ici c'est le code que j'ai trouvé jusqu'à présent.
QUESTIONS
1) Erreur d'Exécution '1004' définie par l'Application ou par l'Objet défini d'erreur
2) Copie à partir de la Colonne
3) Vérifier et Supprimer les Doublons de NewRange
EDIT 1: Ajout de lignes de commentaires dans le code
EDIT 2: Changement NewRange à être fabriqués à partir de la colonne A avec un Décalage (non testé en raison d'une erreur d'exécution)
MODIFIER 3: Code pour copier la forme d'une feuille séparée de code pour le coller dans une autre feuille
EDITION 4: Ajout de la correction de l'utilisateur @abahgat
MODIFIER 5: Supprimer les doublons
Sub RangeCopyPaste()
Dim cell As Range
Dim NewRange As Range
Dim MyCount As Long
MyCount = 1
'--> Loop through each cell in column B
'--> Add each cell in column A with value "YES" in column B to NewRange
For Each cell In Worksheets("Sheet1").Range("B1:B30")
If cell.Value = "YES" Then
If MyCount = 1 Then Set NewRange = cell.Offset(0,-1)
Set NewRange = Application.Union(NewRange, cell.Offset(0,-1))
MyCount = MyCount + 1
End If
Next cell
'--> Copy NewRange from inactive sheet into active sheet
NewRange.Copy Destination:=activesheet.Range("C1")
'--> Remove Duplicates
activesheet.Range("C1:C30").RemoveDuplicates
End Sub
OriginalL'auteur |
Vous devez vous connecter pour publier un commentaire.
Cela fera l'affaire:
OriginalL'auteur
Solution sans VBA:
la colonne C contient des formules comme:
augmenter le nombre dans la colonne C, si cette ligne est "oui" de la valeur dans la colonne B.
Cette valeur sera utilisé dans la prochaine étape.
la colonne D contient des formules comme:
prendre la valeur de:
table: la totalité d'Une ligne
numéro de ligne: calculé en fonction de match: trouver la première occurrence de numéro de ligne (numéro de ligne où l'on place la valeur) dans toute la partie C de la colonne. 0 veut dire que l'on recherche exactement ce numéro n'est pas un clossest.
d'ignorer les erreurs:
plus facile peut être écrit:
et cela signifie:
écrire la valeur de la règle si cette valeur n'est pas une erreur ou d'écrire une chaîne vide si la règle est une erreur
OriginalL'auteur
Simplement utilisé un
And
condition sur votreIf
pour éviter les cellules videsC1
, mettre ensuite copier=IF(AND(LEN(A1>0),B1="YES"),A1,NA()))
column C
Formulas
puis cochez Erreurs (voir photo)qui fait sens - voir ci-dessus
Merci, cela fonctionne parfaitement, mais (désolé :-)) je dois le faire pour 8 'B' colonnes et je voudrais être en mesure de modifier le "OUI" et "NON" des valeurs. Est-il possible de faire cela automatiquement? En attendant, je vais utiliser cette méthode, donc je vous remercie!
J'ai réalisé que la seule façon que j'ai de sélectionner et de copier certaines cellules d'une colonne, puis de les coller, (logiquement) l'élément sélectionné et copié les cellules sont collées, et donc automatiquement sauter les blancs. Le seul problème qui me reste, maintenant, est de (voir nouvellement aded code VBA ci-dessus) comment faire pour copier uniquement la NewRange et de le coller dans une certaine plage dans une feuille de calcul de mon choix. Des idées?
OriginalL'auteur brettdj