Excel 2013 - 单元格中的多个数字为文本字符串,需要识别是否有小于特定值的
Excel 2013 - Multiple numbers in cell as text string, need to identify if any are less than certain value
我已经获得了大量数据(并且不能返回并要求他们以更有用的方式提供)。它在同一个单元格中包含多个数字,以分号分隔。
A
+-------------------------+
1|Sats |
+-------------------------+
2|92; 89; 94; 99; 100 |
+-------------------------+
3|95; 98; 96 |
+-------------------------+
4|99 |
+-------------------------+
5|88; 95 |
+-------------------------+
6|99; 95; 98; 98; 100; 95 |
+-------------------------+
7|94; 92; 91; 93 |
+-------------------------+
不知何故,我需要确定一个单元格是否包含小于 94 的数字。只是一个 yes/no,幸运的是我不需要比这更复杂的分析。
或者,列出每个单元格中的最小数字。如果数字低于 94,可以显示任何内容。
不幸的是,每个单元格中不同读数的数量是无限的 - 否则,我将使用嵌套公式检查第一个、第二个、第三个等条目。
有人有什么想法吗?这完全难倒了我。
一种方法是使用 PowerQuery(假设您是 2013 年或之后的用户)。要执行此 select 您的数据,请转到“数据”>“来自 Table/Range”。 Power Query window 将打开。转到转换>拆分列>按分隔符。您可以 trim 通过单击格式>Trim.
删除空格的结果
将此列放入C,然后选择此列,使用Data->Text to columns,用分号分割,这样就分割成D, E, F...
之后,在B列写=MIN(C1:Z1),或者你可以输入更大的单元格数。
然后在A栏写=IF(C1>94, "YES","NO")。然后按 A 列筛选。
您可以为此创建一个 UDF。
在 VBA (Alt +F11)
中创建一个新模块
然后使用下面的代码:
Public Function ParseAndSum(source As String) As Integer
Dim tmp() As String, i As Integer
tmp = Split(source, ";")
For i = LBound(tmp) To UBound(tmp)
ParseAndSum = Val(tmp(i)) < 94
Next i
End Function
在 B2 中使用公式:
=ParseAndSum(H19)<0
如果A2中的字符串中有小于94的值,它将return TRUE
,否则它将return FALSE
基于这个answer,你可以使用下面的数组公式(不要忘记Ctrl+Shift +Enter!) in cell B2
to return a TRUE
or FALSE
if your list of numbers contains a number less than 94
:
=SUM(--(1*TRIM(MID(SUBSTITUTE(A2,";",REPT(" ",99)),(ROW(OFFSET($A,,,LEN(A2)-LEN(SUBSTITUTE(A2,";",""))+1))-1)*99+((ROW(OFFSET($A,,,LEN(A2)-LEN(SUBSTITUTE(A2,";",""))+1)))=1),99))<94))>0
然后您可以将其向下拖动到 B 列中,它应该可以工作,但是,您可能还需要替换分隔符之间的空格 ;
,以便它是每个单元格中的一个连续列表,例如92;89;...
我很确定你在 2013 年有 FILTERXML
功能。
你可以用它来拆分字符串,然后在 array 公式中测试它:
=OR(FILTERXML("<t><s>"&SUBSTITUTE(A2,";","</s><s>")&"</s></t>","//s")<94)
因为这是一个数组公式,您需要 "confirm" 按住 ctrl + shift 并点击 输入。如果您正确执行此操作,Excel 将在公式周围放置大括号 {...}
,如在公式栏
中观察到的那样
我已经获得了大量数据(并且不能返回并要求他们以更有用的方式提供)。它在同一个单元格中包含多个数字,以分号分隔。
A
+-------------------------+
1|Sats |
+-------------------------+
2|92; 89; 94; 99; 100 |
+-------------------------+
3|95; 98; 96 |
+-------------------------+
4|99 |
+-------------------------+
5|88; 95 |
+-------------------------+
6|99; 95; 98; 98; 100; 95 |
+-------------------------+
7|94; 92; 91; 93 |
+-------------------------+
不知何故,我需要确定一个单元格是否包含小于 94 的数字。只是一个 yes/no,幸运的是我不需要比这更复杂的分析。
或者,列出每个单元格中的最小数字。如果数字低于 94,可以显示任何内容。
不幸的是,每个单元格中不同读数的数量是无限的 - 否则,我将使用嵌套公式检查第一个、第二个、第三个等条目。
有人有什么想法吗?这完全难倒了我。
一种方法是使用 PowerQuery(假设您是 2013 年或之后的用户)。要执行此 select 您的数据,请转到“数据”>“来自 Table/Range”。 Power Query window 将打开。转到转换>拆分列>按分隔符。您可以 trim 通过单击格式>Trim.
删除空格的结果将此列放入C,然后选择此列,使用Data->Text to columns,用分号分割,这样就分割成D, E, F...
之后,在B列写=MIN(C1:Z1),或者你可以输入更大的单元格数。
然后在A栏写=IF(C1>94, "YES","NO")。然后按 A 列筛选。
您可以为此创建一个 UDF。
在 VBA (Alt +F11)
中创建一个新模块然后使用下面的代码:
Public Function ParseAndSum(source As String) As Integer
Dim tmp() As String, i As Integer
tmp = Split(source, ";")
For i = LBound(tmp) To UBound(tmp)
ParseAndSum = Val(tmp(i)) < 94
Next i
End Function
在 B2 中使用公式:
=ParseAndSum(H19)<0
如果A2中的字符串中有小于94的值,它将return TRUE
,否则它将return FALSE
基于这个answer,你可以使用下面的数组公式(不要忘记Ctrl+Shift +Enter!) in cell B2
to return a TRUE
or FALSE
if your list of numbers contains a number less than 94
:
=SUM(--(1*TRIM(MID(SUBSTITUTE(A2,";",REPT(" ",99)),(ROW(OFFSET($A,,,LEN(A2)-LEN(SUBSTITUTE(A2,";",""))+1))-1)*99+((ROW(OFFSET($A,,,LEN(A2)-LEN(SUBSTITUTE(A2,";",""))+1)))=1),99))<94))>0
然后您可以将其向下拖动到 B 列中,它应该可以工作,但是,您可能还需要替换分隔符之间的空格 ;
,以便它是每个单元格中的一个连续列表,例如92;89;...
我很确定你在 2013 年有 FILTERXML
功能。
你可以用它来拆分字符串,然后在 array 公式中测试它:
=OR(FILTERXML("<t><s>"&SUBSTITUTE(A2,";","</s><s>")&"</s></t>","//s")<94)
因为这是一个数组公式,您需要 "confirm" 按住 ctrl + shift 并点击 输入。如果您正确执行此操作,Excel 将在公式周围放置大括号 {...}
,如在公式栏