【问题标题】:Find, Replace and Count multiple values查找、替换和计算多个值
【发布时间】:2019-08-14 03:24:54
【问题描述】:

旧值

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(SUBSTITUTE(K2,INDEX(OLD,O5:O9),INDEX(NEW,P5:P9)),INDEX(OLD,O5:O9),INDEX(NEW,P5:P9))

=SUBSTITUTE(SUBSTITUTE(K2,INDEX(OLD,O5:O9),INDEX(NEW,P5:P9)),INDEX(OLD,O5:O9),INDEX(NEW,P5:P9))

所以,实际上我想更改和计算值。仅使用 excel 公式对不带字母、符号的数字求和

【问题讨论】:

  • 很难理解你的问题是什么。您可以尝试改写并实际提出问题吗?
  • 1.我需要将字母更改为 nubers 。 2. 完成数学总和
  • 您能否提供您的工作簿的屏幕截图,以便我看到一个确切的示例?

标签: excel vba excel-formula spreadsheet


【解决方案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”并用于 VLOOKUP在代码中获取字母对应的值...

... 然后将用于查找字母并找到它的分配值。不过,这张桌子有一个巧妙的技巧。如果字母对应的数字与其在字母表中的索引不同,您只需要维护该表中的字母。

例如你说 A = 1、B = 2、C = 3、D = 4、E = 5 和 I = 6,所以在填写该范围时,根据上述情况,您只需输入 因为我在字母表中的位置不是第 6 位,而是第 9 位。

如果您不熟悉如何进入 Visual Basic 编辑器,请按 Alt + F11,它将为您打开。

从这里插入一个新的模块,然后粘贴该代码。

您现在可以直接在单元格中应用公式,就像这样...

=CalculateBasedOnAlphabetIndex(A1)

此 UDF 也将计算带有数字的公式,因此以下示例将起作用。

希望对你有帮助。

【讨论】:

  • 有没有不按字母顺序计算的选项?如果随机字母成本例如 20
  • @JohnBordevskiy 的意思是你想控制字母的值,而不是从字母表中的索引派生的值?哦,我明白了,你有 I = 6。是的,可以做到。这些值是硬编码的吗?即他们需要改变吗?
  • 我想我需要保持简单
  • 这就是为什么我需要使用条件中的矩阵并通过应用转换矩阵中的值来进行更改。我在一开始就分享了我的例子,这些例子是行不通的。基于这个,你能帮我改变一下吗
  • @JohnBordevskiy 是的,这很容易,我会回复你的。这只是我的疏忽。
猜你喜欢
  • 2020-03-22
  • 1970-01-01
  • 2013-05-26
  • 2018-02-16
  • 2012-02-12
  • 2015-02-01
  • 2020-06-24
  • 2012-10-27
  • 1970-01-01
相关资源
最近更新 更多