0
votes

Comment ajouter 28 à la valeur de chaque cellule d'une colonne? Les valeurs de chaque cellule de la colonne sont des dates

Actuellement, je copie depuis une feuille et je la colle sur une autre feuille à un emplacement spécifique. Je veux que les valeurs de la colonne sur la nouvelle feuille aient 28 ajoutées à leur valeur existante. Ces valeurs sont des dates.

C'est ce que j'ai jusqu'à présent. Je ne sais pas où insérer l'addition. Y a-t-il un moyen de faire cela sans boucle? Comme je peux copier la plage exactement, il existe peut-être un moyen plus simple de le faire.

endRowDevelopment = wsOut.Cells(Rows.Count, 1).End(xlUp).Row
Set r1 = ws.Range(.Cells(2, 1), .Cells(endRowSheet1, 1))

r1.Copy Destination:=wsOut.Range("A" & endRowDevelopment + 1)


0 commentaires

3 Réponses :


-1
votes

Si vous avez deux gammes égales, vous pouvez utiliser probablement une formule pour le faire. (Ajustez les gammes si nécessaire) xxx

Entrez la description de l'image ici


0 commentaires

0
votes

Vous pouvez le faire avec une cellule d'assistance que vous définissez avec une valeur, copiez la cellule, puis utilisez Collage spécial avec l'option Ajouter pour ajouter la valeur copiée à toutes les cellules spécifiées.

Range("E1") = 28
Range("E1").Copy

Range("A1:A10").PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks:= _
    False, Transpose:=False
Range("E1").ClearContents


0 commentaires

0
votes

Pour aucune boucle, vous pouvez utiliser la réponse teylin. Mais la boucle ne devrait pas prendre autant de temps à moins que vous ne disposiez d'une quantité extraordinaire de données. Si vous pouvez accepter le bouclage, voici une solution possible intégrant votre question précédente.

Sub test()

Set ws = Application.Worksheets("Sheet1")

endRowSheet1 = ws.Cells(Rows.Count, 1).End(xlUp).Row

Set wsOut = Application.Worksheets("Load File")

With ws

Set r1 = .Range(.Cells(2, 1), .Cells(endRowSheet1, 1))
    r1.Copy Destination:=wsOut.Range("A2")

Set r2 = .Range(.Cells(2, 6), .Cells(endRowSheet1, 6))
    r2.Copy Destination:=wsOut.Range("E2")

End With

endRowDevelopment = wsOut.Cells(Rows.Count, 1).End(xlUp).Row

    r1.Copy Destination:=wsOut.Range("A" & endRowDevelopment + 1)
    r2.Copy Destination:=wsOut.Range("E" & endRowDevelopment + 1)

'--- adding 28 to the pasted ranges

With wsOut
    Set r3 = .Range(.Cells(endRowDevelopment + 1, "A"), .Cells(endRowDevelopment + endRowSheet1 - 1, "A"))
    Set r4 = .Range(.Cells(endRowDevelopment + 1, "E"), .Cells(endRowDevelopment + endRowSheet1 - 1, "E"))
End With

    For Each rngCell In r3.Cells
        rngCell.Value = rngCell.Value + 28
    Next rngCell

    For Each rngCell In r4.Cells
        rngCell.Value = rngCell.Value + 28
    Next rngCell

End Sub

Parfois, ce qui apparaît comme "pas de bouclage" dans le code est en fait une boucle lorsque Excel compile le code. La seule façon de savoir ce qui est le plus efficace est d'écrire différents codes et de les chronométrer. Dans ce cas, la boucle peut être un peu plus propre.


0 commentaires