Copier une plage de cellules et de sélectionner uniquement les cellules contenant les données
Je suis à la recherche d'un moyen de copier une plage de cellules, mais de copier seulement les cellules qui contiennent une valeur.
Dans ma feuille excel j'ai des données à partir de A1-A18, B est vide et C1-C2. Maintenant, je voudrais copier toutes les cellules qui contiennent une valeur.
With Range("A1")
Range(.Cells(1, 1), .End(xlDown).Cells(50, 3)).Copy
End With
Cela permet de copier tout A1-C50, mais je ne veux A1-A18 et C1-C2 être copié vu, comme si ceux-ci contiennent des données. Mais il doit être formé de façon que, une fois que j'ai des données dans B ou mon aire de répartition s'étend, que ces copiés trop.
'So the range could be 5000 and it only selects the data with a value.
With Range("A1")
Range(.Cells(1, 1), .End(xlDown).Cells(5000, 3)).Copy
End With
Merci!
Merci à Jean, code Actuel:
Sub test()
Dim i As Integer
Sheets("Sheet1").Select
i = 1
With Range("A1")
If .Cells(1, 1).Value = "" Then
Else
Range(.Cells(1, 1), .End(xlDown)).Copy Destination:=Sheets("Sheet2").Range("A" & i)
x = x + 1
End If
End With
Sheets("Sheet1").Select
x = 1
With Range("B1")
' Column B may be empty. If so, xlDown will return cell C65536
' and whole empty column will be copied... prevent this.
If .Cells(1, 1).Value = "" Then
'Nothing in this column.
'Do nothing.
Else
Range(.Cells(1, 1), .End(xlDown)).Copy Destination:=Sheets("Sheet2").Range("B" & i)
x = x + 1
End If
End With
Sheets("Sheet1").Select
x = 1
With Range("C1")
If .Cells(1, 1).Value = "" Then
Else
Range(.Cells(1, 1), .End(xlDown)).Copy Destination:=Sheets("Sheet2").Range("C" & i)
x = x + 1
End If
End With
End Sub
A1 - A5 contient des données, A6 est blanc, A7 contient des données. Il s'arrête à A6 et se dirige vers la colonne B, et continue de la même manière.
vos questions garder le déplacement, après avoir répondu et c'est un peu démotivant...
Je suis désolé 🙂 mais vous"ai répondu à toutes et je vous en remercie.
OriginalL'auteur CustomX | 2011-03-17
Vous devez vous connecter pour publier un commentaire.
Depuis votre trois colonnes ont des tailles différentes, la chose la plus sûre à faire est de copier un par un. Tous les raccourcis à la PasteSpecial finirez probablement par vous causer des maux de tête.
Maintenant, c'est moche, et une option plus propre serait de faire une boucle par les colonnes, surtout si vous avez beaucoup de colonnes et vous le collez à colonnes adjacentes dans le même ordre.
MODIFIER
Si vous avez changé votre question... Essayer de boucler dans les cellules individuelles, de vérifier si la cellule est vide, et si pas le copier. N'ai pas testé, mais vous voyez l'idée:
Ce code sera vraiment lent si
iMaxRow
est grande. Mon intuition est que vous essayez de résoudre un problème dans une sorte de moyen inefficace... C'est un peu dur de s'installer sur une stratégie optimale lorsque la question ne cesse de changer.je sais, mais c'est plus que convenable pour le moment. Je sais que mon code ne sera pas propre ou peut-être optimale, mais tant qu'il fait ce qu'il doit faire, je vais être heureux 😛 Votre montage devrait fonctionner, vu que si elle va faire une boucle par l'ensemble de la colonne jusqu'à une valeur prédéfinie. Merci beaucoup de m'aider 🙂
Juste pour ajouter à cela, si vous ne voulez pas qu'il copie les cellules vides dans votre Feuille 2 de destination, faire une nouvelle ligne de comptoir, qui sera incrémenté dans le
else
clause, et direCells(newRowCounter, column)
à seulement coller avec celle newRowCounter valeur.OriginalL'auteur Jean-François Corbett
Prendre un coup d'oeil à la pâte de fonction Particulière. Il y a un "skip blanc" de la propriété qui peuvent vous aider.
Attention: PasteSpecial vous oblige à utiliser le presse-papiers, avec tous les dangers que cela implique, comme pour mon précédent avertissement... stackoverflow.com/questions/5327265/...
Bon point, Jean! Toujours, selon la taille de la plage (spécialement le grand), je crois serait préférable d'utiliser le PasteSpecial plutôt que de scanner chaque cellule dans une plage, à droite?
OriginalL'auteur Tiago Cardoso
À améliorer Jean-François Député de la réponse .UsedRange.Les lignes.Le comte pour obtenir la dernière ligne. Cela vous donnera une assez précise de la gamme et il ne s'arrêtera pas à la première cellule vide.
Voici un lien vers un excellent exemple avec commenté notes pour les débutants...
OriginalL'auteur Lopsided