Найти, заменить и посчитать несколько значений - PullRequest
0 голосов
/ 23 марта 2019

Старые значения

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

= ПОДСТАВИТЬ (ПОДСТАВИТЬ (К2, ИНДЕКС (OLD, О5: O9), ИНДЕКС (НОВЫЙ, Р5: Р9)), ИНДЕКС (OLD, О5: O9), ИНДЕКС (НОВЫЙ, Р5: Р9))

= ПОДСТАВИТЬ (ПОДСТАВИТЬ (К2, ИНДЕКС (OLD, О5: O9), ИНДЕКС (НОВЫЙ, Р5: Р9)), ИНДЕКС (OLD, О5: O9), ИНДЕКС (НОВЫЙ, Р5: Р9))

Итак, на самом деле я хочу изменить и посчитать значения. Суммируйте только цифры без букв, символы по формуле Excel

enter image description here

1 Ответ

1 голос
/ 23 марта 2019

Если вы готовы добавить 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 " ииспользуется в VLOOKUP в коде, чтобы получить буквы, соответствующие значению ...

AlphaLookup

..., которые будут затембыть использованы для поиска буквы и найти ее назначенное значение.Хотя есть и хитрый трюк с этим столом.Вам нужно только сохранить буквы в этой таблице, ЕСЛИ номер буквы не совпадает с индексом в алфавите.

Например, вы сказали A = 1, B = 2, C = 3, D = 4,E = 5 и I = 6, поэтому при заполнении этого диапазона все, что вам нужно будет ввести, исходя из вышеизложенного, будет I , поскольку позиция I в алфавите не 6-я, а 9-я.

Если вы не знаете, как добраться до редактора Visual Basic, нажмите Alt + F11 , и он откроется для вас.

Отсюда вставьтеНовый Модуль , а затем вставьте этот код в.

Теперь вы можете напрямую применить формулу в ячейке, например, так ...

=CalculateBasedOnAlphabetIndex(A1)

Этот UDF такжеОцените формулы и числами, так что сработают следующие примеры.

enter image description here

Надеюсь, это поможет вам.

...