0
votes

Existe-t-il un moyen concis de faire Range ("A1: A10"). Valeur = Range ("A1: A10"). Valeur + 1 en vba

J'ai un peu de problème à travailler avec la variable de plage. par exemple, je peux directement faire une affectation sur une plage de cellules comme celle-ci:

Range("A1:A10").Value = Range("A1:A10").Value + 1 

Cependant, y a-t-il un moyen concis de faire l'incrémentation de la plage de valeurs puis l'affectation, voici ce que je veux dire mais a entraîné une erreur d'incompatibilité de type

Range("B1:B10").Value = Range("A1:A10").Value

Modifier: En fin de compte, ce que je veux mettre en œuvre est un bouton de défilement, lorsque vous cliquez sur _UP, toutes les cellules de la plage augmentent la valeur de 1, lorsque _Down est cliqué, toutes les cellules de la plage diminuent la valeur de 1. Quelle est la manière la plus efficace de faire cela?


2 commentaires

Vous allez avoir besoin d'une boucle ... Si la performance / vitesse est votre préoccupation, vous pouvez toujours déposer la plage dans un tableau, y faire une boucle et la coller dans la plage.


l'incompatibilité de type est due au fait que .Value renvoie un tableau et que + ne fonctionne pas sur les tableaux.


3 Réponses :


0
votes

Je ne sais pas si c'est vraiment concis mais au lieu de copier les valeurs dans un tableau, ajoutez une boucle 1 puis réécrivez-la, vous pouvez essayer le code suivant

Sub Test()

    Dim rg1 As Range, rg2 As Range
    Dim addVal As Long

    addVal = 1
    Set rg1 = Range("A1:A10")

    Set rg2 = rg1.Offset(, 1)
    rg2.Formula = "=RC[-1]+" & addVal

    rg1.Value = rg2.Value
    rg2.Clear

End Sub


0 commentaires

1
votes

Voici ce que je ferais si vous avez un gros morceau de données:

Option Explicit
Sub Increase_Decrease(UpOrDown As Long)

    Dim LastRow As Long, i As Long
    Dim arr As Variant

    With ThisWorkbook.Sheets("MySheet") 'Change MySheet for your sheet
        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        arr = .Range("A1", .Cells(LastRow, 1)).Value
        For i = 1 To UBound(arr)
            arr(i, 1) = arr(i, 1) + UpOrDown
        Next i
        .Range("A1", .Cells(LastRow, 1)).Value = arr
    End With

End Sub
Sub Increase()

    Increase_Decrease 1

End Sub
Sub Decrease()

    Increase_Decrease -1

End Sub

Ensuite, vous liez votre bouton de défilement vers le haut à la procédure d'augmentation, et le bouton de défilement vers le bas à la diminution bouton.


0 commentaires

0
votes

Vous pouvez également faire cela sans VBA.

La configuration de la démonstration sera

Insérer un contrôle de formulaire depuis Développeur >> Insérer >> Contrôles de formulaire >> Barre de défilement .

Les paramètres seront Valeur minimale = 1 Valeur maximale = 100 Changement incrémental = 1 Changement de page = 10 Lien de cellule = $B$1

Et puis insérez la formule suivante dans la cellule A1: =ROW()-$B$1

Copiez vers le bas.


0 commentaires