在行数不同的情况下转置数据

时间:2017-02-02 01:40:20

标签: excel excel-vba vba

我需要将数据连续移动到列。基本上是转置。

从下表中我试图将每封电子邮件转变为一行,而不是将收件人放在B列。真正棘手的部分(对我而言)是每封电子邮件的行数因数量而异收件人各不相同。有没有办法让收件人数据从多行移动到一行?

Email 1   Recipient 1   
          Recipient 2   
          Recipient 3   
Email 2   Recipient 1   
          Recipient 2   
Email 3   Recipient 1   
          Recipient 2

1 个答案:

答案 0 :(得分:1)

这是一个不需要VBA的解决方案,如果您不需要这么做,这是一种更简单的方法。

如果您想将所有电子邮件发送到单个单元格,只需使用第三列中的公式即可。假设您的数据从A1开始没有标题,只需将此公式粘贴到C1并填写:

=if(A2<>"",B1,B1 & ";" & C2)

这个公式种类从下到上。

如果A列中的下一行有值,则下一行是新电子邮件,因此当前行是当前电子邮件的最后一行。在这种情况下,请从当前收件人开始。

如果A列中的下一行没有值,则下一行是同一电子邮件的一部分,因此可以将当前收件人添加到收件人列表中。 (将其添加到列表的开头会使收件人保持相同的顺序。)

结果是,C列将在行A中的单个单元格中具有完整的收件人列表,这些行在A列中有电子邮件。

最后一封电子邮件最后会有一个额外的分号,我们可以通过更复杂的方式摆脱它,但如果你只是发送电子邮件,那就无所谓了,这更容易理解!

“中间”行中C列中的值只是工作值,不是必需的。你可以完全摆脱中间的行:

复制整个表格;粘贴为值(自身或新表);过滤表格,将电子邮件列设置为等于空白(显示中间行),然后选择并删除所有可见行。仅使用您的电子邮件和完整收件人清除过滤器。然后,您还可以删除列B,其中只包含每封电子邮件的第一个收件人。

现在适合用于发送电子邮件。但是,如果您确实需要将收件人拆分为单独的列,那么只需使用Text-to-Columns函数:

选择包含整合电子邮件的列,转到功能区上的“数据”选项卡,单击“文本到列”,选择“分隔”,然后单击“下一步”,选择“分号”作为分隔符,然后单击“完成”。瞧!