#excel #vba #excel-formula #spreadsheet
#excel #vba #excel-формула #электронная таблица
Вопрос:
Старые значения
1. A B C
2. A B
3. A D E I
Условие
(A =1, B = 2, C =3, D=4, E = 5, I =6)
Новые значения
1. 6
2. 3
3. 16
=SUBSTITUTE(ЗАМЕНИТЬ(K2,ИНДЕКС (СТАРЫЙ, O5: O9), ИНДЕКС (НОВЫЙ, P5: P9)), ИНДЕКС (СТАРЫЙ, O5: O9), ИНДЕКС (НОВЫЙ, P5: P9))
=SUBSTITUTE(ЗАМЕНИТЬ(K2,ИНДЕКС (СТАРЫЙ, O5: O9), ИНДЕКС (НОВЫЙ, P5: P9)), ИНДЕКС (СТАРЫЙ, O5: O9), ИНДЕКС (НОВЫЙ, P5: P9))
Итак, на самом деле я хочу изменить и посчитать значения.Суммируйте только числа без букв, символов, используя формулу Excel
Комментарии:
1. Довольно сложно понять, в чем ваша проблема. Можете ли вы попробовать перефразировать и действительно задать вопрос?
2. 1. Мне нужно изменить буквы на numbers. 2. Завершить математическую сумму
3. Можете ли вы предоставить скриншот вашей рабочей книги, чтобы я мог увидеть точный пример?
Ответ №1:
Если вы хотите добавить UDF в свой проект, то это сделает это за вас.
Public Function CalculateBasedOnAlphabetIndex(ByVal strFormulaToEvaluate As String) As Double
Application.Volatile
Dim i As Long, strLetter, dblNumber As Double, varValue As Variant
strFormulaToEvaluate = UCase(strFormulaToEvaluate)
On Error Resume Next
For i = 65 To 90
strLetter = Chr(i)
Err.Clear
varValue = WorksheetFunction.VLookup(strLetter, Range("AlphaLookup"), 2, False)
If Err.Description = "" Then
dblNumber = varValue
Else
dblNumber = i - 65 1
End If
strFormulaToEvaluate = Replace(strFormulaToEvaluate, Chr(i), dblNumber, , , vbTextCompare)
Next
On Error GoTo 0
CalculateBasedOnAlphabetIndex = Evaluate(strFormulaToEvaluate)
End Function
… проверки ошибок как таковой нет, но она будет работать до тех пор, пока вы придерживаетесь основ написания формул.
Чтобы выполнить вышеуказанную работу, вам нужно создать именованный диапазон в верхней части таблицы преобразования, этот диапазон должен называться «AlphaLookup» и использоваться в ВПР в коде для получения букв, соответствующих значению …
… затем это будет использоваться для поиска буквы и нахождения присвоенного ей значения. Однако в этой таблице есть изящный трюк. Вам нужно поддерживать буквы в этой таблице только В том случае, если буквы, соответствующие номеру, не совпадают с его индексом в алфавите.
Например. вы сказали, что A = 1, B = 2, C = 3, D = 4, E = 5 и I = 6, поэтому при заполнении этого диапазона все, что вам нужно было бы ввести, исходя из вышесказанного, было бы I, потому что позиция I в алфавите не 6-я, а 9-я.
Если вы не знакомы с тем, как перейти к редактору Visual Basic, нажмите Alt F11, и он откроется для вас.
Отсюда вставьте новый модуль, а затем вставьте этот код.
Теперь вы можете применить формулу непосредственно к ячейке, например, таким образом …
=CalculateBasedOnAlphabetIndex(A1)
Этот UDF также будет оценивать формулы с числами, поэтому следующие примеры будут работать.
Я надеюсь, что это поможет вам.
Комментарии:
1. Существуют ли какие-либо варианты с вычислением, основанным не на алфавитном порядке? Если случайное письмо стоит, например, 20
2. @JohnBordevskiy то есть вы хотите управлять значением буквы, а не значением, получаемым из ее индекса в алфавите? О, я вижу, у вас было I = 6. Да, это можно сделать. Эти значения жестко закодированы? Т.е. нужно ли их менять?
3. Я думаю, мне нужно упростить это
4. Вот почему мне нужно использовать матрицу из условия и изменять, применяя значения из матрицы перехода. В самом начале я поделился своими примерами, которые могут не сработать. На основе этого, не могли бы вы, пожалуйста, помочь мне внести изменения
5. @JohnBordevskiy да, это довольно просто, я вернусь к вам. Это была просто оплошность с моей стороны.