Excel vba, Modification des références de cellule dans la formule pour pointer vers un emplacement de cellule différent

0

J'essaie de déplacer (décaler) uniquement des parties de l'emplacement de la colonne de formule vers un emplacement de colonne différent d'une quantité spécifiée de colonnes. Les cellules de formule changent de feuille en feuille. J'ai des milliers de formules qui ont toutes des emplacements de cellules différents. Donc, je préfère une sorte de solution macro vba. C'est la formule originale:

=IF(AND($A$9=1,GH10=GT12),0,IF(AND($A$9=2,GI10=GS13),0,IF(AND($A$9=3,GJ10=GR14),0,1)))

et veulent que cela change en ceci:

=IF(AND($A$9=1,GI10=GT12),0,IF(AND($A$9=2,GJ10=GS13),0,IF(AND($A$9=3,GK10=GR14),0,1)))

c'est une colonne de plus, mais seulement le numérateur (GH10 -> GI10 et GI10 -> GJ10, etc.). Et avoir le même numéro de ligne constant.

J'ai trouvé ce code (ci-dessous). Il me permet de choisir dans une liste déroulante le nombre de colonnes à déplacer (PAS NÉCESSAIRE tant que je peux le saisir manuellement dans le code), mais cela change également le dénominateur de la formule. (NOTE: JE NE PEUX PAS ajouter $ aux parties de la formule que je ne veux pas changer. La formule doit rester dynamique).

Sub Macro1()
    Dim nbr As Long, cel As Range, cels As Range, sh As Worksheet
    Set cels = Selection

    nbr = CLng(InputBox("Enter offset:"))

    Set sh = Worksheets.Add

    For Each cel In cels

        If cel.HasFormula Then

            sh.Cells(cel.Row, cel.Column + nbr).FormulaR1C1 = cel.FormulaR1C1
            cel.Formula = sh.Cells(cel.Row, cel.Column + nbr).Formula

        End If

    Next

    Application.DisplayAlerts = False
        sh.Delete
    Application.DisplayAlerts = True

End Sub

Ceci est pour une cellule à la fois. Si le code VBA fonctionne, peut-il accepter une plage sélectionnée, par opposition à une seule cellule à la fois?

dendy792
la source
Je sais que vous avez demandé une solution VBA, mais avez-vous envisagé d'utiliser OFFSET, comme dans le Offset(GH10,,cell_reference)cas où la référence de cellule contiendrait le décalage de colonne pour cette feuille.
Rey Juna
GH10 n'est utilisé que dans 1 formule sur 1 000; la feuille suivante aura un pointeur de cellule différent.
dendy792
Pourquoi ne pas utiliser Find & Replaceavec Formula Option, ou je peux suggérer VBA pour Find & Replace. Dites-moi comment vous pouvez changer de lignes GJ10avec GK10?
Rajesh S
dans seulement 1 rangée, sur plus de 1000 feuilles. GJ10 ne figure que dans une formule sur mille formules réparties sur mille feuilles. Je devrais entrer mille fois dans Find et connaître la cellule à saisir dans Find. Je veux juste décaler la partie "numérateur" du test (c'est-à-dire: GJ10 = GR14) uniquement GJ10 décalé de 1 colonne ou plus vers (GK10 = GR14).
dendy792
Pourquoi ne pas rechercher et remplacer GJavec GKdans les formules de la colonne appropriée? Si vous ne voulez pas le faire manuellement, vous pouvez facilement l’automatiser Range.Replace.
cybernetic.nomad