【问题标题】:Have formula treat value as text, not numeric让公式将值视为文本,而不是数字
【发布时间】:2011-10-17 10:58:14
【问题描述】:

我有一个 Excel 公式从列中读取数据。该列中的数据有时是类似日期的格式,例如“10-11”。尽管我已确保该列是文本格式——并且所有值都正确显示为纯文本,而不是重新解释为日期——但该公式基本上将它们重新解释为参考中的日期。

我需要一种方法来强制公式的单元格引用将单元格解释为文本。我试过 TEXT(A1, "@") 但它不起作用——它给出了日期的数值。

【问题讨论】:

  • 您可能需要向我们展示您遇到问题的公式,可能有基于该特定公式的解决方法。
  • 这里是公式,它从单元格数据中检索第一组数值——在字母或符号字符处停止:=LEFT(A1,LEN(LOOKUP(9.9E+307,MID( A1,1,ROW(INDIRECT("1:"&LEN(A1))))+0)))
  • 那么你的例子应该返回“10”吗?
  • 是的。但根据下面的评论——数据可能是“147-23”-> 返回 147,或“76A”-> 返回 76

标签: excel worksheet-function array-formulas


【解决方案1】:

Brian Camire 的 answer 解释了原因,但这里有一个适合您的工作表函数。请注意,您必须根据最长字符串的长度在其中创建该数字数组。这是一个数组公式,所以当你第一次输入它时,你必须按 CTRL-SHIFT-ENTER,然后你可以单击并将它拖到列中。

=LEFT(A1, MATCH(FALSE, ISNUMBER(VALUE(MID(A1, {1,2,3,4,5}, 1))),0) - 1)

【讨论】:

  • 效果很好——谢谢!我需要阅读数组公式。我不熟悉他们。
  • @Brian,我尽可能避免使用数组公式,但有时它们可​​能很关键。它们基本上允许您使用值的数组(范围)作为参数,并遍历所有值。
【解决方案2】:

简答:当在公式中引用类似数字(或类似日期)的文本值时,不要在公式中 Excel 需要数字的地方使用它们。

长答案:即使源列被格式化为文本并且源列中的值真正输入为文本(而不是数字,包括日期),Excel 可能会自动将文本值转换为当您在公式中引用数字(包括日期)时如果您在 Excel 需要数字(或日期)的地方使用它们。

例如(假设美国日期格式),在空白工作表中:

  1. 将 A 列的格式设置为文本。

  2. 在单元格 A1 中,输入值 10-11。

  3. 在单元格 B1 中,输入公式 =T(A1)。如果 T() 工作表函数是文本,则返回提供的值。否则,它返回一个空字符串。 B1单元格中公式的结果应该是10-11,表示A1的值是文本,而不是数字或日期(这种情况下结果为空字符串)。

  4. 在C1单元格中,输入公式=A1。

  5. 在单元格 D1 中,输入公式 =T(C1)。结果也应该是10-11,表示C1中公式的值是文本,不是数字或日期。这表明您可以(有时)在公式中使用看起来像数字(或日期)的文本值,并让 Excel 将其视为文本(这是您想要的)。

  6. 在单元格 E1 中,输入公式 =A1+0。结果将是 40827。这是日期 2011 年 10 月 11 日的数值。这表明您可以(有时)在公式中使用看起来像数字(或日期)的文本值,Excel 会自动将其转换为如果您在 Excel 需要数字的地方(例如 + 运算符的任一侧)使用数字(这是您观察到的)。

【讨论】:

    【解决方案3】:

    要在单元格中插入一个值并使其不被自动格式化,而只是被视为文本,您可以这样输入:

    =("cell data")
    

    例如:

    =("+1 3456789")
    

    【讨论】:

      【解决方案4】:

      当您使用 &"" 时,Excel 将公式的结果转换为文本(就像 *1 将转换为数字一样)。

      因此,您可以使用以下公式:

      =TEXT(A1;"jj-mm")&""
      

      【讨论】:

      • 这不起作用。它部分适用于特定数据,但结果是:“jj-10”。更大的问题是它破坏了其他数据。此单元格中的数据包括以下格式:“10-11”“104-2”“134-45”“45B”“6413-A”。我的需求非常简单——只要将数据解释为简单文本,我使用的公式就可以正常工作。但 Excel 令人讨厌地将 2 位 - 破折号 - 2 位数据视为日期,这打破了公式。
      【解决方案5】:

      如果你在单元格中的文本前面加上一个单引号,它应该在所有引用中表示为文本:

      '10-11
      

      【讨论】:

      • 这不起作用。该公式仍将单元格解释为转换为数字的日期。
      • 但是现在您的单元格数据中有一个单引号,如何在没有引号出现在您的数据中的情况下使其工作?
      • 在我的 Excel 版本 (mac:2011) 上运行良好,数据中没有任何引号。您也可以尝试:="10-11"
      【解决方案6】:

      只需在输入中添加零!

      我遇到了类似的问题,我有一个带有文本前缀的数字列表(如 FOO-1、FOO-25、FOO-979),但我只想要数字部分(1、25、979)所以我可以运行另一个公式。我使用 SUBSTITUTE 将文本部分替换为空白,但我使用这些数字的其他公式得出了虚假的结果。我最终制作了这样的公式:

      =SUBSTITUTE(B1:B10,"FOO-","")+0,现在 ISNUMBER 说的是 TRUE,而之前它说的是 FALSE。

      【讨论】:

        【解决方案7】:

        就我而言,我有一个表格工作表,经销商使用它来宣传零件并让它计算最终成本;它引用了一个锁定的“产品”表。问题是我无法控制他们输入的内容。

        Products can be like:
        101 = A true number
        7-2009 = Reads as date
        7-5601-RT = TEXT/NUMBER reads as both number or text (NOT SOLVED YET)
        CP6072CD = reads as plain text
        

        我已经弄清楚了大部分;唯一一个不是文本/数字的那个。

        如果有人正在寻找类似的解决方案,我执行了以下操作: 我创建了三个额外的列来测试和显示三种不同的情况:“NUMBER”、“DATE”、“TEXT”。

        DATE:         =NOT(ISERROR(DATEVALUE(B42)))
        ISOTHER:      =(ISNUMBER(--(MID(B42,ROW(INDIRECT("1:"&LEN(B42))),1))))
        NUMBER:       =ISNUMBER(B42)
        NUMBER/TEXT:  =NOT SOLVED YET
        
        I42 = DATE
        J42 = NUMBER
        K42 = OTHER
        L42 = TEXT
        M42 = THE RESULT OF THE QUERY BELOW
        
        =IF(AND(I42 = FALSE, J42 = FALSE, K42 = TRUE), "NUMBER", IF(AND( I42 = TRUE, J42= FALSE, K42=TRUE), "DATE", "TEXT"))
        

        这(上)测试所有真/假结果,并根据结果是什么,我使用以下格式对它们中的每一个进行格式化:

        ISNUMBER = VALUE(B42)
        DATE FORMATTED AS B42*1
        ELSE TEXT - AS ORIGINAL
        
        =IF(M42 = "NUMBER", VALUE(B42), IF(M42 = "DATE", B42*1, B42))
        

        所以现在我只需要弄清楚如何测试某个内容是否既是文本又是数字,因为 7-5601-RT 测试结果与数字相同:“FALSE、FALSE、TRUE、TRUE”

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-10
          • 2016-07-12
          相关资源
          最近更新 更多