从单元格中的回车分隔列表中提取多个数值

时间:2015-11-03 15:53:12

标签: excel excel-formula

我的表格中填充了格式如下的单元格:

---(cell)---
3 x item
2 x another item
299 x yet another item
       (... - variable amount of items here)
4 x the last item in this cell
---(end of cell)---

所有项目都用回车符分隔(=CHAR(10))。

我需要根据项目类型提取数字并对它们进行各种操作。我会一次解决一个问题并尝试先提取数字。我使用MID但是在回车后第一组数字字符并没有帮助#34;

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

这里有一系列让你入门的公式。我将细胞分析为A1,分析表结果为B7:I11。列B-I是Item#,Start,End,SubString,Delim,Quantity和Item。

首先,您可以计算单元格中的s数

nCRs:     =LEN($A$1)-LEN(SUBSTITUTE($A$1,CHAR(10),""))

项目数是CR数加1:

nItems:   =LEN($A$1)-LEN(SUBSTITUTE($A$1,CHAR(10),""))+1

注意:要在所有项目上使用相同的工具,我在字符串的开头和结尾添加CR。这样我总是提取CR分隔的子字符串。要获得第一项,请在B7中输入1:

B7: 1

要获取第一个子字符串的开头,请使用SEARCH with start pos = 1

C7: =SEARCH(CHAR(10),CHAR(10)&$A$1&CHAR(10),1)

同样从第一个子字符串的结尾开始,SEARCH从找到第一个CR的右侧开始

D7: =SEARCH(CHAR(10),CHAR(10)&$A$1&CHAR(10),C7+1)

现在使用MID在两个

之间提取文本
E7: =MID(CHAR(10)&$A$1&CHAR(10),C7+1,D7-C7)

在F7中,我有分隔符文本(项目计数和项目描述之间),假设是" x":

F7: =" x "

在G7中找到分隔符的位置

G7: =SEARCH(F7,E7,1)

在H7中提取分隔符左侧的文本(项目计数)并转换为数字

H7: =VALUE(LEFT(E7,G7-1))

在I7中提取项目描述

I7: =RIGHT(E7,LEN(E7)-G7-LEN(F7)+1)

要获取第二个(及后续)项目,请开始搜索找到最后一个CR的CR。所以在C8中

C8: =SEARCH(CHAR(10),CHAR(10)&$A$1&CHAR(10),D7)

填写公式以完成表格。

希望有所帮助

答案 1 :(得分:0)

此解决方案假设包含每个单元格多个项目并由回车符分隔的文本字符串的数据位于{1}}的Sheet1中,如图1所示(根据需要调整公式中的范围)

enter image description here

图。 1

OP提出的目标:

  

我需要提取数字并对它们进行各种操作   根据项目类型。我会一次解决一个问题并尝试   首先提取数字。

     

是的,他们(号码)总是在每次回车的开头,如   例证。我需要做的是像“总和所有数字”,“总和   所有项目A“,”总和所有项目B“等。

此解决方案建议审查目标,以便首先处理项目的提取以创建包含所有项目的表格,在此之后,所有其他目标可以更简单的方式进行锻炼。

  • 首先,我们在<a href="#" onclick="ajax_loader(XXX);return false;"> 中的数据中添加一列。在B6:C11中输入此公式并复制到最后一条记录。

    Sheet1
  • 让我们在C7表格中创建一个表格,从=SUM(1+LEN($B7),-LEN(SUBSTITUTE($B7,CHAR(10),""))) 中的数据中提取项目。

提取表位于Sheet2,包含以下项目(参见图2):

Itm.Nbr (+):在Sheet1中输入此公式并复制到最后一条记录

B6:G55

(+):在B7中输入此公式并复制到最后一条记录

=IF( OR( B6 = SUM( Sheet1!$C$6:$C$11 ), B6 = "" ), "",
- 1 + ROWS( B$6:B7 ) )

Itm.Lne (+):在B7中输入此公式并复制到最后一条记录

=IF( EXACT( C6, C$6 ), 2,
IF( $B7 = "", "",
IF( $B7 <= SUM( INDEX( Sheet1!$C$6:$C$11, 1 ) : INDEX( Sheet1!$C$6:$C$11, C6 ) ), C6,
SUM( 1, C6 ) ) ) )

提取的行(+):在B7中输入此公式并复制到最后一条记录

= IF( EXACT( D$6, D6 ), 1,
IF( $B7 = "", "",
IF( $C7 = $C6, SUM( 1, D6 ), 1 ) ) )

项目:在B7中输入此公式并复制到最后一条记录

=IF( $B7 = "", "",
CLEAN( IF( $D7 = 1,
LEFT( INDEX( Sheet1!$B$6:$B$11, $C7 ),
FIND( CHAR(10), INDEX( Sheet1!$B$6:$B$11, $C7 ) ) ),
MID( LEFT( INDEX( Sheet1!$B$6:$B$11, $C7 ) & CHAR(10),
SEARCH( CHAR(135), SUBSTITUTE( INDEX( Sheet1!$B$6:$B$11, $C7 ) & CHAR(10), CHAR(10), CHAR(135), $D7 ) ) ),
SEARCH( CHAR(135), SUBSTITUTE( INDEX( Sheet1!$B$6:$B$11, $C7 ), CHAR(10), CHAR(135), - 1 + $D7 ) ), LEN( INDEX( Sheet1!$B$6:$B$11, $C7 ) ) ) ) ) )

数量:在B7中输入此公式并复制到最后一条记录

=IF( $B7 = "", "",
IFERROR( MID( $E7, 3 + SEARCH( " x ", $E7 ), LEN( $E7 ) ), "!Err" ) )

(+)此工作字段可以隐藏

enter image description here

图。 2