Поиск, замена и подсчет нескольких значений

#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. Можете ли вы предоставить скриншот вашей рабочей книги, чтобы я мог увидеть точный пример?

4. i.stack.imgur.com/wvG50.png

Ответ №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» и использоваться в ВПР в коде для получения букв, соответствующих значению …

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 да, это довольно просто, я вернусь к вам. Это была просто оплошность с моей стороны.