【问题标题】:Convert text string into a formula in Excel在 Excel 中将文本字符串转换为公式
【发布时间】:2021-10-04 07:07:23
【问题描述】:

我在单元格中有两个数字“=5+4”作为文本。这是另一个操作的结果。

我取了另一个公式的一部分,并用“等号”符号连接起来:

= "="   &    RIGHT(FORMULATEXT(V8);LEN(FORMULATEXT(V8))-SEARCH("+"; FORMULATEXT(V8)))

我想在一个单元格中得到 5+4 的结果——这意味着“9”;) 我不想使用 VBA 代码。

【问题讨论】:

  • 您唯一的选择是某种宏函数,无论是 VBA 还是 XLM。
  • 那么也许从另一边:我最初的问题是从方程中提取除第一个以外的所有数字并在另一个单元格中求和:A1:“= 6 + 5 + 4”。 A2:“9”。也许不用VBA也能解决?
  • 这能回答你的问题吗? superuser.com/questions/1515531/…
  • 使用单元格值并减去第一个数字:=A1-MID(FORMULATEXT(A1);2;FIND("+";FORMULATEXT(A1))-2)
  • 字符串加法是唯一的操作吗?或者可能有减法、乘法等?

标签: excel text excel-formula


【解决方案1】:

我最初的问题是从方程式中提取除第一个以外的所有数字,然后在另一个单元格中求和:A1:“=6+5+4”。 A2:“9”。也许不用VBA也能解决?

您可以尝试(假设只有添加):

B1中的公式:

=SUM(FILTERXML("<t><s>"&SUBSTITUTE(MID(A1,2,LEN(A1)),"+","</s><s>")&"</s></t>","//s[position()>1]"))

事实上,如果您不想使用第一个数字,我们也可以放弃考虑 '=':

=SUM(FILTERXML("<t><s>"&SUBSTITUTE(A1,"+","</s><s>")&"</s></t>","//s[position()>1]"))

由于SUM() 将忽略最终答案中的文本,我们现在可以进一步简化这一点(感谢@JosWoolley):

=SUM(FILTERXML("<t><s>"&SUBSTITUTE(A1,"+","</s><s>")&"</s></t>","//s"))

【讨论】:

  • 您可以进一步简化您的第二个公式:[position()&gt;1] 是多余的,因为SUM 将忽略传递给它的数组中以“=”开头的第一个(文本)条目。
  • @JosWoolley,没错!接得好。我会编辑它。
【解决方案2】:

如果你总是添加 2 个数字,那么你可以使用这个:

=VALUE(VALUE(MID(A1;2;SEARCH("+";A1)-2))+VALUE(MID(A1;SEARCH("+";A1)+1;9999)))

我的 A 列被格式化为文本,所有值都遵循相同的模式:=Value1+Value2

因此,公式根据+ 符号的位置,将Value1Value2 提取为具有MID 函数的文本。然后 Excel 使用 VALUE 函数将这两个值转换为数字。注意有 3 个值,第三个是确保单元格保持标准格式(在某些版本的 Excel 中,比如我的 2007 年,当将文本格式的单元格包含到公式中时,公式化的单元格自身自动格式化为文本格式,使公式只工作一次)。

正如您在图片中看到的,它运行良好,但这仅适用于模式=Value1+Value2。对于不同的模式,您将需要不同的公式。

如果您想创建一个适用于所有模式的公式,那么您确实需要 VBA。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    相关资源
    最近更新 更多