如何在 Excel 中将垂直数据列表转换为水平数据列表

How to convert vertical list of data into horizontal in Excel

我正在尝试将我父亲的旧诺基亚 phone 中的联系人导出到 iPhone 中。他们的旧软件 Nokia PC Suite 可以将这些联系人导出为 CSV 和格式如下的纯文本:

First Name: ...
Last Name: ...
Phone: ...

First Name: ...
Last Name: ...
Phone: ...

...

注意#1:有时没有名字,只有姓氏phone数。它们以换行符隔开。

CSV 的问题是编码乱了,我找不到它是什么。我想知道如何从这个纯文本中将联系人导出到 CSV 甚至 vCard。

预期结果:

First Name | Last Name | Phone
FirstName1 | LastName1 | #####1
FirstName2 | LastName2 | #####2
FirstName3 | LastName3 | #####3

编辑:注意#2:有超过 600 个联系人。
编辑#2' 这是一个例子。左侧是源代码,右侧是我对 CSV 文件的需求。顺便说一句,不介意那些 "A"s,这只是我父亲使用的优先事项...

我想出了一个不用 VBA macro/UDF.

的方法

这是一个基本公式,每列略有变化。

这是我测试过的布局:

因此,如果您的数据从 A1 开始,并且每个 "block" 之间有一个中断,您可以在 C2:

中执行此操作

=RIGHT(OFFSET($A1,(ROW()-2)*3,0),LEN(OFFSET($A1,(ROW()-2)*3,0))-SEARCH(":",OFFSET($A1,(ROW()-2)*3,0)))向下拖动

然后,在 D2 中使用相同的公式,只是将出现 $A1 的地方 $A1 更改为 $A2

E2中,相同的公式,但每次出现$A1并向下拖动时,将$A1更改为$A3

编辑:或者,您可以将它放在 C2 中,然后上下拖动。这是一个不需要编辑每一列的公式:

=RIGHT(OFFSET(INDIRECT("$A"&ROW()-1+COLUMN()-3),(ROW()-2)*3,0),LEN(OFFSET(INDIRECT("$A"&ROW()-1+COLUMN()-3),(ROW()-2)*3,0))-SEARCH(":",OFFSET(INDIRECT("$A"&ROW()-1+COLUMN()-3),(ROW()-2)*3,0)))