Excel:如何从单个记录创建多个记录

Excel:如何从单个记录创建多个记录

我有几家公司的数据库。每家公司有一条记录。每条公司记录中有多个联系人。

如何为每个联系人创建记录(为每个联系人保留相同的公司信息)?

以下是一个示例:

数据示例行 - 一家公司,多个联系人姓名/电子邮件

答案1

对于您的示例来说,这已经足够了。您需要进行一些修改才能与实际数据库匹配。

Example Data

Company | Address | City  | State | ZIP | Phone | GM | EmailGM | PD | EmailPD | SM | EmailSM | PRM | EmailPRM
ABC     | 1234 M  | Saint | MN    | zip | phone | gm | gm1@gm  | pd | pd1@pd  | sm | sm1@sm  | prm | prm@prm

Result

Company | Address | City  | State | ZIP | Phone | Name | Email
ABC     | 1234 M  | Saint | MN    | zip | phone | gm   | gm1@gm
ABC     | 1234 M  | Saint | MN    | zip | phone | pd   | pd1@pd
ABC     | 1234 M  | Saint | MN    | zip | phone | sm   | sm1@sm
ABC     | 1234 M  | Saint | MN    | zip | phone | prm  | prm1@prm

Company column (and Address, City, State, ZIP, Phone)
=INDIRECT("A"&(CEILING((ROW()+1)/4-1, 1)))

Name column (and Email)
=INDIRECT(CHAR(CODE("G")+MOD((ROW()-2), 4)*2)&CEILING((ROW()-1)/4+1, 1))

解释

在公司列,公式引用"A"列并且行号从当前行开始计算。

ROW()-1将行号调整回来,因为我们在数据表中有标题。我们使用数字1因为数据表数据从行开始2,而不是行1

/4 + 1基本上复制结果行4次,然后将结果行号向前调整一,因为我们在数据表中有标题。我们使用数字4因为我们有4 姓名和电子邮件.我们使用数字1因为数据表数据从行开始2,而不是行1

CEILING( ... , 1 )将行号向上舍入为整数。


在名称列中,公式引用列"G"并且行号从当前行开始计算。

(ROW()-2)将结果移MOD0。我们使用数字2因为结果表数据从行开始2

MOD( ... , 4)计算要获取哪一列。结果为0表示列G1表示列H,依此类推。我们使用数字4因为我们有4 姓名和电子邮件

+ ... * 2将获取的列移至列右侧Gthe result of modulo, multiplied by 2我们使用数字2因为我们有2列,姓名和电子邮件,以供获取。

CODE("G")将字符“G”转换为其 ASCII 码。

CHAR( ... )将移位列的值(例如,从 7 到 11,即从“G”到“K”列)转换回字符串。

CEILING( ... )给出要获取的数据行号。

操作说明

只需将列字母更改为匹配的列即可。

例子:

对于地址栏,将字母更改"A""B"

对于电子邮件列,将字母更改"G""H"

笔记

你提到你将拥有7 姓名和电子邮件。您需要调整公式以使用 7 而不是 4。

此公式对您放置此公式的位置很敏感。此公式假设您将它放在第 2 行(第 1 行用于标题)。如果您将它放在第 1 行,则需要进行调整(请参阅解释

此公式不会跳过空白的姓名和电子邮件。所有公司都将恰好有 4 行,无论可用的姓名和电子邮件数量是多少。

这并非旨在替代数据库,但您可以使用此公式生成的数据来创建数据库。

答案2

在 Excel 中执行此操作的另一种方法是使用Power QueryData ► Get and Transform ► From Table(取决于 Excel 版本)

进入查询编辑器后,选择重复的列,然后 UNPIVOT 其他列。这将为您提供如下表格:

在此处输入图片描述

请注意,我重命名了由 UNPIVOT 操作生成的新列。

现在添加第三列,将其标记为“电子邮件”,并在其中输入此公式I2

I2: =IF(ISERR(SEARCH("email",[@Position])),H3,"")

在此处输入图片描述

然后只需从电子邮件列中过滤掉空白即可。您可以使用简单的过滤器执行此操作;然后将可见单元格复制/粘贴到结果区域;或者您可以使用高级过滤器,它具有将过滤器结果发送到指定区域的机制:

在此处输入图片描述

相关内容