Я хочу, чтобы создать определенную пользовательскую функцию, которая будет решать уравнение струны в назначенной ячейке после замены переменного в строке со значениями.как ссылаться на ячейку функция вызывается из
Информация всегда состоит из двух столбцов. Верх первого столбца будет содержать формулу, сохраненную в виде строки. Нижняя часть первого столбца будет содержать UDF. Между формулой и UDF будут все переменные из формулы строки. Второй столбец будет содержать все числовые значения для переменных.
Проблема
Я не знаю, как выбрать верхнюю часть колонны информации или переменных выше ОДС в автоматическом методе, так как я не знаю, как определить местоположение ячейки ОДС помещается в.
Objective
Ссылка расположение ячейки ОДС находится в так, что расположение формулы ячейки и диапазона для переменной клеток может быть определена. Я пытаюсь написать UDF таким образом, что мне не нужно передавать ему адрес ячейки формулы или переменных. Я хочу, чтобы он сам захватил эту информацию, основываясь на всей информации, непосредственно примыкающей к ячейке с UDF без пробелов.
То, что я
Option Explicit
Public Function SolvedEquation() As Long
Dim FormulaCell As Range
Dim Equation As String
Dim VariableRange As Range
Dim VariableCell As Range
Dim VariablesLength As Integer
Dim Variable As String
Dim VariableValue As Double
'define FormulaCell as the last nonblank up from the cell the function is called in from a contiguous range(no spaces)
FormulaCell = Application.ThisCell.End(xlUp).Select
'define the VariableRange as one up from the cell the function is called to second last cell non blank cell located upward in a contiguous selection (no spaces)
VariableRange = Range(Cells(Application.ThisCell.Row - 1, Application.ThisCell.Column), Cells(FormulaCell.Row + 1, FormulaCell.Column))
Equation = FormulaCell.Value
For Each VariableCell In VariableRange.Cells
VariablesLength = Len(VariableCell.Value)-1
Variable = Left(VariableCell.Value, VariablesLength)
VariableValue = Cells(VariableCell.Row, VariableCell.Column + 1).Value
Equation = Replace(FormulaCell.Value, Variable, VariableValue)
Next VariableCell
SolvedEquation = Evaluate(Equation)
End Function
Предложения для лучшего кодирования оценены (т.е. выбор диапазона по ячейкам)
Пример данных
С некоторыми исправлениями кода от лиц ниже я закончил с этим до сих пор. Там, где появляется 177,00 в ячейке, должно быть указано 176.86. КОРРЕКЦИЯ: эта последняя проблема исправлена путем переопределения типа переменной, как это сделал Крис в своих отзывах.
Я в замешательстве - вы пишете «Я не знаю, как определить местоположение ячейки, в которую помещается UDF», но затем вы даете код, который использует «Application.ThisCell», который именно так вы определяете расположение ячейки, в которую помещается UDF ". В чем ваш вопрос? –
Ну, изначально у меня был «выбор». Я провел некоторое исследование, и я нашел кого-то, использующего «Приложение .ThisCell», поэтому я попробовал это, но мой код не работает, и если я правильно помню его сбой при первом использовании application.thiscell. Поэтому я не думал, что это правильно закодировано. –
'Application.Caller' также работает. Кроме того, вы не можете использовать 'Select' в UDF –