#vba #excel
#vba #excel
Вопрос:
Прежде всего, я прошу прощения, если это глупый вопрос, но я просто не смог найти ответа нигде в Интернете. У меня есть вопрос ко всем, кто знаком с изменением относительной формулы на абсолютную формулу с помощью vba.
Моя проблема прямо сейчас заключается в том, что моя абсолютная формула определяется путем вычисления разности строк различных условий ячеек в других столбцах (столбец C), поскольку я ввел несколько формул в столбце (столбец B) с помощью vba. Следовательно, абсолютная формула, которой я хочу достичь, непредсказуема и постоянно меняется.
Set Rng = Range(Cells(2, 3), Cells(lastrow, 3))
Range("B2").Select
startb = lastrow
For b = lastrow To 2 Step -1
If Cells(b, 3) <> Cells(b - 1, 3) Then
endb = b
rowdiff = startb - endb
Cells(end, 2).Select
ActiveCell.FormulaR1C1 = "=Countif(RC[-1]:R[" amp; rowdiff amp; "]C[-1],RC[-1])"
ActiveCell.Formula = Application.ConvertFormula(Formula:=ActiveCell.Formula, fromreferencestyle:=Application.ReferenceStyle, toabsolute:=xlAbsolute)
Selection.Copy
Range(Cells(startb, 2), Cells(endb, 2)).Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
Next b
Как вы, ребята, можете видеть, у меня есть строка кода, которая может сразу преобразовать относительную формулу в абсолютную. К сожалению, в моей формуле COUNTIF мне нужен абсолютный диапазон (раздел перед запятой), но относительные критерии (в данном случае RC [-1] после запятой).
Могу ли я что-нибудь сделать, чтобы просто преобразовать частичную формулу в абсолютную? Или такой вещи нет? Мы высоко ценим любую помощь и совет. Пожалуйста, дайте мне знать, если я делаю это совершенно неправильным способом.
Спасибо за чтение и потраченное время.
Комментарии:
1. выполняется ли ваш код без проблем? После нее не может быть вызвана ни одна переменная
end
. Вызываемая переменная используетсяlastRow
в качестве индекса столбца . Какова фактическая цель вашего кода?2. извините за все опечатки. Я отредактировал соответствующим образом. Ранее я менял имена строк на более короткие, потому что имя переменной в моих кодах было слишком длинным. забыли о невозможности использования «end» в качестве переменной. Этот код выполняется без проблем.
3. смотрите мой опубликованный ответ
Ответ №1:
что касается вашего самого момента частичного преобразования формулы из относительной в абсолютную, за исключением ссылки на последнюю ячейку, вы могли бы использовать эту функцию
Function LeaveLastRelative(strng As String) As String
LeaveLastRelative = Left(strng, InStrRev(strng, ",")) amp; Replace(Right(strng, Len(strng) - InStrRev(strng, ",")), "$", "")
End Function
чья более подробная и (возможно) понятная версия:
Function LeaveLastRelative(strng As String) As String
Dim strng1 As String, strng2 As String
strng2 = Right(strng, Len(strng) - InStrRev(strng, ","))
strng1 = Left(strng, InStrRev(strng, ","))
LeaveLastRelative = strng1 amp; Replace(strng2, "$", "")
End Function
для использования в качестве:
ActiveCell.FormulaR1C1 = "=Countif(RC[-1]:R[" amp; rowdiff amp; "]C[-1],RC[-1])"
ActiveCell.formula = Application.ConvertFormula(formula:=ActiveCell.formula, fromreferencestyle:=Application.ReferenceStyle, toabsolute:=xlAbsolute)
ActiveCell.formula = LeaveLastRelative(ActiveCell.formula) '<--| here you use the function
Комментарии:
1. Спасибо пользователю 3598756 за ваш ответ и помощь. Весь раздел формулы активной ячейки стал абсолютной ссылкой, как это было представлено ранее. Я попробовал обе ваши функции. Где я сделал неправильно?
2. моя ошибка:
Application.ConvertFormula()
не возвращает преобразованную формулу, поэтому ее нужно вызвать самостоятельно, а затем использоватьLeaveLastRelative()
функцию для ее результата, оставленного в ячейке. смотрите отредактированный ответ3. @Skyler, ты справился с этим?
4. да, наконец-то это сработало! это фантастика, и она хорошо работает! большое спасибо за это! Я не знаком с функциями [Right] и [Left], и я обязательно хорошо это изучу.