1 Exxon Mobil 452,926.0 41,060.0
2 Wal-Mart Stores 446,950.0 15,699.0
3 Chevron 245,621.0 26,895.0
4 ConocoPhillips 237,272.0 12,436.0
5 General Motors 150,276.0 9,190.0
6 General Electric 147,616.0 14,151.0
7 Berkshire Hathaway 143,688.0 10,254.0
如何获取上述数据并在 Excel 中创建四列数据?排名# 公司名称 #数据1 #数据2
Excel 中的文本拆分成列函数
这个解决方案接近...
“从右到左读取行”并使用前两个空格分隔文本功能在哪里?
Chers,Mw
答案1
我会分两步完成此操作。
- 数据似乎使用五个空格来分隔,因此我会在文本编辑器中进行查找和替换,将任何五个空格的字符串替换为“安全”字符,例如制表符或管道符(|)
- 在 Excel 中打开文件,选择适当的分隔符或使用数据 > 文本到列
答案2
您也可以使用公式来执行此操作。在 B 列中,复制此公式:
=SUBSTITUTE(A2," ","|")
这将替换 5 个空格,|
结果是1|Exxon Mobil|452,926.0|41,060.0
在 C 列中,向下复制此公式:
=TRIM(LEFT(SUBSTITUTE($B2,"|",REPT(" ",50)),50))
这将|
用 50 个空格替换,取左边的 50 个空格,并修剪填充空格。所以你最终会得到1
在 D 列中,向下复制此公式:
=TRIM(MID(SUBSTITUTE($B2,"|",REPT(" ",50)),50,50))
它不取左边的 50 个字符,而是取从第 50 个字符开始的 50 个字符。
E 列相同,但从第 100 个字符开始:
=TRIM(MID(SUBSTITUTE($B2,"|",REPT(" ",50)),100,50))
F列取最右边的50个字符:
=TRIM(RIGHT(SUBSTITUTE($B2,"|",REPT(" ",50)),50))
如果不喜欢中间有列的话,可以替换$B2
原公式:=SUBSTITUTE(A2," ","|")
跳过一步。
您还可以将原始公式从 更改为 ,=SUBSTITUTE(A2," ","|")
这样=SUBSTITUTE(A2,REPT(" ",5),"|")
如果您的数据发生变化,可能会更易于阅读和处理。
答案3
没有人给出“神奇”的答案,所以我将给出另一个“艰难前行”的答案。请注意,现在是 2021 年,所以有更好的选择,我也会解决这个问题,但 2013 年版本中可用的变体是优先的。
因此,如果进行完整导入,可以使用Import Wizard
但结果并不理想,因为它不接受两个或更多字符的分隔符。因此,“Exxon Mobile”以两列而不是一列的形式出现。我相信 Power Query 在 2013 年就已推出,以某种名称推出,因此这将是进行基本导入的方式。它可以让人们克服单字符分隔符问题,而无需进行大量手动工作(在 PQ 中第一次使用后,然后自动完成)。而且我相信即使在那时它也可以让人们重新排列列,所以...
无论如何,让我们考虑一下问题中的数据已经在 Excel 中,需要拆分和整理。
如何拆分?由于Text to Columns ("T2C")
只是Import Wizard
在需要导入文件的位置之后输入Import Wizard
,因此这样做不会更好。可以运行它并手动移动或公式移动列外的材料,但这会很糟糕。
因此,用公式将其分解。我这里没有提出什么花哨的东西,只是一种非常简单的“将其放入需要的列中”的公式集,然后快速处理排列。
需要四列,并且如第一个答案中所述,五个空格是分隔符字符串。此方法的工作原理如下:
找到这些分隔符字符串中的第一个的起始位置。从中减去 1,即可得到所需第一个字符串的最后位置。(因此,如果
FIND()
报告“2”,则行数据字符串第一部分的最后一个字符以该位置结束。(我MID()
在公式中使用,因为我更喜欢它,LEFT()
或者RIGHT()
除非它们是必需的。个人偏好,我发现这样更具扩展性。)=MID(A1,1,FIND(" ",A1)-1)
接下来,在 A1 中“从原始字符串中减去该值”。从字符串中“减去”是通过
SUBSTITUTE()
将内容替换为空白字符串 (“”) 来完成的。因此:=MID(SUBSTITUTE(A1,I1&" ",""),1,FIND(" ",SUBSTITUTE(A1,I1&" ",""))-1)
它执行“减法”产生一个以下一个所需值开头的较小字符串,然后使用步骤 1 中的方法获取该值。
正如洗发水瓶上写的“冲洗并重复”。对每个想要的部分重复上述步骤,直到最后一个。在这种情况下,只需再做一次!对于每个部分,您必须将其添加到要替换的字符串中。然后该字符串可能会变得很长,但这几乎不令人生畏,也没有任何困难。
=MID(SUBSTITUTE(A1,I1&" "&H1&" ",""),1,FIND(" ",SUBSTITUTE(A1,I1&" "&H1&" ",""))-1)
看看
I1&" "&H1&" "
绳子是如何增长的?因此,最后,只需“减去”已分割出的完整字符串及其中间的分隔符字符串。由于没有更多内容需要查找,因此只
SUBSTITUTE()
需要“减法”( ),无需通过 `MID() 查找其他部分。=SUBSTITUTE(A1,I1&" "&H1&" "&G1&" ","")
现在您有了这些部分,但不是按“从右到左”的顺序。您可以将这些公式设置在 F 列到 I 列中,但从 I 列开始向左移动。但这不是您思维的自然方式,因此,这样做会不舒服,但更重要的是,将公式复制到下一列并不一定以理想的方式调整您的单元格引用。因此,当我遇到这种情况时,我仍然更喜欢以“自然”的方式从左到右工作。尽管在这种情况下,我从内部复制了公式Formula Editor
,而不是从一个单元格复制到另一个单元格,所以这可能根本不重要。只是喜欢“自然”的感觉。
像这样创建公式后,只需在公式左侧插入一个单元格,然后Drag and Drop
按所需顺序(无法在此处输入“正确”...“自然”等等)重新排列公式即可。完成。根据需要将公式复制下来,然后完全完成。
通常,我喜欢使用INDEX()
来反转列顺序,因为它可以自动执行该过程,让公式独立存在,无需手动干预,但这需要使用另一组单元格,因为这些公式是独立的,因为不能轻易将它们引用为 的范围INDEX()
。所以,没有它,使用Drag and Drop
。无论如何,这只是一个小小的额外步骤。
在 2021 年,人们可以简单地使用FILTERXML()
技巧(SUBSTITUTE()
对于分隔符字符串,使用新的分隔符字符串</Element><Element>
,并在开头标记和结尾标记前面添加和附加(使用“Group”作为外部标记)以获取FILTERXML()
可以使用的字符串)。这为您提供了一个数组(一个SPILL
数组),您可以直接将其输入INDEX()
并使用它来反转数组中的列。所以Drag and Drop
最后不要这样做,只需让公式独立存在即可。由于这一切都发生在单个单元格中,向右溢出,因此您可以设置INDEX/FILTERXML"
SPILL` DOWNWARDS 来处理以前需要“向下复制”的情况。一个公式可以取代它们。(对不起 JRRT。)
(现在,如果有人想逐个字符地反转字符串,而不是逐个部分地反转,那就完全是另一回事了。从标题来看,我认为这实际上是愿望。好吧,阅读并学习,嗯?)