![MS Excel 2016 - Spaltenbuchstaben subtrahieren](https://rvso.com/image/1615272/MS%20Excel%202016%20-%20Spaltenbuchstaben%20subtrahieren.png)
Ich habe die aktuelle Formel unten in Zelle A1, wo ich den Spaltenbuchstaben in eine neue Zelle B1 minus/subtrahieren muss. Ich habe diesen Beitrag durchgesehen, konnte ihn aber nicht bearbeiten: Wie addiert, subtrahiert oder erhöht man Spaltenbuchstaben in Excel?
Beispielsweise wird eine Formel oder ein Makro benötigt, um Werte für Spalte B zu erstellen, die mit denen in Spalte A identisch sind, jedoch einen Spaltenbuchstaben abziehen/minusieren.
Column A | Column B
=+Jan!$V$36 | =+Jan!$U$36
=+Jan!$AD$36 | =+Jan!$AC$36
=+Jan!$AH$36 | =+Jan!$AG$36
Antwort1
Das +
in Ihren Formeln ist überflüssig und nicht erforderlich.
Hier ist eine UDF, die die geänderte Formel in die angrenzende Spalte einfügt
Annahmen:
- Ihre Formeln sind einfach, wie Sie mit nur einer einzigen Zellreferenz zeigen
- Der Zellbezug steht immer am Ende der Formel.
- Für die Zellreferenz wird immer der absolute Adressierungsmodus verwendet.
- Um die Dinge einfacher zu machen
- Wir verwenden die R1C1-Notation in VBA
- Wir suchen vom Ende der Zeichenfolge in umgekehrter Reihenfolge nach dem
C
- Dadurch erhalten wir die Spaltennummer, von der wir subtrahieren,
1
um die geänderte Formel zu erhalten.
Dies sollte Ihnen genügend Informationen geben, damit Sie Änderungen vornehmen können, falls Ihre veröffentlichten Daten nicht mit Ihren tatsächlichen Daten übereinstimmen.
*Beachten Sie, dass es beim Zurückschreiben in das Arbeitsblatt wieder in die A1
Notation umgewandelt wird.
Option Explicit
Sub prevCol()
Dim R As Range, C As Range
Dim WS As Worksheet
Dim sForm As String
Dim lColPos As Long, lColNum As Long
Set WS = Worksheets("sheet3") 'or wherever you have the formulas
With WS
Set R = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
End With
For Each C In R
If C.HasFormula Then
sForm = C.FormulaR1C1
'assuming column number is at the end
lColPos = InStrRev(sForm, "C")
lColNum = Mid(sForm, lColPos + 1, 9)
C.Offset(0, 1).FormulaR1C1 = Left(sForm, lColPos) & lColNum - 1
End If
Next C
End Sub