将公式视为文本,而不是数字

时间:2011-08-01 13:18:22

标签: excel worksheet-function array-formulas

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

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

7 个答案:

答案 0 :(得分:5)

简答:当在公式中引用类似数字(或类似日期)的文本值时,请不要在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期望一个数字。

答案 1 :(得分:5)

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

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

答案 2 :(得分:5)

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

=("cell data")

例如:

=("+1 3456789")

答案 3 :(得分:4)

当您使用 &"" 时,Excel 会将公式的结果转换为文字(例如*1会转换为数字)。

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

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

答案 4 :(得分:1)

如果您在单元格中的文本前面放置单引号,则应在所有引用上将其表示为文本:

'10-11

答案 5 :(得分:0)

只需在输入中添加零!

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

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

答案 6 :(得分:0)

在我的情况下,我有一个表单工作表,经销商用于广告部分,并计算最终成本;它引用了一个锁定的“产品”表。问题是我无法控制他们输入的内容。

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"))

这个(ABOVE)测试所有的真/假结果,并根据值的结果,我使用以下方法格式化每个结果:

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”