![MS Excel 2016 - вычитание букв столбца](https://rvso.com/image/1615272/MS%20Excel%202016%20-%20%D0%B2%D1%8B%D1%87%D0%B8%D1%82%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B1%D1%83%D0%BA%D0%B2%20%D1%81%D1%82%D0%BE%D0%BB%D0%B1%D1%86%D0%B0.png)
У меня есть текущая формула ниже в ячейке A1, где мне нужно вычесть/отнять букву столбца в новую ячейку B1. Я прошел через этот пост, но не смог с ним работать: Как добавлять, вычитать или увеличивать буквы столбцов в Excel?
например, нужна формула или макрос для создания значений столбца B; которые совпадают со значениями столбца A, но вычитают/минус одну букву столбца
Column A | Column B
=+Jan!$V$36 | =+Jan!$U$36
=+Jan!$AD$36 | =+Jan!$AC$36
=+Jan!$AH$36 | =+Jan!$AG$36
решение1
В +
Ваших формулах это лишнее и не нужно.
Вот UDF, которая поместит измененную формулу в соседний столбец.
Предположения:
- Ваши формулы просты, как вы показываете, и содержат только одну ссылку на ячейку.
- Ссылка на ячейку всегда будет находиться в конце формулы.
- Ссылка на ячейку всегда будет использовать абсолютный режим адресации.
- Чтобы сделать вещи проще
- Мы используем нотацию R1C1 в VBA
- Мы ищем с конца строки в обратном порядке
C
- Это дает нам номер столбца, из которого мы вычитаем
1
, чтобы получить измененную формулу.
Это должно дать вам достаточно информации, чтобы вы могли изменить ее в случае, если опубликованные вами данные не соответствуют вашим реальным данным.
*обратите внимание, что когда мы запишем его обратно на рабочий лист, он будет преобразован обратно в A1
запись.
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