
У меня есть текущая формула ниже в ячейке 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