Ich versuche, nur Teile der Formelspaltenposition um eine bestimmte Anzahl von Spalten an eine andere Spaltenposition zu verschieben (zu versetzen). Die Formelzellen ändern sich von Blatt zu Blatt. Ich habe Tausende von Formeln, die alle unterschiedliche Zellpositionen haben. Also bevorzuge ich eine Art VBA-Makrolösung. Dies ist die ursprüngliche Formel:
=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)))
und möchte es geändert haben:
=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)))
Dies ist eine Spalte weiter, aber nur der Zähler (GH10 -> GI10 und GI10 -> GJ10 usw.). Und haben die gleiche konstante Zeilennummer.
Ich habe diesen Code gefunden (siehe unten). Ich kann aus einem Dropdown-Feld auswählen, wie viele Spalten verschoben werden sollen (NICHT NOTWENDIG, solange ich ihn manuell in den Code eingeben kann). Dies ändert jedoch auch den Nenner der Formel. (HINWEIS: ICH KANN NICHT $ zu den Teilen der Formel hinzufügen, die ich nicht ändern möchte. Die Formel muss dynamisch bleiben.)
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
Dies gilt jeweils für eine Zelle. Wenn es einen funktionierenden VBA-Code gibt, kann er einen ausgewählten Bereich aufnehmen, der sich von einer einzelnen Zelle unterscheidet?
quelle
OFFSET
, wieOffset(GH10,,cell_reference)
der Zellenverweis den Spaltenversatz für dieses Blatt enthalten soll.Find & Replace
mitFormula Option
, oder ich kann VBA für vorschlagenFind & Replace
. Sagen Sie mir, wie kann Zeilen , die Sie ändern müssen , umGJ10
mitGK10
?GJ
mitGK
in den Formeln der entsprechenden Spalte? Wenn Sie es nicht manuell tun möchten, kann es mit leicht automatisiert werdenRange.Replace
.